2009-10-28 4 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

2

дт модуль! ЬурейеЕ адр

например, дт MyModule! MyCLASS 0x12345678

Смежные вопросы