Program received signal: “EXC_BAD_ACCESS”.
[Switching to process 388]
kill
error while killing target (killing anyway): warning: error on line 2179 of "/SourceCache/gdb/gdb-1472/src/gdb/macosx/macosx-nat-inferior.c" in function "macosx_kill_inferior_safe": (os/kern) failure (0x5x)
quit
The Debugger has exited with status 0.(gdb)
答案 0 :(得分:23)
收到信号: “EXC_BAD_ACCESS”。 [切换到 进程388]杀死时杀死错误 目标(无论如何都要杀):警告: 第2179行的错误 “/SourceCache/gdb/gdb-1472/src/gdb/macosx/macosx-nat-inferior.c” 在功能上 “macosx_kill_inferior_safe”:( os / kern) 失败(0x5x)退出
注意错误在哪里; gdb
已经崩溃了。这可能是由于您的应用程序崩溃,但这些特定消息对于调试真正的问题肯定没有用。
并且,更有可能的是,实际崩溃与对象的过度释放没有没有。也许是这样,但可能不是。
通常情况下,当GDB以这种方式崩溃时,这是因为你以一种方式破坏了堆或堆栈,gdb因腐败而绊倒,试图找出正在发生的事情。或者您的应用程序已进入gdb无法再与之通信的状态(在给定崩溃位置的情况下可能就是这种情况)。
在这种情况下,有些事情要尝试:
使用最新的开发工具?如果没有,请执行此操作并从干净重建您的应用程序。
可以在模拟器和设备上重现崩溃吗?如果是这样,可以在一个而不是另一个上正确调试吗?
如果您在没有调试器的情况下运行应用程序,是否可以让它崩溃,然后从设备中提取崩溃日志?
调试和非调试版本之间的行为是否发生了变化?这可能会严重影响内存损坏。
刚开始发生这件事吗?如果是这样,你最近改变了什么?
想到另一招;
MallocScribble
环境变量。这会在分配/解除分配时将值写入内存中,并且通常至少会导致内存损坏相关的崩溃程序更早崩溃或不同程度地捕获它。答案 1 :(得分:1)
EXC_BAD_ACCESS
通常意味着您正在尝试访问不再存在的内容。我们需要您的堆栈转储,可能还需要一些代码来帮助您解决问题。
答案 2 :(得分:0)
引用一位同事的话,“某处出了问题”。
这意味着您已尝试访问不再有效的指针。也许你忘记保留一个物体,或者多次释放它?