2014-01-10 72 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被打包成自己的命令。