私はXcodeとGDBでのデバッグについて簡単な質問があります。Xcodeのデバッガでオブジェクトを見るにはどうすればいいですか?
私は頻繁にエラーに遭遇:
unrecognized selector sent to instance 0x1081ad0
GDBにプログラムロードを行いいます。 GDBからそのメモリにあるインスタンスがどのような場所にあるのか簡単に調べる方法はありますか?
私はXcodeとGDBでのデバッグについて簡単な質問があります。Xcodeのデバッガでオブジェクトを見るにはどうすればいいですか?
私は頻繁にエラーに遭遇:
unrecognized selector sent to instance 0x1081ad0
GDBにプログラムロードを行いいます。 GDBからそのメモリにあるインスタンスがどのような場所にあるのか簡単に調べる方法はありますか?
po 0x1081ad0
PO =印刷オブジェクト。 あなたも、あなたのプログラムをクラッシュしてしまいますので、
po 1
、それはオブジェクトのみで動作することを
po [myArray objectAtIndex:0]
ノートのように、メソッドを呼び出すことができます。
できることはいくつかあります。
を[NSExceptionの昇給を]また、あなたが実際にそのMEMの場所にある物体が何であるかを見ることができます:
情報シンボル0x1081ad0または
インフォライン* 0x1081ad0
cocoadev wiki entry for exceptionhandlingとdebugging tips for objective C at cocoawithloveに詳しい情報があります。
スティーブンは正しいです - GDBコマンドpo
は、引数として与えられたオブジェクト上(ご想像のとおり、ない-description
)実際-debugDescription
を呼び出すprint-object
ためのショートカットです。多くの場合、両方のメソッドから同じ結果が表示されます。オーバーライドされない限り、一方が他方を呼び出すためです。 (関連注を参照してください:。詳細については、this Apple technoteにコールアウトを自分のコードサンプルでは、など、po $r3
はPowerPCのレジスタの内容を出力していますが、インテルのレジスタを含む任意のオブジェクトポインタ/参照を、使用することができることに注意してください)
また、print-object
は、割り当て解除されていない有効なオブジェクトに対してのみ機能することに注意してください。 borkされたポインタにメッセージを送信している場合は、まったく役に立ちません。しかし、あなたが挙げたエラーを考えれば、それは有効なオブジェクトインスタンスであるように見えますが、呼び出すメソッドを実装していないだけです。
オブジェクトが既に破棄されている可能性もあります。その場合はThis answerが役立ちます。
編集:
デバッガでオブジェクトを "調べる" ために他の方法があります。私は、Xcodeデータフォーマッタについてthis SO questionについて尋ねました。これは、カスタムクラスがデバッガの[概要]列にどのように表示されるかを判断する方法の1つです。その質問からリンクされたドキュメンテーションは、その動作方法を説明しています。私はオブジェクトの状態を見て多くを助ける要約的なアプローチを見つけました。
インスタンスが無効です。オブジェクトをどこか別の場所に解放しましたが、あなたのポインタをクリアしていません...ゾンビ検出を有効にしてください。
"po 1"はあなたのプログラムをクラッシュさせません - gdbはそれよりスマートです。エラーメッセージが表示されます。 –
また、非オブジェクトのもの(intのようなもの)を印刷するには、 'p 1'のように私たちだけp – RickDT
どこに書くことができますか? – chwi