Xcode 4中断异常或断言具有良好的调用堆栈并打印异常

时间:2012-09-26 21:46:17

标签: ios xcode exception gdb lldb

使用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中一样。

1 个答案:

答案 0 :(得分:1)

请尝试更新到Xcode 4.5。你看到一个armv7开卷问题,其中lldb不知道如何完全展开你的堆栈。 Objective-C运行时有一些难以从(手写程序集)中解脱出来的函数,但是我只是在Xcode 4.5和lldb上使用Xcode在throw上设置异常断点时表现正常。