Estensione del debugger SOS (SOS.dll)

Aggiornamento: novembre 2007

L'estensione del debugger SOS (SOS.dll) facilita l'esecuzione del debug di programmi gestiti nel debugger WinDbg.exe e in Visual Studio fornendo informazioni sull'ambiente Common Language Runtime (CLR) interno.

![command] [options] 

Comandi

Comando

Descrizione

BPMD [<module name> <method name>] [-md <MethodDesc>]

Crea un punto di interruzione in corrispondenza del metodo specificato nel modulo specificato.

Se il modulo e il metodo specificati non sono stati caricati, questo comando attende una notifica del caricamento e della compilazione JIT del modulo prima di creare un punto di interruzione.

CLRStack [-a] [-l] [-p]

Fornisce un'analisi dello stack solo del codice gestito.

L'opzione -p mostra gli argomenti della funzione gestita.

L'opzione -l mostra le informazioni sulle variabili locali in un frame. Poiché i nomi locali non vengono recuperati dall'estensione del debugger SOS, l'output dei nomi locali viene espresso nel formato <local address> = <value>.

L'opzione -a (tutto) è una scelta rapida per -l e -p combinati.

L'estensione del debugger SOS non consente di visualizzare frame di transizione su piattaforme basate su x64 e IA-64.

COMState

Elenca il modello di apartment COM per ogni thread e un puntatore Context, se disponibile.

DumpArray [-start <startIndex>] [-length <length>] [-details] [-nofields] <array object address>

-oppure-

DA [-start <startIndex>] [-length <length>] [-detail] [-nofields] array object address>

Esamina gli elementi di un oggetto matrice.

L'opzione -start specifica l'indice iniziale in corrispondenza del quale devono essere visualizzati gli elementi.

L'opzione -length specifica la quantità di elementi da visualizzare.

L'opzione -detail visualizza dettagli dell'elemento utilizzando i formati DumpObj e DumpVC.

L'opzione -nofields impedisce la visualizzazione delle matrici. È disponibile solo se è specificata l'opzione -detail.

DumpAssembly <Assembly address>

Visualizza informazioni su un assembly.

Il comando DumpAssembly elenca più moduli, se disponibili.

È possibile ottenere un indirizzo di assembly utilizzando il comando DumpDomain.

DumpClass <EEClass address>

Visualizza informazioni sulla struttura EEClass associata a un tipo.

Il comando DumpClass visualizza valori di campi statici e non visualizza valori di campi non statici.

Utilizzare il comando DumpMT, DumpObj, Name2EE o Token2EE per ottenere l'indirizzo di una struttura EEClass.

DumpDomain [<Domain address>]

Enumera tutti gli oggetti Assembly caricati all'interno dell'indirizzo dell'oggetto AppDomain specificato. In caso di chiamata senza parametri, il comando DumpDomain elenca tutti gli oggetti AppDomain in un processo.

DumpHeap [-stat] [-min <size>][-max <size>] [-thinlock] [-mt <MethodTable address>] [-type <partial type name>][start [end]]

Visualizza le informazioni sull'heap sottoposto a procedura di Garbage Collection e le statistiche di Garbage Collection relative agli oggetti.

Il comando DumpHeap visualizza un avviso se rileva una frammentazione eccessiva nell'heap del Garbage Collector.

L'opzione -stat limita l'output al riepilogo di tipo statistico.

L'opzione -min ignora gli oggetti minori del parametro size, specificato in byte.

L'opzione -max ignora gli oggetti maggiori del parametro size, specificato in byte.

L'opzione -thinlock riporta ThinLocks. Per ulteriori informazioni, vedere il comando SyncBlk.

L'opzione -mt elenca solo gli oggetti che corrispondono alla struttura MethodTable specificata.

L'opzione -type elenca solo gli oggetti il cui nome di tipo è una corrispondenza di sottostringa della stringa specificata.

Il parametro start inizia l'elenco a partire dall'indirizzo specificato.

Il parametro end termina l'elenco in corrispondenza dell'indirizzo specificato.

