【发布时间】:2013-11-13 10:43:48
【问题描述】:
我收到一个错误
EXC_BAD_ACCESS 代码=2 at0xb0987654
我想知道如何打印出 0xb0987654 处的值?
【问题讨论】:
-
我想您不想打印出该地址的值,因为该地址首先是您的问题。 让你到达那里是要问的问题。
标签: objective-c xcode lldb
我收到一个错误
EXC_BAD_ACCESS 代码=2 at0xb0987654
我想知道如何打印出 0xb0987654 处的值?
【问题讨论】:
标签: objective-c xcode lldb
要调试 EXC_BAD_ACCESS,您通常可以通过启用僵尸对象来找出悬空指针的位置。
Xcode
选择编辑方案,然后选择运行部分中的诊断选项卡,然后单击“僵尸对象”选项。
应用程序代码
选择编辑目标,并添加以下环境变量:
NSZombieEnabled=YES
EXC_BAD_ACCESS 的另一个原因可能是无限递归,这可以通过添加一些日志记录来找到。
C++ 更新:
要使用 Clang 编译器在 C++ 中调试悬空指针,请尝试使用来自 Google 的 Address Sanitizer (ASAN)。
【讨论】:
-fsanitize..
看起来您可能正在尝试写入代码页或其他内容? /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 方案中启用它。)
【讨论】:
image lookup -va 0x1586470c4 in lldb 根本没有给我任何输出,甚至没有错误消息。
确定导致崩溃的原因。它是否在查看特定视图控制器 didLoad 或委托方法或特定操作时崩溃。这通常有助于找到导致错误的对象。
希望对你有所帮助。
问候, 吉森
【讨论】: