クラスのすべてのivarをObjective Cのディクショナリにダンプするコードをいくつか書きました。これはvalueForKey:
を使用してクラスからデータを取得します。時々、KVCは内部例外をスローしますが、これも適切にキャプチャされますが、これによりlldbの機能が中断され、取得できるのは次のとおりです。
エラー:実行が中断されました。理由:内部ObjC例外breakpoint(-3)。プロセスは式の評価前の状態に戻りました。
ブレークポイントが設定されていません。式のオプションとして-itrue -ufalse
を試してみましたが、違いはありません。これはlldbを何に使用したいのかを完全に打ち負かしており、そのような小さな問題のようです。メソッドの呼び出し中にclangを単純にignoreにするにはどうすればよいですか?
Xcode内から直接、またはターミナルからclangを呼び出してリモートデバッグサーバーに接続することで、これを試しました-違いはありません。
同じ問題に遭遇しました。私の解決策は、try/catch
をラップすることでした(このコードはデバッグにのみ使用します)。参照: DALIntrospection.m 行#848
NSDictionary *DALPropertyNamesAndValuesMemoryAddressesForObject(NSObject *instance)
または、iOS 7
で実行している場合、プライベートインスタンスメソッド_ivarDescription
はすべてのivars
を出力します(同様のインスタンスメソッドは_methodDescription
と_shortMethodDescription
です)。
同じ問題に遭遇しました。
私の解決策は単にalloc init
クラッシュの原因となった値に割り当てる前のプロパティ。
今日、私と同僚がこれに遭遇し、最終的にlldbのpython APIを使用した回避策を見つけました。手動でscript
を実行し、次のように入力します:
options = lldb.SBExpressionOptions()
options.SetTrapExceptions(False)
print lldb.frame.EvaluateExpression('ThisThrowsAndCatches()', options).value
これは、command script add
を介して独自のコマンドにパッケージ化できます。