Pregunta

Estoy investigando qué ocupa mucha memoria en mi aplicación. Usando el comando! DumpObj, puedo evitar los objetos administrados. Pero, ¿cómo hago el equivalente para los objetos nativos? Por ejemplo, este objeto .NET tiene un puntero al código nativo. Estoy atrapado aquí ... ¿cómo hago el equivalente de! DumpObj desde aquí? Tengo toda la fuente y los 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
¿Fue útil?

Solución

Puede volcar el objeto ejecutando el siguiente comando:

!object address.

Además, también se puede volcar el encabezado del objeto. El encabezado del objeto siempre se encuentra a 18 h bytes antes del objeto en la memoria. Se puede volcar con el siguiente comando

!dt nt!_object_header address-18h

Para averiguar el tipo que puede desear además de volcar también el tipo de objeto. Esto se puede lograr con el siguiente comando.

!dt nt!_object_type address-of-type

La dirección del tipo se imprime como parte del volcado del encabezado del objeto. El nombre del campo correspondiente es Tipo.

Otros consejos

El comando d * debería darle contenido de la memoria d

módulo dt! typedef addr

por ejemplo, dt MyModule! MyClass 0x12345678

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top