DumpIL [<DynamicMethod address>] [<DynamicMethodDesc address>] [<MethodDesc address>]

Visualizza il codice Intermediate Language (IL) associato a un metodo gestito.

Il codice IL dinamico è generato in modo diverso rispetto al codice IL caricato da un assembly. Il codice IL dinamico fa riferimento agli oggetti in una matrice di oggetti gestiti anziché ai token di metadati.

DumpLog [<Filename>]

Scrive nel file specificato il contenuto di un log di stress in memoria. Se non si specifica un nome, questo comando crea un file denominato Stresslog.txt nella directory corrente.

Common Language Runtime fornisce un log di stress in memoria che consente di diagnosticare errori di stress. Il log consente di diagnosticare gli errori senza utilizzare blocchi o I/O. Per attivare il log di stress, impostare le chiavi del Registro di sistema seguenti in HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework:

(DWORD) StressLog = 1

(DWORD) LogFacility = il 0xffffffff

(DWORD) StressLogSize = 65536

DumpMD <MethodDesc address>

Visualizza informazioni su una struttura MethodDesc in corrispondenza dell'indirizzo specificato.

È possibile utilizzare il comando IP2MD per ottenere l'indirizzo della struttura MethodDesc da una funzione gestita.

DumpMT [-MD] <MethodTable address>

Visualizza informazioni su una tabella del metodo in corrispondenza dell'indirizzo specificato. Specificando l'opzione -MD è possibile visualizzare un elenco di tutti i metodi definiti con l'oggetto.

Ogni oggetto gestito contiene un puntatore alla tabella del metodo.

DumpMethodSig <sigaddr> <moduleaddr>

Visualizza informazioni su una struttura MethodSig in corrispondenza dell'indirizzo specificato.

DumpModule [-mt] <Module address>

Visualizza informazioni su un modulo in corrispondenza dell'indirizzo specificato. L'opzione -mt visualizza i tipi definiti in un modulo e i tipi a cui fa riferimento il modulo.

È possibile utilizzare i comandi DumpDomain o DumpAssembly per recuperare l'indirizzo di un modulo.

DumpObj <object address>

-oppure-

DO <object address>

Visualizza informazioni su un oggetto in corrispondenza dell'indirizzo specificato. Il comando DumpObj visualizza i campi, le informazioni sulla struttura EEClass, la tabella del metodo e la dimensione dell'oggetto.

È possibile utilizzare il comando DumpStackObjects per recuperare l'indirizzo di un oggetto.

Il comando DumpObj può essere eseguito su campi di tipo CLASS perché sono anche oggetti.

DumpRuntimeTypes

Visualizza gli oggetti di tipo runtime nell'heap del Garbage Collector ed elenca i nomi dei tipi e le tabelle dei metodi associati.

DumpStack [-EE] [top stack [bottom stack]]

Visualizza un'analisi dello stack.

L'opzione -EE fa sì che il comando DumpStack visualizzi solo funzioni gestite. Utilizzare i parametri top e bottom per limitare gli stack frame visualizzati sulle piattaforme x86.

Nelle piattaforme x86 il comando DumpStack crea un'analisi dello stack dettagliata.

Nelle piattaforme basate su x64 e IA-64 il comando DumpStack simula il comando K del debugger. I parametri top e bottom vengono ignorati nelle piattaforme basate su x64 e IA-64.

DumpSig <sigaddr> <moduleaddr>

Visualizza informazioni su una struttura Sig in corrispondenza dell'indirizzo specificato.

DumpStackObjects [-verify] [top stack [bottom stack]]

-oppure-

DSO [-verify] [top stack [bottom stack]]

Visualizza tutti gli oggetti gestiti trovati nell'ambito dei limiti dello stack corrente.

L'opzione -verify convalida tutti i campi CLASS non statici di un campo dell'oggetto.

Utilizzare il comando DumpStackObject con i comandi di analisi dello stack, ad esempio i comandi K e CLRStack, per determinare i valori di parametri e variabili locali.

