Condividi tramite


SOS.dll (estensione del debugger SOS)

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. Questo strumento richiede che il progetto disponga di debug non gestito attivato. È anche possibile utilizzare l'estensione di debug SOS con il debugger di Windows (WinDbg.exe).

Questo strumento viene installato automaticamente con Visual Studio e con Windows SDK. Per eseguire lo strumento, si consiglia di utilizzare il prompt dei comandi di Visual Studio o il prompt dei comandi di Windows SDK (shell di CMD). Queste utilità consentono di eseguire facilmente lo strumento, senza dover passare alla cartella di installazione. Per ulteriori informazioni, vedere Prompt dei comandi di Visual Studio e Windows SDK.

  • Se si dispone di Visual Studio installato sul computer: nella barra delle applicazioni, fare clic su Start, fare clic su All Programs, fare clic su Visual Studio, fare clic su Visual Studio Tools e quindi su Visual Studio Command Prompt.

    In alternativa

    Se si dispone di Windows SDK installato sul computer: nella barra delle applicazioni, fare clic su Start, fare clic su All Programs, fare clic sulla cartella di Windows SDK e quindi su Command Prompt (o CMD Shell).

  • Al prompt dei comandi digitare quanto segue:

![command] [options] 

Commands

Comando

Oggetto di descrizione

AnalyzeOOM (ao)

Visualizza le informazioni dell'ultimo OOM verificatosi in una richiesta di allocazione all'heap di Garbage Collection. (In Garbage Collection per il server, visualizza OOM, se presente, su ogni heap di Garbage Collection.)

BPMD [-nofuturemodule] [<module name> <method name>] [-md <MethodDesc>] -list -clear <pending breakpoint number> -clearall

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 (just-in-time) del modulo prima di creare un punto di interruzione.

È possibile gestire l'elenco di punti di interruzione in sospeso utilizzando le opzioni -list, -clear e -clearall:

  • L'opzione -list genera un elenco di tutti i punti di interruzione in sospeso. Se un punto di interruzione in sospeso dispone di un ID del modulo diverso da zero, quel punto di interruzione è specifico di una funzione in quel particolare modulo caricato. Se il punto di interruzione in sospeso dispone di un ID del modulo pari a zero, quel punto di interruzione si applica a moduli che non sono stati ancora caricati.

  • Utilizzare l'opzione -clear o -clearall per rimuovere interruzioni in sospeso dall'elenco.

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

Fornisce una traccia 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'opzione -n disabilita la visualizzazione dei nomi di file di origine e dei numeri di riga. Se il debugger dispone dell'opzione SYMOPT_LOAD_LINES specificata, SOS cercherà sui simboli ogni frame gestito e visualizzerà il nome del file di origine corrispondente e il numero di riga. È possibile specificare il parametro -n (Niente numeri di riga) per disabilitare questo comportamento.

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>

