使用Xcode 4.3.2。我看了许多不同的类似问题,包括这个问题
no-call-stack-on-exception-in-xcode-4
但无法让调试器(gdb或lldb)给我一个很好的堆栈跟踪,显示异常的位置并打印出异常的内容
在objc_exception_throw
或“All Exceptions”异常断点上设置符号异常,lldb不会给我一个好的堆栈跟踪,但会显示以下内容:
- 线程#1:tid = 0x1c03,0x34455238 libobjc.A.dylib
objc_exception_throw, stop reason = breakpoint 1.1 frame #0: 0x34455238 libobjc.A.dylib
objc_exception_throw 帧#1:0x323ff788 CoreFoundation` + [NSException raise:format:arguments:] + 100
这是整个事情,可以通过bt
或在图形断点/调试器视图中以完全放大。
如果我在此时继续点击几次,它最终会告诉我异常/断言,例如
***因未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:'_endUndoGroupRemovingIfEmpty :: NSUndoManager 0x2b7610处于无效状态,调用endUndoGrouping时没有匹配的开始
但我不知道它在哪里。
gdb,使用相同的断点,将停止并显示它所在的位置,但不会打印异常文本。如果我继续几次继续它,但我已经失去了我的背景痕迹的背景。
我想知道如何打印异常文本,所以我知道为什么它停止了,而不必继续做几个并失去我的位置。我也想让它在lldb中停留在异常点,就像在gdb中一样。
答案 0 :(得分:1)
请尝试更新到Xcode 4.5。你看到一个armv7开卷问题,其中lldb不知道如何完全展开你的堆栈。 Objective-C运行时有一些难以从(手写程序集)中解脱出来的函数,但是我只是在Xcode 4.5和lldb上使用Xcode在throw上设置异常断点时表现正常。