2013-06-03 6 views
12

したがって、ブレークポイントでは、私はランダムなオブジェクトインスタンスを持っています。私はどのオブジェクトがこのオブジェクトへのポインタを持っているか把握したい。デバッガコンソールでこれを表示する方法はありますか?オブジェクトに保持されているすべてのオブジェクトを私に示す何か?LLDB:オブジェクトへのポインタを持つすべてのオブジェクトをメモリに表示

例:私はNSViewControllerのインスタンスを持っています。このビューコントローラのインスタンスにポインタを保持する他のすべてのオブジェクトを参照したいと思います。これは、私のインスタンスをカプセル化しているView Controller階層を見ることができるので便利です。

私はそれが本当に時々役立つだろうと思っただけです。

+1

私はそれが可能であるかどうかはわかりません。ランタイムでさえ、その種の情報を保持していません。なぜなら、それは親が親の知識を持っていることを意味するからです(それは依存ルールに違反します)。 – CodaFi

+0

あなたが正しいかもしれません。私は0x2827へのポインタを含むオブジェクトのためのダムメモリ検索の詳細を考えていた... –

+0

ダムのメモリ検索は、オブジェクトを見つけることはありません。それはデータを見つけるでしょうが、それが何を表しているのか分かりません。 – StilesCrisis

答えて

26

command script import lldb.macosx.heapでは、 。 ptr_refsコマンドは、あなたが望むことをすることができるはずです。詳細はptr_refs --helpをご利用ください。

+2

'ptr_refs'は行く方法です。 'MallocStackLogging = 1'環境変数でアプリケーションを起動すると、' ptr_refs --stack ADDRESS'を実行して、そのアドレスを含むメモリブロックだけでなく、そのオブジェクト/メモリブロックが割り当てられたり解放されたときのバックトレースを見ることができます。 'ptr_refs'は現時点ではMac OS Xのアプリケーションのみに適用されていることに注意してください.Xcode 4.6で実装されているため、iOSで動作することができません。 –

+2

Xcode 6.3デバイス(iOS 7.1.2)とシミュレータ(iOS 8.3)の両方で動作するiOSアプリケーションで 'ptr_refs'をうまく使用していたので、Mac OS Xにはそれ以上の制限はありません。 – user2067021

+0

@ user2067021そして、あなたはそれを動作させるために何をインポートしましたか? 'lldb.ios.heap'は存在しないようです –

0

効率的な解決策ではなく、すべての場合に適用できますが、探しているオブジェクトをクラスのアクセサメソッドでカプセル化し、ブレークポイントを内部に入れることができます。アクセサーメソッドの最後まで進むと、最終的にすべてのコールポイントが表示されます。

また、変数の定義を削除することもできます。コンパイラは1トンのエラーを吐き出し、それぞれがこのオブジェクトの呼び出しになります。

まだARCを使用していない場合は、ARCを使用することをおすすめします。理想的には、あなたのコードはコードを読んで参照を識別することができないくらい面倒ではないでしょう、ARCはその部門の少し助けてもらえます

関連する問題