如何找到USER 44 PANIC的原因?

时间:2009-02-19 18:36:56

标签: c++ debugging symbian panic

我们开发的产品之一是用C ++和Symbian完成的诺基亚手机的手机应用程序,我们在用户44恐慌时开始“随机”崩溃。

我是Symbian环境的新手,所以我正在寻找工具和建议来帮助找到这个bug的根源。

我能得到相当于“堆栈跟踪”吗? 是否有通用的恐慌性捕获代码可以让我对它有所了解?

4 个答案:

答案 0 :(得分: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).

这意味着,您的调用删除/删除[](反过来将使用无效指针调用Free()/ FreeZ())。当在Carbide下进行调试时,debuger应该在引起恐慌的行上突破,你应该能够看到无效的删除。

答案 1 :(得分:1)

作为Kasprzol pointed out,单步执行调试器应该可以缩小到导致恐慌的行或例程。您可能还希望确保您没有尝试删除其所有权已转移到另一个堆对象的堆对象(可能通过一个方法调用,该方法调用未明确记录此事实),该对象在您明确删除该对象之前已删除该对象。我以前被后者咬了。

答案 2 :(得分:0)

我的模糊理解是USER 44和USER 45恐慌都与堆问题有关。最常见的问题是双重删除。删除后你的指针是NULL吗?在删除之前是否检查NULL?你可以在哪里删除一些东西?

答案 3 :(得分:0)

最简单的调试选择可能是使用Carbide 2.0,因为它功能齐全且免费提供。