Domanda

Sto studiando cosa sta occupando molta memoria nella mia app. Usando il comando! DumpObj, posso aggirare gli oggetti gestiti. Ma come posso fare l'equivalente per gli oggetti nativi? Ad esempio, questo oggetto .NET ha un puntatore al codice nativo. Sono bloccato qui ... come faccio a fare l'equivalente di! DumpObj da qui? Ho tutta la fonte e i simboli.

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
È stato utile?

Soluzione

Puoi scaricare l'oggetto eseguendo il comando seguente:

!object address.

Inoltre è possibile scaricare anche l'intestazione dell'oggetto. L'intestazione dell'oggetto si trova sempre a 18h byte prima dell'oggetto in memoria. Può essere scaricato con il seguente comando

!dt nt!_object_header address-18h

Per capire il tipo che potresti desiderare oltre a scaricare anche il tipo di oggetto. Ciò può essere ottenuto con il seguente comando.

!dt nt!_object_type address-of-type

L'indirizzo del tipo viene stampato come parte del dump dell'intestazione dell'oggetto. Il nome del campo corrispondente è Tipo.

Altri suggerimenti

Il comando d * dovrebbe fornire il contenuto della memoria d

modulo dt! typedef addr

ad es. dt MyModule! MyClass 0x12345678

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top