【问题标题】:How can I configure Xcode so GDB prints SIGABRT error information?如何配置 Xcode 以便 GDB 打印 SIGABRT 错误信息?
【发布时间】:2011-09-02 15:19:52
【问题描述】:

我已经使用 Xcode 多年了,当我的 iOS 应用程序接收到任何类型的 SIGABRT 或 EXEC_BAD_ACCESS 等时,它已经停止在 gdb 窗口中提供信息。现在,当我运行应用程序并生成任何类型的 SIGABRT 时,我得到一个:

Thread 1: Program received signal: "SIGABRT"

但是,在错误描述和堆栈跟踪通常是的调试输出窗口中,我没有得到任何输出。这使得调试变得非常困难 - 我必须设置随机断点,直到我逐步执行程序并找到导致 SIGABRT 的行并且在没有任何调试信息的情况下修复问题可能非常乏味。

当我在 gdb 窗口中输入“信息信号”时,我得到:

SIGABRT Yes Yes Yes Aborted

对于信号设置,我认为是正确的。

获取我发现的任何信息的唯一方法是使用以下命令设置断点:

(gdb) fb -[NSException raise]
(gdb) fb objc_exception_throw
(gdb) fb malloc_error_break

然后当 sigabrt 发生时我使用

(gdb) set $exception = *(id *)($ebp + 8)
(gdb) po $exception
(gdb) po [$exception name]
(gdb) po [$exception reason]

我应该提到我正在使用 Xcode 4.2 和 iOS SDK

【问题讨论】:

  • 我想指出,自从我发布这个问题以来,我已经多次升级XCode并升级了我的电脑,我不再有这个问题了

标签: ios xcode gdb signals


【解决方案1】:

尝试将这 3 个放入您的 ~/.gdbinit 文件中:

fb -[NSException raise]
fb -[NSAssertionHandler handleFailureInFunction:file:lineNumber:description:]
fb -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:]

如果有帮助,我的整个.gdbinit

#define NSZombies

fb -[NSException raise]
fb -[NSAssertionHandler handleFailureInFunction:file:lineNumber:description:]
fb -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:]

fb -[_NSZombie init]
fb -[_NSZombie retainCount]
fb -[_NSZombie retain]
fb -[_NSZombie release]
fb -[_NSZombie autorelease]
fb -[_NSZombie methodSignatureForSelector:]
fb -[_NSZombie respondsToSelector:]
fb -[_NSZombie forwardInvocation:]
fb -[_NSZombie class]
fb -[_NSZombie dealloc]

fb szone_error

set env MallocHelp=YES
set env NSDebugEnabled=YES
set env NSZombieEnabled=YES
set env NSDeallocateZombies=NO
set env MallocCheckHeapEach=100000
set env MallocCheckHeapStart=100000
set env MallocScribble=YES
set env MallocGuardEdges=YES
set env MallocCheckHeapAbort=1
set env NSAutoreleaseFreedObjectCheckEnabled=YES
set env MallocStackLoggingNoCompact=YES
set env MallocStackLogging=YES
set env CFZombie 5

tty /dev/ttys000

【讨论】:

  • 我会将此标记为答案,但自从升级后我不再有问题,所以我无法检查它抱歉。
猜你喜欢
  • 1970-01-01
  • 2013-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-22
  • 2016-12-05
  • 1970-01-01
相关资源
最近更新 更多