我编写了一些代码,将类的所有ivars转储到Objective C中的字典中。这使用valueForKey:
从类中获取数据。有时候,KVC会抛出一个也能正确捕获的内部异常 - 但是这会破坏lldb的功能,我得到的只是:
错误:执行被中断,原因:内部ObjC异常断点(-3).. 该过程已返回到表达式评估之前的状态。
没有设置断点。我甚至尝试使用-itrue -ufalse
作为表达式选项,但它没有任何区别。这完全打败了我想要使用lldb的东西,它似乎是一个很小的问题。如果在调用方法时有内部的,捕获的ObjC异常,我怎么能把clang简单地忽略?
我在Xcode中尝试了这一点,直接通过从终端调用clang并连接到远程调试服务器 - 没有区别。
答案 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
将其打包到自己的命令中。