In alternativa

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 -details 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] [-strings] [-short] [-min <size>] [-max <size>] [-thinlock] [-startAtLowerBound] [-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 -strings limita l'output al riepilogo del valore di stringa statistico.

  • L'opzione -short limita l'output a un solo indirizzo di ogni oggetto. Consente di restituire facilmente output della pipe dal comando a un altro comando del debugger per l'automazione.

  • 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 -startAtLowerBound impone all'heap di iniziare al limite inferiore di un intervallo di indirizzi fornito. Durante la fase della pianificazione, l'heap spesso non è percorribile perché vengono spostati gli oggetti. Questa opzione impone DumpHeap per iniziare la verifica al limite inferiore specificato. È necessario fornire l'indirizzo di un oggetto valido come limite inferiore affinché questa opzione funzioni. È possibile visualizzare memoria in corrispondenza dell'indirizzo di un oggetto errato per trovare manualmente la tabella del metodo successiva. Se il processo di Garbage Collection è attualmente impegnato in una chiamata a memcopy, è possibile che si possa anche trovare l'indirizzo dell'oggetto successivo aggiungendo la dimensione all'indirizzo iniziale, fornito come parametro.

  • 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 <Managed DynamicMethod object> | <DynamicMethodDesc pointer> | <MethodDesc pointer>

Visualizza il Microsoft Intermediate Language (MSIL) associato a un metodo gestito.

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

DumpLog [-addr <addressOfStressLog>] [<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.

Il log di stress in memoria consente di diagnosticare errori di stress 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

L'opzione -addr facoltativa consente di specificare un log di stress diverso dal log predefinito.

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 il comando DumpDomain o DumpAssembly per recuperare l'indirizzo di un modulo.

DumpObj [-nofields] <object address>

In alternativa

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.

L'opzione -nofields impedisce campi dell'oggetto visualizzato, è utile per gli oggetti come Stringa.

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] [-n] [top stack [bottom stack]]

Visualizza una traccia 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.

  • L'opzione -n disabilita la visualizzazione dei nomi di file di origine e dei numeri di riga. Se il debugger dispone dell'opzione SYMOPT_LOAD_LINES specificata, SOS cercherà sui simboli ogni frame gestito e visualizzerà il nome del file di origine corrispondente e il numero di riga. È possibile specificare il parametro -n (Niente numeri di riga) per disabilitare questo comportamento.

Nelle piattaforme x86 e x64, il comando DumpStack crea una traccia dello stack dettagliata.

Nelle piattaforme basate su 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.

DumpSigElem <sigaddr> <moduleaddr>

Visualizza un singolo elemento di un oggetto di firma. Nella maggior parte dei casi, è necessario utilizzare DumpSig per analizzare oggetti della firma singoli. Tuttavia, se una firma è stata danneggiata in qualche modo, è possibile utilizzare DumpSigElem per leggerne le parti valide.

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

In alternativa

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 tracciatura 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 -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:

  • Thread che sono stati sottoposti a un blocco.

  • Thread bloccati per consentire un processo di Garbage Collection.

  • 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 (il blocco try) e il blocco del gestore (il blocco catch).

FAQ

Visualizza le domande più frequenti (FAQ).

FinalizeQueue [-detail] | [-allReady] [-short]

Visualizza tutti gli oggetti registrati per la finalizzazione.

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

  • L'opzione -allReady visualizza tutti gli oggetti pronti per la finalizzazione, indipendentemente dal fatto che siano già contrassegnati da garbage collection o se saranno contrassegnati dalla prossima operazione di garbage collection. Gli oggetti che non sono nell'elenco "pronti per finalizzazione" sono oggetti finalizzabili che non contengono più radice. Questa opzione può essere molto costosa, perché verifica se tutti gli oggetti nelle code finalizzabili contengono ancora radice.

  • L'opzione -short limita l'output a un solo indirizzo di ogni oggetto. Se utilizzato insieme a -allReady, enumera tutti gli oggetti che dispongono di un finalizzatore e che non contengono più radice. Se viene utilizzato indipendentemente, elenca tutti gli oggetti nelle code finalizzabili e "pronte per la finalizzazione".

FindAppDomain <Object address>

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

FindRoots -gen <N> | -gen any |<object address>

Fa in modo che il debugger irrompa nell'oggetto del debug sulla raccolta successiva della generazione specificata. L'effetto viene reimpostato appena si verifica l'interruzione. Per interrompere in corrispondenza dell'insieme successivo, è necessario emettere nuovamente il comando. Il form <indirizzo dell'oggetto> di questo comando viene utilizzato dopo l'interruzione causata da -gen o si è verificato -gen any. A quell'ora, l'oggetto del debug è nello stato giusto affinché FindRoots identifichi radici per gli oggetti dalle generazioni condannate correnti.

GCHandles [-perdomain]

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

L'opzione -perdomain, dispone le statistiche 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.

GCWhere <indirizzo oggetto>

Visualizza il percorso e le dimensioni dell'argomento passato nell'heap di Garbage Collection. Quando l'argomento rientra nell'heap gestito ma non è un indirizzo dell'oggetto valido, la dimensione viene visualizzata come 0 (zero).

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.

HeapStat [-inclUnrooted | -iu]

Visualizza le dimensioni della generazione per ogni heap e lo spazio disponibile totale in ogni generazione su ogni heap. Se viene specificata l'opzioneinclUnrooted, il rapporto include informazioni sugli oggetti gestiti dall'heap di Garbage Collection che non contiene più radice.

HistClear

Rilascia tutte le risorse utilizzate dalla famiglia di comandi Hist.

Generalmente, non si deve chiamare in modo esplicito HistClear, perché ogni HistInit pulisce le risorse precedenti.

HistInit

Inizializza le strutture SOS dal log di stress salvato nell'oggetto del debug.

HistObj <obj_address>

Esamina ogni registrazione della rilocazione del log di stress e visualizza la catena di rilocazioni di Garbage Collection che hanno potuto condurre all'indirizzo passato come argomento.

HisttObjFind <obj_address>

Visualizza tutte le voci del log a cui fa riferimento un oggetto in corrispondenza dell'indirizzo specificato.

HistRoot <root>

Visualizza informazioni correlate sia a promozioni sia alla rilocazione della radice specificata.

Il valore radice può essere utilizzato per localizzare il movimento di un oggetto tramite le operazioni di Garbage Collection.

IP2MD <Code address>

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

ListNearObj (lno) <obj_address>

Visualizza gli oggetti precedendo e seguendo l'indirizzo specificato. Il comando cerca l'indirizzo nell'heap di Garbage Collection che sembra un inizio valido di un oggetto gestito (basato su una tabella del metodo valida) e nell'oggetto che segue l'indirizzo dell'argomento.

MinidumpMode [0] [1]

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

Passare 0 per disabilitare 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>

In alternativa

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 Ildasm.exe (disassemblatore MSIL). È 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>] | [-aggregate] [-stat]

