2009-06-10 9 views

答えて

42

po 0x1081ad0

PO =印刷オブジェクト。 あなたも、あなたのプログラムをクラッシュしてしまいますので、

po 1

、それはオブジェクトのみで動作することを

po [myArray objectAtIndex:0]

ノートのように、メソッドを呼び出すことができます。

+7

"po 1"はあなたのプログラムをクラッシュさせません - gdbはそれよりスマートです。エラーメッセージが表示されます。 –

+10

また、非オブジェクトのもの(intのようなもの)を印刷するには、 'p 1'のように私たちだけp – RickDT

+1

どこに書くことができますか? – chwi

6

できることはいくつかあります。

  1. あなたはとても基本的に(ブレークポイントに移動し、新しいものを作成します)、このためのブレークポイントを作成し、あなたは例外を持つたびにトリガするブレークポイントを挿入することができます -
  2. を[NSExceptionの昇給を]また、あなたが実際にそのMEMの場所にある物体が何であるかを見ることができます:

    情報シンボル0x1081ad0または

    インフォライン* 0x1081ad0

cocoadev wiki entry for exceptionhandlingdebugging tips for objective C at cocoawithloveに詳しい情報があります。

9

スティーブンは正しいです - GDBコマンドpoは、引数として与えられたオブジェクト上(ご想像のとおり、ない-description)実際-debugDescriptionを呼び出すprint-objectためのショートカットです。多くの場合、両方のメソッドから同じ結果が表示されます。オーバーライドされない限り、一方が他方を呼び出すためです。 (関連注を参照してください:。詳細については、this Apple technoteコールアウトを自分のコードサンプルでは、​​など、po $r3はPowerPCのレジスタの内容を出力していますが、インテルのレジスタを含む任意のオブジェクトポインタ/参照を、使用することができることに注意してください)

また、print-objectは、割り当て解除されていない有効なオブジェクトに対してのみ機能することに注意してください。 borkされたポインタにメッセージを送信している場合は、まったく役に立ちません。しかし、あなたが挙げたエラーを考えれば、それは有効なオブジェクトインスタンスであるように見えますが、呼び出すメソッドを実装していないだけです。

オブジェクトが既に破棄されている可能性もあります。その場合はThis answerが役立ちます。


編集:

デバッガでオブジェクトを "調べる" ために他の方法があります。私は、Xcodeデータフォーマッタについてthis SO questionについて尋ねました。これは、カスタムクラスがデバッガの[概要]列にどのように表示されるかを判断する方法の1つです。その質問からリンクされたドキュメンテーションは、その動作方法を説明しています。私はオブジェクトの状態を見て多くを助ける要約的なアプローチを見つけました。

0

インスタンスが無効です。オブジェクトをどこか別の場所に解放しましたが、あなたのポインタをクリアしていません...ゾンビ検出を有効にしてください。

関連する問題