Как найти причину для USER 44 PANIC? - PullRequest
2 голосов
/ 19 февраля 2009

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

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

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

Ответы [ 4 ]

6 голосов
/ 20 февраля 2009

С 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 отладчик должен прерываться на линии, вызывающей панику, и вы должны увидеть неправильное удаление.

1 голос
/ 25 февраля 2009

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

0 голосов
/ 26 марта 2009

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

0 голосов
/ 19 февраля 2009

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

...