Как найти причину НАПАДЕНИЯ ПОЛЬЗОВАТЕЛЯ 44?

Один из разрабатываемых нами продуктов - телефонное приложение для телефонов nokia, написанное на C ++ и Symbian, мы начали получать "случайные" сбои некоторое время назад из-за паники USER 44.

Я новичок в среде Symbian, поэтому мне нужны инструменты и рекомендации, которые помогут найти корень этой ошибки.

Есть ли эквивалент «трассировки стека», который я могу получить? Есть ли общий код для улавливания паники, который мог бы дать мне некоторое представление о нем?


person webclimber    schedule 19.02.2009    source источник


Ответы (4)


Из http://www.symbian.com/developer/techlib/v9.1docs/doc_source/reference/N10352/UserPanics.html:

This panic is raised by the Free() and FreeZ() member functions of an RHeap.
It is caused when the cell being freed overlaps the next cell on the free
list (i.e. the first cell on the free list with an address higher than the
one being freed).

Это означает, что ваш вызов delete / delete [] (который, в свою очередь, вызовет Free () / FreeZ ()) с недопустимым указателем. При отладке в Carbide отладчик должен прервать линию, вызывающую панику, и вы должны увидеть недопустимое удаление.

person Kasprzol    schedule 19.02.2009

Как отметил Каспрзол , прохождение отладчика должно позволить вам сузиться до набора строк или подпрограмм, вызывающих панику. Вы также можете убедиться, что вы не пытаетесь удалить объект кучи, право собственности на который было передано другому объекту кучи (возможно, через вызов метода, который явно не документирует этот факт), который уже удалил этот объект, прежде чем вы удалите его явно . Последние укусили меня раньше.

person ayaz    schedule 25.02.2009

Я смутно понимаю, что паника USER 44 и USER 45 связаны с проблемами кучи. Наиболее частая проблема - двойное удаление. Вы обнуляете свои указатели после их удаления? Вы проверяете NULL перед их удалением? Где можно было что-то дважды удалить?

person Doug T.    schedule 19.02.2009
comment
вам не нужно проверять NULL при удалении - безопасно и совершенно законно вызывать delete для NULL. - person Kasprzol; 20.02.2009

Самым простым выбором для отладки, вероятно, является использование Carbide 2.0, поскольку он полнофункциональный и находится в свободном доступе.

person Community    schedule 26.03.2009