DumpVC <MethodTable address> <Address>

Visualizza informazioni sui campi di una classe di valori in corrispondenza dell'indirizzo specificato.

Il parametro MethodTable consente al comando DumpVC di interpretare correttamente i campi. Le classi di valori non hanno una tabella del metodo come primo campo.

EEHeap [-gc] [-loader]

Visualizza informazioni sulla memoria del processo utilizzata dalle strutture dati Common Language Runtime interne.

Le opzioni -gc e -loader limitano l'output di questo comando alle strutture dati del Garbage Collector o del caricatore.

Le informazioni relative al Garbage Collector elencano gli intervalli di ogni segmento nell'heap gestito. Se il puntatore è compreso nell'intervallo di segmenti specificato da EEHeap -gc, si tratta del puntatore a un oggetto.

EEStack [-short] [-EE]

Esegue il comando DumpStack su tutti i thread del processo.

L'opzione -EE viene passata direttamente al comando DumpStack. Il parametro -short limita l'output ai seguenti tipi di thread:

  1. Thread che sono stati sottoposti a un blocco.

  2. Thread bloccati per consentire un processo di Garbage Collection.

  3. Thread che sono attualmente nel codice gestito.

EEVersion

Visualizza la versione di Common Language Runtime.

EHInfo [<MethodDesc address>] [<Code address>]

Visualizza i blocchi di gestione delle eccezioni in un metodo specificato. Questo comando visualizza gli indirizzi e gli offset del codice per il blocco della clausola (blocco try) e il blocco del gestore (blocco catch).

FinalizeQueue [-detail]

Visualizza tutti gli oggetti registrati per la finalizzazione.

L'opzione -detail visualizza informazioni aggiuntive su eventuali SyncBlocks e RuntimeCallableWrappers (RCW) in attesa di pulizia. Entrambe le strutture dati sono memorizzate nella cache e vengono pulite dal thread del finalizzatore.

FindAppDomain <Object address>

Determina il dominio applicazione di un oggetto in corrispondenza dell'indirizzo specificato.

GCHandles [-perdomain]

Visualizza le statistiche relative agli handle del Garbage Collector nel processo.

Passando l'opzione -perdomain, le statistiche vengono disposte per dominio applicazione.

Utilizzare il comando GCHandles per individuare perdite di memoria causate da perdite degli handle del Garbage Collector. Una perdita di memoria si verifica ad esempio se nel codice viene mantenuta una matrice di grandi dimensioni perché un handle sicuro del Garbage Collector punta ancora a essa ed eliminando l'handle la matrice non viene liberata.

GCHandleLeaks

Ricerca nella memoria qualsiasi riferimento a handle sicuri e bloccati del Garbage Collector nel processo e visualizza i risultati. Se viene trovato un handle, il comando GCHandleLeaks visualizza l'indirizzo del riferimento. Se invece in memoria non viene trovato alcun handle, questo comando visualizza una notifica.

GCInfo <MethodDesc address><Code address>

Visualizza dati che indicano se nei registri o nelle posizioni dello stack sono contenuti oggetti gestiti. Se si verifica un'operazione di Garbage Collection, il Garbage Collector deve conoscere le posizioni dei riferimenti agli oggetti in modo da poterli aggiornare con i nuovi valori dei puntatori agli oggetti.

GCRoot [-nostacks] <Object address>

Visualizza informazioni sui riferimenti (o radici) a un oggetto in corrispondenza dell'indirizzo specificato.

Il comando GCRoot esamina l'intero heap gestito e la tabella degli handle per ricercare gli handle all'interno di altri oggetti e gli handle nello stack. In ogni stack viene eseguita quindi la ricerca dei puntatori agli oggetti. Viene eseguita la ricerca anche nella coda del finalizzatore.

Questo comando non determina se la radice di uno stack è valida o ignorata. Utilizzare i comandi CLRStack e U per disassemblare il frame a cui appartiene il valore dell'argomento o locale in modo da determinare se la radice dello stack è ancora in uso.

