質問

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top