Pergunta

Estou investigando o que está ocupando muita memória no meu aplicativo. Usando o comando! Dumpobj, posso contornar os objetos gerenciados. Mas como faço o equivalente a objetos nativos? Por exemplo, este objeto .NET tem um ponteiro para o código nativo. Estou preso aqui ... como faço o equivalente a! Dumpobj daqui? Eu tenho toda a fonte e símbolos.

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
Foi útil?

Solução

Você pode despejar o objeto executando o seguinte comando:

!object address.

Além disso, o cabeçalho do objeto pode ser despejado. O cabeçalho do objeto está sempre localizado em bytes 18h antes do objeto na memória. Pode ser despejado com o seguinte comando

!dt nt!_object_header address-18h

Para descobrir o tipo que você pode querer, além de despejar o tipo de objeto. Isso pode ser alcançado com o seguinte comando.

!dt nt!_object_type address-of-type

O endereço do tipo é impresso como parte do despejo do cabeçalho do objeto. O nome do campo correspondente é tipo.

Outras dicas

O comando d* deve lhe dar conteúdo da memóriad

módulo dt! typedef addr

por exemplo, dt mymodule! myclass 0x12345678

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top