我收到了一个错误
EXC_BAD_ACCESS代码2,位于0xb0987654处
我想知道如何打印出位于0xb0987654的值?
我收到了一个错误
EXC_BAD_ACCESS代码2,位于0xb0987654处
我想知道如何打印出位于0xb0987654的值?
若要调试 EXC_BAD_ACCESS,您通常可以通过启用僵尸对象来找到悬空指针的位置。
Xcode
Product > Scheme > Edit Scheme
然后,像下面这样配置
AppCode
选择编辑目标,并添加以下环境变量:
NSZombieEnabled=YES
EXC_BAD_ACCESS的另一个原因可能是无限递归,可以通过添加一些日志来发现。
C++更新:
要使用Clang编译器调试C++中的悬空指针,请尝试使用Google的Address Sanitizer (ASAN)。
看起来你可能正在尝试写入代码页面或其他什么东西?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
但是,你真正需要弄清楚的是谁在尝试写入那里。如果问题很简单,这可能会告诉你出了什么问题,但正如Jasper所建议的那样,这可能是一些使用后释放或其他类似的问题,而坏的操作者在崩溃时已经消失了。guardmalloc有时也可以捕捉到这种错误(您可以在Xcode的运行计划中启用它)。
image lookup -va 0x1586470c4
命令,却没有任何输出,甚至没有错误信息。 - Translunar识别导致崩溃的操作。它是否在特定视图控制器的didLoad中崩溃,或在委托方法中或在特定操作中崩溃。这通常有助于找到导致错误的对象。
希望这能帮到您。
敬礼, Gison