0

使用 Xcode 4.3.2。我查看了许多不同的类似问题,包括这个

xcode-4 中的无异常调用堆栈

但无法让调试器(gdb 或 lldb)给我一个很好的堆栈跟踪,显示异常的位置并且还打印异常是什么

设置符号异常objc_exception_throw或“所有异常”异常断点,lldb 不会给我一个好的堆栈跟踪,但会显示以下内容:

  • 线程 #1: tid = 0x1c03, 0x34455238 libobjc.A.dylib objc_exception_throw, stop reason = breakpoint 1.1 frame #0: 0x34455238 libobjc.A.dylibobjc_exception_throw 帧 #1: 0x323ff788 CoreFoundation`+[NSException raise:format:arguments:] + 100

这就是整个事情,无论是bt在图形断点/调试器视图中还是完全放大。

如果此时我点击继续几次,它最终会告诉我异常/断言,例如

*** 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“_endUndoGroupRemovingIfEmpty::NSUndoManager 0x2b7610 处于无效状态,调用 endUndoGrouping 时没有匹配的开始

但我不知道它在哪里。

gdb,使用相同的断点,将停止并告诉我它在哪里,但不打印异常文本。如果我点击 continue 几次它会,但我已经失去了回溯的上下文。

我想知道如何打印异常文本,所以我知道它为什么停止,而不必做一些继续并失去我的位置。我还想让它像在 gdb 中那样在异常点停止在 lldb 中。

4

1 回答 1

1

请尝试更新到 Xcode 4.5。您会看到一个 armv7 展开器问题,其中 lldb 不知道如何完全展开您的堆栈。Objective-C 运行时有一些难以摆脱的功能(手写程序集),但我只是在带有 Xcode 4.5 的 iOS 设备上进行了快速测试,当我让 Xcode 在抛出时设置异常断点时 lldb 行为正确。

于 2012-09-29T06:12:13.053 回答