Как пройти нативный объект в WinDbg? - PullRequest
0 голосов
/ 28 октября 2009

Я исследую, что занимает много памяти в моем приложении. С помощью команды! 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

Ответы [ 3 ]

2 голосов
/ 28 октября 2009

модуль dt! Typedef addr

например, dt MyModule! MyClass 0x12345678

2 голосов
/ 28 октября 2009

Команда d * должна дать вам содержимое памяти d

1 голос
/ 28 октября 2009

Вы можете сбросить объект, выполнив следующую команду:

!object address.

Кроме того, заголовок объекта может быть сброшен. Заголовок объекта всегда находится в 18-часовом байте до объекта в памяти. Может быть сброшен с помощью следующей команды

!dt nt!_object_header address-18h

Чтобы выяснить тип, который вам может понадобиться, в дополнение к типу объекта. Это может быть достигнуто с помощью следующей команды.

!dt nt!_object_type address-of-type

Адрес типа печатается как часть дампа заголовка объекта. Имя соответствующего поля - Тип.

...