WinDbgでネイティブオブジェクトを歩く方法は?
質問
アプリで多くのメモリを占有しているものを調査しています。 !DumpObjコマンドを使用して、管理対象オブジェクトを回避できます。しかし、ネイティブオブジェクトに対して同等のことを行うにはどうすればよいですか?たとえば、この.NETオブジェクトにはネイティブコードへのポインターがあります。私はここで立ち往生しています...ここから!DumpObjに相当する方法はありますか?すべてのソースとシンボルがあります。
0:006> !DumpObj 0000000006222a50
Name: Beriliun.GS.Internal.Signer
MethodTable: 000007ff00658548
EEClass: 000007ff00734170
Size: 24(0x18) bytes
(d:\GS\bin\debug\LIBXT.dll)
Fields:
MT Field Offset Type VT Attr Value Name
000007fef02f8448 4000647 8 PTR 0 instance 000000002d7621e0 pSigner
0:006> !DumpObj 000000002d7621e0
<Note: this object has an invalid CLASS field>
Invalid object
解決
次のコマンドを実行して、オブジェクトをダンプできます。
!object address.
さらに、オブジェクトヘッダーもダンプできます。オブジェクトヘッダーは常に、メモリ内のオブジェクトの18hバイト前に配置されます。次のコマンドでダンプできます
!dt nt!_object_header address-18h
オブジェクトタイプもダンプするだけでなく、必要なタイプを把握するため。これは、次のコマンドで実現できます。
!dt nt!_object_type address-of-type
タイプのアドレスは、オブジェクトヘッダーのダンプの一部として出力されます。対応するフィールド名はTypeです。
他のヒント
d *コマンドは、メモリの内容を表示する必要があります d
dt module!typedef addr
e.g。、dt MyModule!MyClass 0x12345678
所属していません StackOverflow