2014-01-10 69 views
14

我已经写了一些代码,将类的所有ivars转储到目标C中的字典中。这使用valueForKey:来获取数据班上。有时,KVC抛出也正确捕获内部异常 - 但这种破坏LLDB的功能和所有我得到的是:防止“执行被中断,原因:内部ObjC异常断点(-3)”lldb

error: Execution was interrupted, reason: internal ObjC exception breakpoint(-3).. The process has been returned to the state before expression evaluation.

没有设置断点。我甚至用-itrue -ufalse作为表达式选项尝试,但它没有什么区别。这完全是因为我想用lldb而失败的,而且看起来像这样一个小问题。如果在调用方法时存在内部捕获的ObjC异常,我怎样才能将铛声带到忽略

我试着从Xcode中直接调用clang并连接到远程调试服务器 - 没有区别。

回答

21

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

NSDictionary *DALPropertyNamesAndValuesMemoryAddressesForObject(NSObject *instance) 

或者,如果你在运行iOS 7,私营实例方法_ivarDescription将打印所有ivars你(类似于实例方法是_methodDescription_shortMethodDescription)。

+2

try/catch并不能解决我原来的问题 - 你只需要通过获取值来解决它,如果它是一个对象。但我会接受答案,因为这些新的iOS 7助手只是非常有用,并将解决我的问题。谢谢! – steipete

4

我遇到了同样的问题。

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

+3

考虑包括一段代码来改善你的答案。 – adamdunson

+1

尝试捕捉不是正确的解决方案,但mollysmile.ye是正确的解决方案 – SreeHarsha

2

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

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

这可以通过command script add被打包成自己的命令。