Visualizza la dimensione dell'oggetto specificato. Se non si specifica alcun parametro, 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.

L'opzione -aggregate può essere utilizzata insieme all'argomento -stat per ottenere una visualizzazione dettagliata dei tipi che non contengono più radice. Tramite !dumpheap -stat e !objsize -aggregate -stat, è possibile determinare quali oggetti non contengono più radice e diagnosticare i vari problemi della memoria.

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

In alternativa

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 annidati.

  • L'opzione -lines visualizza informazioni sull'origine, se disponibili.

È 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.

SOSFlush

Scarica la cache SOS interna.

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 consente di visualizzare l'ID abbreviato del debugger, l'ID del thread di Common Language Runtime e l'ID del thread del sistema operativo. Il comando Threads consente inoltre di visualizzare una colonna Domain in cui viene indicato il dominio dell'applicazione in cui è in esecuzione un thread, una colonna APT in cui viene indicata la modalità apartment COM e una colonna Exception in cui viene visualizzata 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 su server, thread di supporto del debugger, thread del finalizzatore, thread AppDomain unload e thread di timer del pool di thread.

ThreadState <Campo del valore di stato.>

Visualizza lo stato corrente del thread. Il parametro value è il valore del campo State nell'output del rapporto di Threads.

Esempio:

    0:003> !Threads
    ThreadCount:      2
    UnstartedThread:  0
    BackgroundThread: 1
    PendingThread:    0
    DeadThread:       0
    Hosted Runtime:   no
                                          PreEmptive   GC Alloc           Lock
           ID OSID ThreadOBJ    State     GC       Context       Domain   Count APT Exception
       0    1  250 0019b068      a020 Disabled 02349668:02349fe8 0015def0     0 MTA
       2    2  944 001a6020      b220 Enabled  00000000:00000000 0015def0     0 MTA (Finalizer)
    0:003> !ThreadState b220
        Legal to Join
        Background
        CLR Owns
        CoInitialized
        In Multi Threaded Apartment

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] [-n] <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.

  • L'opzione -n disabilita la visualizzazione dei nomi di file di origine e dei numeri di riga. Se il debugger dispone dell'opzione SYMOPT_LOAD_LINES specificata, SOS cerca sui simboli ogni frame gestito e, se lo trova, visualizza il nome del file di origine corrispondente e il numero di riga. È possibile specificare l'opzione -n per disabilitare questo comportamento.

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.

VerifyObj <object address>

Controlla l'oggetto passato come un argomento per segnali di danneggiamento.

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 anche nel sito Web WDK and Developer Tools, o in Visual Studio. I comandi possono essere eseguiti in WinDgb.exe o nella finestra 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 il comando seguente nello strumento:

.loadby sos clr

Per caricare l'estensione del debugger SOS in Visual Studio, eseguire il comando seguente nella finestra Controllo immediato durante il debug:

.load SOS.dll

Se il comando viene eseguito correttamente, nella finestra Controllo immediato viene visualizzato il messaggio seguente:

extension C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\sos.dll loaded

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 è disabilitato per impostazione predefinita. Alcune piattaforme non consentono di eseguire contemporaneamente il debug di codice gestito e non gestito.

NotaNota

Per visualizzare la finestra Controllo immediato in Visual Studio, scegliere Finestre dal menu Debug, quindi fare clic su Controllo immediato.È anche possibile aprire la finestra 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 (predefinito) denominato StressLog.tx 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 dell'indirizzo 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

Prompt dei comandi di Visual Studio e Windows SDK

Altre risorse

Strumenti di .NET Framework

Cronologia delle modifiche

Data

Cronologia

Motivo

Aprile 2011

Sono state aggiunte informazioni sull'utilizzo di Visual Studio e dei prompt dei comandi di Windows SDK.

Miglioramento delle informazioni.