1

アプリで多くのメモリを占有しているものを調査しています。!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
4

3 に答える 3

2

d *コマンドは、メモリの内容を提供する必要があります d

于 2009-10-28T19:52:11.653 に答える
2

次のコマンドを実行して、オブジェクトをダンプできます。

!object address.

さらに、オブジェクト ヘッダーもダンプできます。オブジェクト ヘッダーは常に、メモリ内のオブジェクトの 18h バイト前に配置されます。次のコマンドでダンプできます

!dt nt!_object_header address-18h

オブジェクトタイプをダンプするだけでなく、必要なタイプを特定することもできます。これは、次のコマンドで実現できます。

!dt nt!_object_type address-of-type

タイプのアドレスは、オブジェクト ヘッダーのダンプの一部として出力されます。対応するフィールド名は Type です。

于 2009-10-28T20:44:45.577 に答える
2

dt モジュール!typedef アドレス

例: dt MyModule!MyClass 0x12345678

于 2009-10-28T20:12:03.937 に答える