私はシンボルファイルにアクセスできる間に、ダンプファイルをデバッグしています。ダンプとシンボルファイルから変数名を取得する方法は?
私はwindbg
コマンドを次の結果を組み合わせた、スクリプトを使用しています。(少なくとも、それは私がそれを理解する方法
x /2 *!* // which types are present in the symbol files?
!heap -h 0 // which memory address ranges are used in the dump?
だ場合、私が間違っている私を修正することを躊躇しません。 )
this list of Windbg extensionsの下にあるheap_stat.py
と呼ばれるスクリプトの結果は、メモリアドレスのリストの後にそのタイプが続きます。メモリリークがある場合、私はそこから得られる統計を取っています。 (もちろんCStringArray
の特定の場合に)、私が使用CStringArray
オブジェクトのエントリの合計量を見て、そこかどうかを見ることができる前記メモリアドレスのWinDbgのコマンドdt CStringArray m_nSize
を使用して、この上で
、多くのエントリを持つオブジェクトはCStringArray
です。
しかし、このシステムの欠点がある:私はエントリの多くのそのようCStringArray
オブジェクトを検索すると私のアプリケーション内のすべてのCStringArray
のオブジェクトのうち、私はどちら見当がつかないので
は、私はそこにこだわっています私は対処している。
ローカル変数の名前はメモリアドレスのものですが、キャッチがあります:この情報が存在するかどうかわかりませんが、そうであればシンボルファイルで見つけることができます(明らかに)この情報を取得するためにはどのコマンドを実行する必要がありますか(<memory address>
が占有するローカル変数名をdt <flag> <memory address>
に返すフラグが見つかりませんでした)。
誰も私を助けることができますか?明確化の目的のために
が、これは私のスクリプトの結果が現在のように見える方法です:あなたが見ることができるように、私は私の変数が格納されているメモリアドレスを見ることができます
0x0065a4d0 mfc110u!CStringArray Size:[1]
0x0065a4e4 mfc110u!CStringArray Size:[0]
0x0065a4f8 mfc110u!CStringArray Size:[295926]
0x0065a520 mfc110u!CStringArray Size:[0]
、私は(種類を見ることができます)シンボルファイルから取得した、と私はdt
Windbg
コマンドから取得したエントリの量を()見ることができますが、私は次のような出力を持っているしたいと思います:
0x0065a4d0 mfc110u!CStringArray Size:[1] var1
0x0065a4e4 mfc110u!CStringArray Size:[0] var2
0x0065a4f8 mfc110u!CStringArray Size:[295926] var3
0x0065a520 mfc110u!CStringArray Size:[0] var3
か:
0x0065a4d0 mfc110u!CStringArray Size:[1] obj1.prop1
0x0065a4e4 mfc110u!CStringArray Size:[0] obj2.prop1
0x0065a4f8 mfc110u!CStringArray Size:[295926] obj1.prop2
0x0065a520 mfc110u!CStringArray Size:[0] obj1.prop2
このような出力は、ソースコード内でvar3
またはobj1.prop2
に何が起こっているかを確認する必要があることを示しています。
努力をいただきありがとうございます。私が取り組んでいる製品がリリースビルドとして提供されているように、これは私の質問には答えられないということを意味します。 – Dominique