在lldb上防止“执行被中断,原因:内部ObjC异常断点(-3)”

时间:2014-01-10 23:27:55

标签: objective-c lldb

我编写了一些代码,将类的所有ivars转储到Objective C中的字典中。这使用valueForKey:从类中获取数据。有时候,KVC会抛出一个也能正确捕获的内部异常 - 但是这会破坏lldb的功能,我得到的只是:

  

错误:执行被中断,原因:内部ObjC异常断点(-3)..   该过程已返回到表达式评估之前的状态。

没有设置断点。我甚至尝试使用-itrue -ufalse作为表达式选项,但它没有任何区别。这完全打败了我想要使用lldb的东西,它似乎是一个很小的问题。如果在调用方法时有内部的,捕获的ObjC异常,我怎么能把clang简单地忽略

我在Xcode中尝试了这一点,直接通过从终端调用clang并连接到远程调试服务器 - 没有区别。

3 个答案:

答案 0 :(得分:21)

我遇到了同样的问题。我的解决方案是在它周围包裹一个try/catch(我只使用这段代码进行调试)。请参阅:DALIntrospection.m第848行

NSDictionary *DALPropertyNamesAndValuesMemoryAddressesForObject(NSObject *instance)

或者,如果您在iOS 7上运行,私有实例方法_ivarDescription将为您打印所有ivars(类似的实例方法为_methodDescription和{{ 1}})。

答案 1 :(得分:4)

我遇到了同样的问题。

我的解决方案只是alloc init属性,然后将其分配给导致崩溃的值。

答案 2 :(得分:2)

我和我的同事今天碰到了这个,我们最终找到了使用lldb的python API的解决方法。手动方式是运行script,然后输入:

options = lldb.SBExpressionOptions()
options.SetTrapExceptions(False)
print lldb.frame.EvaluateExpression('ThisThrowsAndCatches()', options).value

可以通过command script add将其打包到自己的命令中。