由emergency_mutex引起的iphone EXC_BAD_ACCESS

时间:2010-02-05 01:36:27

标签: iphone

我的iphone应用程序偶尔会在调试器中使用此消息在模拟器和设备上崩溃:

Program received signal:  “EXC_BAD_ACCESS”.
Data Formatters unavailable (Error calling dlopen for: "/Developer/Applications/Xcode.app/Contents/PlugIns/GDBMIDebugging.xcplugin/Contents/Resources/PBGDBIntrospectionSupport.A.dylib": "dlopen(/Developer/Applications/Xcode.app/Contents/PlugIns/GDBMIDebugging.xcplugin/Contents/Resources/PBGDBIntrospectionSupport.A.dylib, 10): no suitable image found.  Did find:
    /Developer/Applications/Xcode.app/Contents/PlugIns/GDBMIDebugging.xcplugin/Contents/Resources/PBGDBIntrospectionSupport.A.dylib: open() failed with errno=24")

堆栈轨道只是说:

0 (anonymous namespace)::emergency_mutex
1 ??
2 __NSFireTimer
3 CFRunLoopRunSPecific
4 CFRunLoopRunInMode
5 GSEventRunModal
6 GSEventRun
7 UIApplicationMain
8 main

我不知道这意味着什么或如何进行调试。

2 个答案:

答案 0 :(得分:1)

EXEC_BAD_ACCESS的一个主要原因是尝试访问过度释放的对象。

要了解如何解决此问题,请阅读以下文档:DebuggingAutoReleasePool

即使您认为自己并未“发布自动发布的对象”,这也适用于您。

此方法非常有效。我一直使用它取得了巨大的成功!!

总之,这解释了如何使用Cocoa的NSZombie调试类和命令行“malloc_history”工具来准确找到代码中已访问的已发布对象。

<强>旁注:

运行仪器并检查泄漏无助于排除EXEC_BAD_ACCESS故障。内存泄漏与EXEC_BAD_ACCESS无关。泄漏的定义是您无法再访问的对象,因此您无法调用它(并且不能过度释放它)。

答案 1 :(得分:0)

EXC_BAD_ACCESS在内存管理方面出现了很多,您是通过仪器运行程序来检查或泄漏,还是确保您没有尝试访问已经准备好发布的对象?

编辑:关于调试此类错误http://www.codza.com/how-to-debug-exc_bad_access-on-iphone

的好帖子