我收到一个错误
EXC_BAD_ACCESS 代码=2 at0xb0987654
我想知道如何打印出 0xb0987654 的值?
要调试 EXC_BAD_ACCESS,您通常可以通过启用僵尸对象来找出悬空指针的位置。
Xcode
选择编辑方案,然后在“运行”部分中选择“诊断”选项卡,然后单击“僵尸对象”选项。
应用代码
选择编辑目标,并添加以下环境变量:
NSZombieEnabled=YES
EXC_BAD_ACCESS 的另一个原因可能是无限递归,这可以通过添加一些日志记录来找到。
C++ 更新:
要使用 Clang 编译器调试 C++ 中的悬空指针,请尝试使用Google 的Address Sanitizer (ASAN)。
看起来您可能正在尝试写入代码页或其他内容?/usr/include/mach/exception_types.h 中描述了 EXC_BAD_ACCESS:
#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
但是你真正需要弄清楚的是谁在试图在那里写作。如果问题很简单,这可能会告诉您出了什么问题,但正如 Jasper 所建议的那样,这可能是一些释放后使用或其他此类问题,并且当您崩溃时,坏演员早就消失了。guardmalloc 有时也可以捕捉到这种错误(你可以在 Xcode 的 Run 方案中启用它。)
确定导致崩溃的原因。它是否在查看特定视图控制器 didLoad 或委托方法或特定操作时崩溃。这通常有助于找到导致错误的对象。
我希望这能帮到您。
问候, 吉森