3

iPhone で断続的なエラー、次のようなトレースを伴うクラッシュをデバッグしようとしています。

objc_message_send
__invoking__
[NSInvocation invoke]
HandleDelegateSource
MainRunLoop
....

GDB が停止したときに、システムが呼び出されようとしているセレクターの詳細を特定できるようにしたいと考えています。[NSInvocation Invoke] の周りにブレーク ポイントを設定しましたが、そのポイントから詳細を調べる方法がわかりません。私が立ち寄った NSInvocation オブジェクトの

4

2 に答える 2

2

簡単な最終的な答え-GDBでは、呼び出されているセレクターの名前でレジスターを表示するだけです(lotharの答えのSelectorパラメーター)。これは C 文字列なので、次のコマンドのいずれかを使用して観察します (シミュレーターで実行しているか、デバイスで実行しているかによって異なります)。

Simulator: display /s $ecx
Device: display /s $r1
于 2010-03-24T16:41:41.060 に答える
1

objc_msgSendのリファレンス情報を見ると、セレクターが 2 番目の引数であることがわかります。これで、デバッガーの出力を解読しやすくなります。

objc_msgSend
単純な戻り値を持つメッセージをクラスのインスタンスに送信します。
id objc_msgSend(id theReceiver、SEL theSelector、...)

パラメータ
theReceiver
メッセージを受信するクラスのインスタンスを指すポインタ。
theSelector
メッセージを処理するメソッドのセレクター。
...
メソッドへの引数を含む可変引数リスト。

于 2009-04-10T00:38:00.430 に答える