EXC_BAD_ACCESS错误跟踪原点

时间:2011-02-14 12:58:18

标签: iphone

我正在测试EXE_BAD_ACCESS错误。我已将NSZombieEnabled,MallocStackLogging,MallocStackLoggingNoCompact设置为YES。现在在调试器中,当我从调试模式运行我的应用程序时,我收到此消息,我可以看到:

iota(3586) malloc: recording malloc stacks to disk using standard recorder
iota(3586) malloc: stack logs being written into /private/var/mobile/Applications/8E21A85B-369E-4487-962B-1550E56602DC/tmp/stack-logs.3586.iota.index
iota(3586) malloc: Please issue: cp /private/var/mobile/Applications/8E21A85B-369E-4487-962B-1550E56602DC/tmp/stack-logs.3586.iota.suRQjy.link /tmp/

当我即将遇到错误时,

2011-02-14 14:29:44.350 iota[3586:307] *** -[CFString autorelease]: message sent to deallocated instance 0x81eab70

最后,当我在调试器中给出命令以查看堆栈跟踪

(gdb)shell malloc_history 3586 0x81eab70

我得到了

malloc_history cannot examine process 3586 because the process does not exist.

任何人都可以告诉我我做错了什么,在错误发生之前,我设置了

set env MallocStackLogging 1 in the debugger too

先谢谢

2 个答案:

答案 0 :(得分:0)

看起来你正在发布一个你不拥有的NSString。如果从其中一个类方法中获取一个字符串,它们将作为自动释放的对象传递,所以除非你保留它,否则你不应该释放它。

如需完整的探索,请查看Memory Management Programming Guidelines

答案 1 :(得分:0)

在您使用内存时,内存可能会保持分配状态,或在测试期间被释放但同时仍然有效,但在设备上运行时更有可能被释放并显示为错误的访问错误。

跟踪这些事情的最佳方式,无论如何都是一个好主意(即使没有明显的问题)是在“工具”工具中运行应用程序,尤其是使用“泄漏”选项。