我收到了错误
EXC_BAD_ACCESS代码= 2 at0xb0987654
我想知道如何打印出0xb0987654的值?
答案 0 :(得分:32)
要调试EXC_BAD_ACCESS,通常可以通过启用僵尸对象找出悬空指针的位置。
<强>的Xcode 强>
选择编辑方案,然后选择“运行”部分中的“诊断”选项卡,然后单击“Zombie Objects”选项。
<强> AppCode 强>
选择编辑目标,并添加以下环境变量:
NSZombieEnabled=YES
EXC_BAD_ACCESS的另一个原因可能是无限递归,可以通过添加一些日志来找到。
C ++更新:
要使用Clang编译器调试C ++中的悬空指针,请尝试使用Google的Address Sanitizer (ASAN)。
答案 1 :(得分:2)
看起来您可能正在尝试写入代码页或其他内容? EXC_BAD_ACCESS在/usr/include/mach/exception_types.h中描述:
#define EXC_BAD_ACCESS 1 /* Could not access memory */
/* Code contains kern_return_t describing error. */
/* Subcode contains bad memory address. */
来自kern_return.h:
#define KERN_PROTECTION_FAILURE 2
/* Specified memory is valid, but does not permit the
* required forms of access.
*/
您可以通过执行以下操作来查看二进制文件中的地址:
(lldb) image lookup -va 0xb0987654
但你真正需要弄清楚的是谁在那里写作。如果问题很简单,这可能会告诉你什么是错的,但正如贾斯帕所说,这可能是一些免费使用或其他类似的问题,而且当你崩溃时,糟糕的演员早已消失。 guardmalloc有时也可以捕获这种错误(你可以在Run方案中的Xcode中启用它。)
答案 2 :(得分:0)
确定导致崩溃的原因。在查看特定视图控制器didLoad或委托方法或特定操作时是否崩溃。这通常有助于找到导致错误的对象。
我希望这会对你有所帮助。
此致 吉生