Изменения

Перейти к: навигация, поиск

Блог:Виталий Филиппов/2012-03-12 Баги KDevelop

3451 байт добавлено, 22:41, 11 марта 2012
Новая страница: «KDevelop всё-таки имеет баги, например я нашёл полтора: [https://bugs.kde.org/show_bug.cgi?id=283356 баг 283356] и [https...»
KDevelop всё-таки имеет баги, например я нашёл полтора: [https://bugs.kde.org/show_bug.cgi?id=283356 баг 283356] и [https://bugs.kde.org/show_bug.cgi?id=295766 баг 295766].

Второй как бы не совсем баг, но если пытаться скормить в KDevelop что-то безумное типа битрикса, где пипец как много каталогов, он повисает в попытках сделать очередной inotify, на который ему говорит «хрен там» ядро, ибо по дефолту sysctl fs.inotify.max_user_watches = 8192… Я лично считаю, что он в этой ситуации не должен повисать намертво, а должен просить поднять лимит… Но в любом случае этот «полубаг» успешно обходится, собственно, поднятием лимита.

А вот первый — действительно баг — KDevelop время от времени валится на некоторых исходниках. Я поотлаживал и нашёл минимальный тест, простой PHP-код, который валит KDevelop :)
<code-php>
<?php
$a = new A();
$a->x = 1;
class A {
var $x = 1;
}
</code-php>

Смысл в том, что оно пытается делать довольно приличный статический анализ PHP-кода, и запоминает поля, определённые присваиванием. А кроме того, оно пытается предупреждать о некорректных переопределениях (ну например дважды var $x в одном классе). Но из-за этого оно раньше ругалось на переопределение, если сначала видело присваивание, а только потом определение. Это типа зафиксили в баге [https://bugs.kde.org/show_bug.cgi?id=241750 баг 241750], но только криво зафиксили — код почему-то подразумевает, что видит определение именно внутри метода класса, и тупо использует currentContext()->parentContext() (то есть «тело функции» &rarr; «тело класса»). Но:
* Присваивание бывает вообще снаружи класса, и тогда parentContext = NULL &rArr; SEGFAULT.
* Определение поля — в классе, но не внутри метода, соответственно, и сам «фикс» ошибки переопределения ни фига не работает. Вернее работает, но не всегда, а как повезёт, в зависимости от порядка добавления присваивания и определения. Если сначала написать присваивание внутри метода класса, а ''потом'', после него, определение — не работает.

Хз, может и попробую зафиксить, но не факт, что это окажется легко.
{{wl-publish: 2012-03-12 02:41:29 +0400 | VitaliyFilippov }}

Навигация