L'opzione -nostacks restringe l'ambito della ricerca agli handle del Garbage Collector e agli oggetti raggiungibili.

help [<command>] [<faq>]

Visualizza tutti i comandi disponibili se non è specificato alcun parametro oppure visualizza informazioni della guida dettagliate sul comando specificato.

Il parametro faq visualizza risposte alle domande frequenti.

IP2MD <Code address>

Visualizza la struttura MethodDesc in corrispondenza dell'indirizzo specificato nel codice con compilazione JIT.

MinidumpMode [0] [1]

Impedisce l'esecuzione di comandi non sicuri quando si utilizza un minidump.

Passare 0 per disattivare questa funzionalità o 1 per attivarla. Per impostazione predefinita, il valore MinidumpMode è impostato su 0.

I minidump creati con il comando .dump /m o .dump dispongono di dati specifici di CLR limitati e consentono di eseguire correttamente solo un sottoinsieme di comandi SOS. È possibile che alcuni comandi abbiano esito negativo con errori imprevisti perché aree obbligatorie di memoria non sono mappate o sono mappate solo parzialmente. Questa opzione impedisce l'esecuzione di comandi non sicuri con i minidump.

Name2EE <module name> <type or method name>

-oppure-

Name2EE <module name>!<type or method name>

Visualizza le strutture MethodTable e EEClass per il tipo o il metodo specificato nel modulo specificato.

Il modulo specificato deve essere caricato nel processo.

Per ottenere il nome del tipo corretto, sfogliare il modulo utilizzando Disassembler MSIL (Ildasm.exe). È inoltre possibile passare * come parametro del nome modulo per eseguire la ricerca in tutti i moduli gestiti caricati. Il parametro module name può anche rappresentare il nome del debugger di un modulo, ad esempio mscorlib o image00400000.

Questo comando supporta la sintassi del debugger Windows di <module>!<type>. Il tipo deve essere completo.

ObjSize [<Object address>]

Visualizza la dimensione dell'oggetto specificato. Senza parametri, il comando ObjSize visualizza la dimensione di tutti gli oggetti trovati nei thread gestiti, visualizza tutti gli handle del Garbage Collector nel processo e somma la dimensione di tutti gli oggetti a cui puntano tali handle. Il comando ObjSize include la dimensione di tutti gli oggetti figlio oltre al padre.

PrintException [-nested] [<Exception object address>]

-oppure-

PE [-nested] [<Exception object address>]

Visualizza e formatta i campi di qualsiasi oggetto derivato dalla classe Exception in corrispondenza dell'indirizzo specificato. Se non si specifica un indirizzo, il comando PrintException visualizza l'ultima eccezione generata sul thread corrente.

L'opzione -nested visualizza dettagli sugli oggetti eccezione nidificati.

È possibile utilizzare questo comando per formattare e visualizzare il campo _stackTrace, che è una matrice binaria.

ProcInfo [-env] [-time] [-mem]

Visualizza le variabili di ambiente del processo, il tempo CPU del kernel e le statistiche di utilizzo della memoria.

RCWCleanupList <RCWCleanupList address>

Visualizza in corrispondenza dell'indirizzo specificato l'elenco di Runtime Callable Wrapper in attesa di pulizia.

SaveModule <Base address> <Filename>

Scrive nel file specificato un'immagine caricata in memoria in corrispondenza dell'indirizzo specificato.

StopOnException [-derived] [-create | -create2] <Exception> <Pseudo-register number>

Fa sì che il debugger si arresti quando viene generata l'eccezione specificata e che invece l'esecuzione non venga interrotta quando vengono generate altre eccezioni.

L'opzione -derived rileva l'eccezione specificata e tutte le eccezioni che derivano da essa.

SyncBlk [-all | <syncblk number>]

Visualizza la struttura SyncBlock specificata o tutte le strutture SyncBlock. Se non si passano argomenti, il comando SyncBlk visualizza la struttura SyncBlock che corrisponde agli oggetti posseduti da un thread.

