14 нояб. 2008 г.

Shit happens

Конечно же очередная проблема свалилась на мою голову, хотя, проанализировав её я могу чётко сказать, что это я её же и себе сам свалил.

Но в этот раз ошибка связана не с указателями, ссылками или стековыми переменными, а с нарушением использования API.

Суть проблемы - необходимо построить дерево в таблице - для этого использую QTreeView и собственную реализацию модели на основании QAbstractItemModel.

Если бегло - то для дерева я сам должен забоится о создании индексов дерева, но в одном прекрасном месте я создавал наполовину верный индекс (т.е с одной стороны он распознаётся как верный, с другой стороны значений по этому индексу просто не может быть, и это не корень).

Qt безусловно защищается от нерадивых программистов через Q_ASSERT, да только вот беда в том, что если qt была собрана без debug информации, т.е. release, и никаких Q_ASSERT уже там нет.

А стек... stack was corrupted и точка. Никакой gdb уже не поможет тут.

Мораль: Соблюдайте API и по возможности используйте библиотеки с включённой debug информацией.

Комментариев нет: