我收到错误在0xb0987654处,EXC_BAD_ACCESS代码=2我想知道如何打印出0xb0987654处的值?
myss37ts1#
要调试EXC_BAD_ACCESS,通常可以通过启用僵停对象来找出悬挂指针的位置。
X代码
Product > Scheme > Edit Scheme
然后,配置如下👇🏼
应用程序代码
选择编辑目标,并添加以下环境变量:
NSZombieEnabled=YES
EXC_BAD_ACCESS的另一个原因可能是无限递归,这可以通过添加一些日志记录来找到。
针对C++得更新:
要使用Clang编译器调试C++中的悬空指针,请尝试使用Google的Address Sanitizer (ASAN)。
q7solyqu2#
看起来您可能正在尝试写入代码页或其他内容?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. */
并从克恩_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有时也能捕捉到这类错误(你可以在Xcode的Run方案中启用它)。
piztneat3#
确定导致崩溃的原因。是在特定视图控制器的视图didLoad时崩溃,还是在委托方法中或在特定操作中崩溃。这通常有助于找到导致错误的对象。
希望这对你有帮助。此致,吉森
3条答案
按热度按时间myss37ts1#
要调试EXC_BAD_ACCESS,通常可以通过启用僵停对象来找出悬挂指针的位置。
X代码
然后,配置如下👇🏼
应用程序代码
选择编辑目标,并添加以下环境变量:
EXC_BAD_ACCESS的另一个原因可能是无限递归,这可以通过添加一些日志记录来找到。
针对C++得更新:
要使用Clang编译器调试C++中的悬空指针,请尝试使用Google的Address Sanitizer (ASAN)。
q7solyqu2#
看起来您可能正在尝试写入代码页或其他内容?EXC_BAD_ACCESS在/usr/include/mach/exception_types.h中有描述:
并从克恩_return.h:
您可以通过执行以下操作来查看该地址在二进制文件中的位置:
但你真正需要弄清楚的是谁在那里写。如果问题很简单,这可能会告诉你哪里出了问题,但正如碧玉所建议的,这可能是一些释放后使用或其他类似的问题,当你崩溃的时候,坏的因素早就消失了。guardmalloc有时也能捕捉到这类错误(你可以在Xcode的Run方案中启用它)。
piztneat3#
确定导致崩溃的原因。是在特定视图控制器的视图didLoad时崩溃,还是在委托方法中或在特定操作中崩溃。这通常有助于找到导致错误的对象。
希望这对你有帮助。
此致,吉森