2009-10-28 19 views
0

我正在调查在我的应用程序中占用大量内存的内容。使用!DumpObj命令,我可以解决托管对象。但我如何做本地对象的等价物?例如,这个.NET对象有一个指向本地代码的指针。我被困在这里...我怎么做相当于!DumpObj从这里?我有所有的来源和符号。如何在WinDbg中移动本地对象?

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 

回答

1

您可以通过转储对象运行以下命令:

!object address. 

此外,对象头也可以倾倒。对象头始终位于内存中的对象之前的18h字节处。它可以使用以下命令倾倒

!dt nt!_object_header address-18h 

要找出除了转储对象类型之外您可能想要的类型。这可以通过以下命令来实现。

!dt nt!_object_type address-of-type 

该类型的地址被打印为对象头的转储的一部分。相应的字段名称是Type。

2

的d *命令应该给你的存储器中的内容 d

2

测模块!typedef的地址

例如,DT MyModule的!MyClass的0x12345678的