Una struttura SyncBlock è un contenitore per informazioni aggiuntive che non deve essere creato per ogni oggetto. Può contenere dati di interoperabilità COM, codici hash e informazioni di blocco per operazioni thread-safe.

ThreadPool

Visualizza informazioni sul pool di thread gestiti, tra cui il numero di richieste di lavoro nella coda, il numero di thread delle porte di completamento e il numero di timer.

Token2EE <module name> <token>

Trasforma il token di metadati specificato del modulo specificato in una struttura MethodTable o MethodDesc.

È possibile passare * come parametro del nome modulo per trovare il mapping del token in ogni modulo gestito caricato. È anche possibile passare il nome del debugger come modulo, ad esempio mscorlib o image00400000.

Threads [-live] [-special]

Visualizza tutti i thread gestiti del processo.

Il comando Threads visualizza l'ID abbreviato del debugger, l'ID del thread di Common Language Runtime e l'ID del thread del sistema operativo. Il comando Threads inoltre visualizza una colonna Domain che indica il dominio applicazione in cui viene eseguito un thread, una colonna APT che visualizza la modalità dell'apartment COM e una colonna Exception che visualizza l'ultima eccezione generata nel thread.

L'opzione -live visualizza thread associati a un thread attivo.

L'opzione -special visualizza tutti i thread speciali creati da CLR. Tra i thread speciali sono inclusi thread della Garbage Collection in condizioni di simultaneità della Garbage Collection e della Garbage Collection su server, thread di supporto del debugger, thread del finalizzatore, thread AppDomain Unload e thread di timer del pool di thread.

TraverseHeap [-xml] <filename>

Scrive informazioni dell'heap nel file specificato in un formato leggibile dal profiler CLR. L'opzione -xml fa sì che il comando TraverseHeap formatti il file come XML.

È possibile scaricare il profiler CLR dalla pagina Microsoft Download Center (informazioni in lingua inglese).

U [-gcinfo] [-ehinfo] <MethodDesc address> | <Code address>

Visualizza un disassembly annotato di un metodo gestito specificato da un puntatore alla struttura MethodDesc del metodo o da un indirizzo del codice all'interno del corpo del metodo. Il comando U visualizza l'intero metodo dall'inizio alla fine, con annotazioni che convertono i token di metadati in nomi.

L'opzione -gcinfo fa sì che il comando U visualizzi la struttura GCInfo del metodo.

L'opzione -ehinfo visualizza informazioni sulle eccezioni del metodo. È anche possibile ottenere queste informazioni con il comando EHInfo.

VerifyHeap

Ricerca nell'heap del Garbage Collector segnali di danneggiamento e visualizza gli eventuali errori trovati.

L'heap può danneggiarsi a causa di chiamate pInvoke costruite in modo non corretto.

VMMap

Attraversa lo spazio degli indirizzi virtuali e visualizza il tipo di protezione applicato a ogni regione.

VMStat

Fornisce una visualizzazione di riepilogo dello spazio degli indirizzi virtuali, ordinata in base a ogni tipo di protezione applicata alla memoria (free, reserved, committed, private, mapped, image). La colonna TOTAL visualizza il risultato della colonna AVERAGE moltiplicato per la colonna BLK COUNT.

Note

Utilizzare l'estensione del debugger SOS caricandola nel debugger WinDbg.exe, disponibile in Debugging Tools for Windows Web site (informazioni in lingua inglese) o in Visual Studio 2005 o versioni precedenti. I comandi possono essere eseguiti in WinDgb.exe o nella finestra di controllo immediato di Visual Studio.

L'estensione del debugger SOS consente di visualizzare informazioni sul codice in esecuzione in Common Language Runtime. È ad esempio possibile utilizzare l'estensione del debugger SOS per visualizzare informazioni sull'heap gestito, cercare eventuali danneggiamenti dell'heap, visualizzare i tipi di dati interni utilizzati dal runtime e visualizzare informazioni su tutto il codice gestito in esecuzione nel runtime.

