web-dev-qa-db-ja.com

lldbで「実行が中断された理由:内部ObjC例外ブレークポイント(-3)」を防止

クラスのすべてのivarをObjective Cのディクショナリにダンプするコードをいくつか書きました。これはvalueForKey:を使用してクラスからデータを取得します。時々、KVCは内部例外をスローしますが、これも適切にキャプチャされますが、これによりlldbの機能が中断され、取得できるのは次のとおりです。

エラー:実行が中断されました。理由:内部ObjC例外breakpoint(-3)。プロセスは式の評価前の状態に戻りました。

ブレークポイントが設定されていません。式のオプションとして-itrue -ufalseを試してみましたが、違いはありません。これはlldbを何に使用したいのかを完全に打ち負かしており、そのような小さな問題のようです。メソッドの呼び出し中にclangを単純にignoreにするにはどうすればよいですか?

Xcode内から直接、またはターミナルからclangを呼び出してリモートデバッグサーバーに接続することで、これを試しました-違いはありません。

20
steipete

同じ問題に遭遇しました。私の解決策は、try/catchをラップすることでした(このコードはデバッグにのみ使用します)。参照: DALIntrospection.m 行#848

NSDictionary *DALPropertyNamesAndValuesMemoryAddressesForObject(NSObject *instance)

または、iOS 7で実行している場合、プライベートインスタンスメソッド_ivarDescriptionはすべてのivarsを出力します(同様のインスタンスメソッドは_methodDescription_shortMethodDescriptionです)。

21
haShalosh

同じ問題に遭遇しました。

私の解決策は単にalloc initクラッシュの原因となった値に割り当てる前のプロパティ。

4
mollysmile.ye

今日、私と同僚がこれに遭遇し、最終的にlldbのpython APIを使用した回避策を見つけました。手動でscriptを実行し、次のように入力します:

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

これは、command script addを介して独自のコマンドにパッケージ化できます。

2
Dave Lee