2

私たちが開発している製品の 1 つは、C++ と Symbian で作成された nokia 電話用の電話アプリです。しばらく前に、USER 44 パニックで「ランダムな」クラッシュが発生し始めました。

私は symbian 環境にかなり慣れていないので、このバグの原因を突き止めるのに役立つツールと推奨事項を探しています。

取得できる「スタック トレース」に相当するものはありますか? それについての洞察を与えることができる一般的なパニックキャッチコードはありますか?

4

4 に答える 4

6

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 でデバッグする場合、デバッガーはパニックを引き起こす行で中断し、無効な削除を確認できるはずです。

于 2009-02-19T22:16:00.443 に答える
1

Kasprzol が指摘したように、デバッガーをステップ実行すると、パニックの原因となっている一連の行またはルーチンに絞り込むことができます。また、所有権が別のヒープ オブジェクトに譲渡されたヒープ オブジェクトを削除しようとしていないことを確認することもできます (おそらく、この事実を明確に文書化していないメソッド呼び出しを介して)。明示的に削除する前に、そのオブジェクトは既に削除されています。 . 私は前に後者に噛まれたことがあります。

于 2009-02-25T13:49:20.177 に答える
0

私の漠然とした理解は、USER44とUSER45のパニックは両方ともヒープの問題に関係しているということです。最も一般的な問題は、二重削除です。ポインタを削除した後、ポインタをNULLにしますか?それらを削除する前にNULLをチェックしていますか?どこで何かを二重に削除できますか?

于 2009-02-19T19:42:34.287 に答える
0

デバッグのための最も簡単な選択は、おそらく Carbide 2.0 を使用することです。これは、完全な機能があり、無料で入手できるためです。

于 2009-03-26T09:54:32.433 に答える