Caricamento dell'estensione del debugger SOS

Per caricare l'estensione del debugger SOS nel debugger WinDbg.exe, eseguire nello strumento il comando riportato di seguito. Per caricare l'estensione del debugger SOS in Visual Studio, eseguire il comando riportato di seguito nella finestra di controllo immediato durante l'esecuzione del debug:

.loadby sos mscorwks

Per poter caricare l'estensione del debugger SOS, è necessario attivare il debug non gestito nelle impostazioni del progetto della soluzione. Per alcuni linguaggi, il debug non gestito è disattivato per impostazione predefinita.

Nota Per visualizzare la finestra di controllo immediato in Visual Studio 2005, scegliere l'opzione Controllo immediato dal menu Finestre all'interno del menu Debug. È anche possibile aprire la finestra di controllo immediato in Visual Studio premendo CTRL-ALT-I.

In WinDbg.exe e Visual Studio viene utilizzata una versione di SOS.dll che corrisponde alla versione di Mscorwks.dll attualmente in uso. Nelle versioni 1.1 e 2.0 di .NET Framework SOS.dll è installato nella stessa directory di Mscorwks.dll. Per impostazione predefinita, è necessario utilizzare la versione di SOS.dll che corrisponde alla versione corrente di Mscorwks.dll.

Per utilizzare un file dump creato in un altro computer, assicurarsi che il file Mscorwks.dll fornito con l'installazione sia contenuto nel percorso dei simboli e caricare la versione corrispondente di SOS.dll.

Per caricare una versione specifica di SOS.dll, digitare il comando seguente nel Debugger Windows:

.load <full path to sos.dll>

Esempi

Il comando riportato di seguito visualizza il contenuto di una matrice in corrispondenza dell'indirizzo 00ad28d0. La visualizzazione parte dal secondo elemento e continua per cinque elementi.

!dumparray -start 2 -length 5 -detail 00ad28d0 

Il comando riportato di seguito visualizza il contenuto di un assembly in corrispondenza dell'indirizzo 1ca248.

!dumpassembly 1ca248

Il comando riportato di seguito visualizza informazioni sull'heap del Garbage Collector.

!dumpheap

Il comando riportato di seguito scrive il contenuto del log di stress in memoria in un file denominato Stresslog.txt nella directory corrente.

!DumpLog

Il comando riportato di seguito visualizza la struttura MethodDesc in corrispondenza dell'indirizzo 902f40.

!dumpmd 902f40

Il comando riportato di seguito visualizza informazioni su un modulo in corrispondenza dell'indirizzo 1caa50.

!dumpmodule 1caa50

Il comando riportato di seguito visualizza informazioni su un oggetto in corrispondenza dell'indirizzo a79d40.

!DumpObj a79d40

Il comando riportato di seguito visualizza i campi di una classe di valori in corrispondenza dell'indirizzo 00a79d9c utilizzando la tabella del metodo in corrispondenza degli indirizzi 0090320c.

!DumpVC 0090320c 00a79d9c

Il comando riportato di seguito visualizza la memoria del processo utilizzata dal Garbage Collector.

!eeheap -gc

Il comando riportato di seguito visualizza tutti gli oggetti pianificati per la finalizzazione.

!finalizequeue

Il comando riportato di seguito determina il dominio applicazione di un oggetto in corrispondenza dell'indirizzo 00a79d98.

!findappdomain 00a79d98

Il comando riportato di seguito visualizza tutti gli handle del Garbage Collector nel processo corrente.

!gcinfo 5b68dbb8 

Il comando riportato di seguito visualizza le strutture MethodTable e EEClass per il metodo Main nella classe MainClass nel modulo unittest.exe.

!name2ee unittest.exe MainClass.Main

Il comando riportato di seguito visualizza informazioni sul token di metadati in corrispondenza dell'indirizzo 02000003 nel modulo unittest.exe.

!token2ee unittest.exe 02000003

Vedere anche

Riferimenti

Strumenti di .NET Framework

Prompt dei comandi di SDK