Estensioni del debugger .NET
Le estensioni del debugger .NET consentono di visualizzare informazioni sul codice in esecuzione all'interno del runtime .NET, sia nei processi attivi che nei dump. Le estensioni sono preinstallate con Windbge possono essere scaricate per l'uso con LLDB. È possibile usare le estensioni del debugger .NET per:
- Raccogliere informazioni sull'heap gestito.
- Cercare i danneggiamenti dell'heap.
- Visualizzare i tipi di dati interni usati dal runtime.
- Visualizzare informazioni su tutto il codice gestito in esecuzione all'interno del runtime.
Le estensioni del debugger .NET includono comandi dello strumento dotnet-sos esistente
Sintassi
Sotto vento: ![command] [options]
In LLDB: sos [command] [options]
Molti dei comandi hanno alias o collegamenti in LLDB: clrstack [options]
Comandi
La tabella seguente dei comandi è disponibile anche in Guida o soshelp. La Guida ai singoli comandi è disponibile usando soshelp <command>
.
Comando | Descrizione |
---|---|
bpmd [-nofuturemodule] [<nome modulo><nome del metodo>] [-md<MethodDesc >] -list-clear<numero di punti di interruzione in sospeso>-clearall |
Crea un punto di interruzione nel metodo specificato nel modulo specificato. Se il modulo e il metodo specificati non sono stati caricati, questo comando attende una notifica che indica che il modulo è stato caricato e compilato JIT (Just-In-Time) prima di creare un punto di interruzione. È possibile gestire l'elenco dei punti di interruzione in sospeso usando le opzioni L'opzione Usare l'opzione -clear o -clearall per rimuovere i punti di interruzione in sospeso dall'elenco. |
CLRStack [-a] [-l] [-p] [-n] [-f] [-r] [-all] | Fornisce un'analisi dello stack solo del codice gestito. L'opzione -p mostra gli argomenti per la funzione gestita. L'opzione -l mostra informazioni sulle variabili locali in un frame. Le estensioni del debugger .NET non possono recuperare i nomi locali, pertanto l'output per i nomi locali è nel formato <indirizzo locale>=<valore>. L'opzione -a è un collegamento 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 ha l'opzione SYMOPT_LOAD_LINES specificata, SOS cerca i simboli per ogni fotogramma gestito e, in caso di esito positivo, visualizza il nome del file di origine e il numero di riga corrispondenti. Il parametro -n (nessun numero di riga) può essere specificato per disabilitare questo comportamento. L'opzione -f (modalità completa) visualizza i fotogrammi nativi che li mescolano con i fotogrammi gestiti e il nome dell'assembly e l'offset della funzione per i fotogrammi gestiti. Questa opzione non visualizza fotogrammi nativi se usati con dotnet-dump .L'opzione -r esegue il dump dei registri per ogni stack frame. L'opzione -all esegue il dump degli stack di tutti i thread gestiti. |
COMState | Elenca il modello apartment COM per ogni thread e un puntatore Context , se disponibile. Questo comando è supportato solo in Windows. |
DumpArray [-start<startIndex>] [-length<length>] [-details] [-nofields] <indirizzo dell'oggetto matrice> -o- DA [-start<startIndex>] [-length<length>] [-details] [-nofields] array object address> |
Esamina gli elementi di un oggetto matrice. L'opzione -start specifica l'indice iniziale in corrispondenza del quale visualizzare gli elementi. L'opzione L'opzione L'opzione -nofields impedisce la visualizzazione delle matrici. Questa opzione è disponibile solo quando viene specificata l'opzione |
DumpAsync (dumpasync) [-mt<MethodTable address>] [-type<nome di tipo parziale>] [-waiting] [-roots] | DumpAsync attraversa l'heap sottoposto a Garbage Collection e cerca gli oggetti che rappresentano le macchine async state create quando lo stato di un metodo asincrono viene trasferito all'heap. Questo comando riconosce le macchine a stati asincrone definite come async void , async Task , async Task<T> , async ValueTask e async ValueTask<T> .L'output include un blocco di dettagli per ogni oggetto macchina a stati asincrona trovato. Questi dettagli includono: - Riga per il tipo dell'oggetto macchina async, inclusi l'indirizzo MethodTable, l'indirizzo dell'oggetto, le dimensioni e il nome del tipo. - Riga per il nome del tipo di macchina a stati come contenuto nell'oggetto . - Elenco di ogni campo nella macchina a stati. - Riga per una continuazione da questo oggetto macchina a stati, se è stata registrata una o più righe. - Radici GC individuate per questo oggetto macchina async a stati. Supportato per le applicazioni AOT native. |
Visualizza informazioni su un assembly. Il comando DumpAssembly È possibile ottenere un indirizzo di assembly usando il comando |
|
DumpClass<indirizzo EEClass> | Visualizza informazioni sulla struttura EEClass associata a un tipo.Il comando DumpClass visualizza i valori dei campi statici, ma non visualizza valori di campo non statici. Usare DumpMT, DumpObj, Name2EEo token2EE per ottenere un indirizzo della struttura di EEClass . |
DumpDomain [ indirizzo di dominio<>] | Enumera ogni oggetto Assembly caricato all'interno dell'indirizzo dell'oggetto AppDomain specificato. Quando viene chiamato senza parametri, il comando DumpDomain elenca tutti gli oggetti AppDomain in un processo. Poiché .NET (Core) ha solo un AppDomain, DumpDomain restituisce un solo oggetto. |
DumpHeap [-stat] [-strings] [-short] [-min<size>] [-max<size>] [-thinlock] [-startAtLowerBound] [-mt<MethodTable address>] [-type<partial type name>] [start [end]] | Visualizza informazioni sull'heap di Garbage Collection e sulle statistiche di raccolta sugli oggetti. Il comando DumpHeap L'opzione L'opzione L'opzione -short limita l'output solo all'indirizzo di ogni oggetto. Questo comando consente di inviare facilmente tramite pipe l'output dal comando a un altro comando del debugger per l'automazione. L'opzione -min ignora gli oggetti minori del parametro size , specificati in byte.L'opzione -max ignora gli oggetti di dimensioni maggiori del parametro size , specificato in byte.L'opzione -thinlock segnala ThinLocks. Per altre informazioni, vedere il comando L'opzione -startAtLowerBound forza l'heap a partire dal limite inferiore di un intervallo di indirizzi fornito. Durante la fase di pianificazione, l'heap spesso non è camminabile perché gli oggetti vengono spostati. Questa opzione forza DumpHeap iniziare la procedura al limite inferiore specificato. È necessario specificare l'indirizzo di un oggetto valido come limite inferiore per il funzionamento di questa opzione. È possibile visualizzare la memoria all'indirizzo di un oggetto non valido per trovare manualmente la tabella dei metodi successiva. Se l'operazione di Garbage Collection è attualmente in una chiamata a memcopy , è anche possibile trovare l'indirizzo dell'oggetto successivo aggiungendo le dimensioni all'indirizzo iniziale, fornito come parametro.L'opzione -mt elenca solo gli oggetti che corrispondono alla struttura di 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 dall'indirizzo specificato.Il parametro end interrompe l'elenco all'indirizzo specificato.Supportato per le applicazioni AOT native. |
Visualizza il linguaggio intermedio comune (CIL) associato a un metodo gestito. CIL dinamico viene generato in modo diverso rispetto a CIL caricato da un assembly. CIL dinamico fa riferimento agli oggetti in una matrice di oggetti gestiti anziché ai token di metadati. |
|
DumpLock [--allthreads] [--waits] | Visualizza informazioni sugli oggetti System.Threading.Lock, ad esempio quelli mantenuti dai thread (impostazione predefinita) o quelli in attesa dai thread. |
DumpLog [-addr<addressOfStressLog>] [<Filename>] | Scrive il contenuto di un log di stress in memoria nel file specificato. 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 gli errori di stress senza usare blocchi o I/O. Per abilitare il log di stress, impostare le chiavi del Registro di sistema seguenti in HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework: (DWORD) StressLog = 1 (DWORD) LogFacility = 0xffffffff (DWORD) StressLogSize = 65536 L'opzione facoltativa -addr consente di specificare un log di stress diverso dal log predefinito.Supportato per le applicazioni AOT native. |
Visualizza informazioni su una struttura MethodDesc in corrispondenza dell'indirizzo specificato.È possibile usare il comando ip2MD |
|
DumpMT [-MD] <AddressTable> | Visualizza informazioni su una tabella dei metodi in corrispondenza dell'indirizzo specificato. Se si specifica l'opzione -MD, viene visualizzato un elenco di tutti i metodi definiti con l'oggetto . Ogni oggetto gestito contiene un puntatore alla tabella del metodo. |
DumpModule [-mt] <Indirizzo modulo> | 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 usare il comando dumpdomain |
DumpObj [-nofields] indirizzo dell'oggetto <> -o- < indirizzo dell'oggetto DO> |
Visualizza informazioni su un oggetto in corrispondenza dell'indirizzo specificato. Il comando DumpObj visualizza i campi, le informazioni sulla struttura EEClass , la tabella dei metodi e le dimensioni dell'oggetto.È possibile usare il comando DumpStackObjects È possibile eseguire il comando DumpObj sui campi di tipo CLASS perché sono anche oggetti .L'opzione nofields |
DumpRuntimeTypes | Visualizza gli oggetti tipo di runtime nell'heap di Garbage Collector ed elenca i nomi dei tipi associati e le tabelle dei metodi. |
DumpStack [-EE] [-n] [top stack [bottom stack]] |
Visualizza un'analisi dello stack. L'opzione top e bottom per limitare i frame dello stack visualizzati nelle piattaforme x86.L'opzione -n disabilita la visualizzazione dei nomi di file di origine e dei numeri di riga. Se il debugger ha l'opzione SYMOPT_LOAD_LINES specificata, SOS cercherà i simboli per ogni frame gestito e, se ha esito positivo, visualizza il nome del file di origine e il numero di riga corrispondenti. Il parametro -n (nessun numero di riga) può essere specificato per disabilitare questo comportamento. |
DumpSig<sigaddr><moduleaddr> | Visualizza informazioni su una struttura Sig in corrispondenza dell'indirizzo specificato. |
DumpSigElem<sigaddr><moduleaddr> | Visualizza un singolo elemento di un oggetto firma. Nella maggior parte dei casi, è consigliabile usare dumpSig per esaminare i singoli oggetti firma. Tuttavia, se una firma è stata danneggiata in qualche modo, è possibile usare DumpSigElem per leggerne le parti valide. |
-o- DSO [-verify] [ top stack [bottom stack]] |
Visualizza tutti gli oggetti gestiti trovati all'interno dei limiti dello stack corrente. L'opzione -verify convalida ogni campo CLASS non statico di un campo oggetto.Usare il comando |
Visualizza informazioni sui campi di una classe valore in corrispondenza dell'indirizzo specificato. Il parametro MethodTable |
|
EEHeap [-gc] [-loader] | Visualizza informazioni sulla memoria del processo utilizzata dalle strutture dei dati di runtime interne. Le opzioni -gc e -loader limitano l'output di questo comando alle strutture di 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 rientra in un intervallo di segmenti specificato da -gc, il puntatore è un puntatore a oggetti. |
EEStack [-short] [-EE] | Esegue il comando dumpstack L'opzione Thread che hanno preso un blocco. Thread bloccati per consentire un'operazione di Garbage Collection. Thread attualmente presenti nel codice gestito. |
EHInfo [<AddressDesc 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 di clausole (blocco try ) e il blocco del gestore (blocco catch ). |
domande frequenti | Visualizza le domande frequenti. Non supportato in dotnet-dump . |
FinalizeQueue [-detail] | [-allReady] [-short] | Visualizza tutti gli oggetti registrati per la finalizzazione. L'opzione L'opzione -allReady visualizza tutti gli oggetti pronti per la finalizzazione, indipendentemente dal fatto che siano già contrassegnati dall'operazione di Garbage Collection come tale o saranno contrassegnati dalla successiva Garbage Collection. Gli oggetti presenti nell'elenco "ready for finalization" sono oggetti finalizzabili che non sono più rooted. Questa opzione può essere costosa, perché verifica se tutti gli oggetti nelle code finalizzabili sono ancora rooted.L'opzione -short limita l'output all'indirizzo di ogni oggetto. Se viene usato in con -allReady, enumera tutti gli oggetti con un finalizzatore che non sono più rooted. Se viene usato in modo indipendente, elenca tutti gli oggetti nelle code finalizzabili e "pronte per la finalizzazione". |
FindAppDomain<Address> | Determina il dominio applicazione di un oggetto in corrispondenza dell'indirizzo specificato. |
Determina l'interruzione del debugger nell'oggetto di debug nella raccolta successiva della generazione specificata. L'effetto viene reimpostato non appena si verifica l'interruzione. Per interrompere la raccolta successiva, è necessario eseguire nuovamente il comando. L'indirizzo dell'oggetto |
|
GCHandles [-perdomain] | Visualizza le statistiche sugli handle di Garbage Collector nel processo. L'opzione -perdomain dispone le statistiche in base al dominio applicazione. Usare il comando GCHandles Supportato solo in Windows. |
GCHandleLeaks |
Cerca nella memoria eventuali riferimenti a handle di Garbage Collector sicuri e aggiunti nel processo e visualizza i risultati. Se viene trovato un handle, il comando |
GCInfo<MethodDesc address><Code address> | Visualizza i dati che indicano quando i registri o le posizioni dello stack contengono oggetti gestiti. Se si verifica un'operazione di Garbage Collection, l'agente di raccolta deve conoscere i percorsi dei riferimenti agli oggetti in modo che possa aggiornarli con nuovi valori del puntatore a oggetti. |
GCRoot [-nostacks] [-all] <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 handle per gli handle all'interno di altri oggetti e handle nello stack. Ogni stack viene quindi cercato i puntatori agli oggetti e viene eseguita anche la ricerca nella coda del finalizzatore. Questo comando non determina se una radice dello stack è valida o viene rimossa. Usare i comandi clrstack e U per disassemblare il frame a cui appartiene il valore locale o dell'argomento per determinare se la radice dello stack è ancora in uso. L'opzione -nostacks L'opzione -all forza la visualizzazione di tutte le radici anziché solo le radici univoche. |
Visualizza la posizione e le dimensioni nell'heap di Garbage Collection dell'argomento passato. Quando l'argomento si trova nell'heap gestito ma non è un indirizzo di oggetto valido, la dimensione viene visualizzata come 0 (zero). | |
guida (soshelp) [<comando>] [faq ] |
Visualizza tutti i comandi disponibili quando non viene specificato alcun parametro o visualizza informazioni dettagliate sulla Guida sul comando specificato. Il parametro faq visualizza le risposte alle domande frequenti. |
HeapStat [-inclUnrooted | -iu] | Visualizza le dimensioni della generazione per ogni heap e lo spazio disponibile totale in ogni generazione in ogni heap. Se viene specificata l'opzione - inclusa, il report include informazioni sugli oggetti gestiti dall'heap di Garbage Collection che non è più rooted. Supportato solo in Windows. |
HistClear | Rilascia tutte le risorse usate dalla famiglia di comandi Hist .In genere, non è necessario chiamare in modo esplicito HistClear , perché ogni HistInit pulisce le risorse precedenti. |
HistInit | Inizializza le strutture SOS dal log di stress salvato nel debug. |
<obj_address> HistObj | Esamina tutti i record di rilocazione dei log di stress e visualizza la catena di rilocazione di Garbage Collection che potrebbero aver portato all'indirizzo passato come argomento. |
HistObjFind<obj_address> | Visualizza tutte le voci di log che fanno riferimento a un oggetto in corrispondenza dell'indirizzo specificato. |
Visualizza informazioni relative sia alle promozioni che alle rilocazione della radice specificata. Il valore radice può essere usato per tenere traccia dello spostamento di un oggetto tramite garbage collection. |
|
IP2MD (ip2md) <Indirizzo di codice> | Visualizza la struttura MethodDesc in corrispondenza dell'indirizzo specificato nel codice compilato da JIT. |
ListNearObj (lno) <obj_address> | Visualizza gli oggetti precedenti e dopo l'indirizzo specificato. Il comando cerca l'indirizzo nell'heap di Garbage Collection simile a un inizio valido di un oggetto gestito (in base a una tabella di metodi valida) e all'oggetto che segue l'indirizzo dell'argomento. Supportato solo in Windows. |
MinidumpMode [0] [1] | Impedisce l'esecuzione di comandi non sicuri quando si usa un minidump. Passare 0 per disabilitare questa funzionalità o 1 per abilitare questa funzionalità. Per impostazione predefinita, il valore MinidumpMode è impostato su 0. I minidump creati con il comando .dump /m o comando .dump hanno dati clr specifici di CLR limitati e consentono di eseguire correttamente solo un subset di comandi SOS. Alcuni comandi potrebbero non riuscire con errori imprevisti perché le aree di memoria richieste non vengono mappate o sono mappate solo parzialmente. Questa opzione consente di proteggere l'esecuzione di comandi non sicuri da minidump. Supportato solo con Windbg. |
Name2EE (name2ee) <nome del modulo><tipo o nome del metodo> -o- Name2EE<nome del modulo>!<tipo o nome del metodo> |
Visualizza la struttura MethodTable e la struttura 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, esplorare il modulo usando il Ildasm.exe (Disassembler IL). È anche possibile passare * come parametro del nome del modulo per cercare tutti i moduli gestiti caricati. Il nome del modulo parametro può essere anche il nome del debugger per un modulo, ad esempio mscorlib o image00400000 .Questo comando supporta la sintassi del debugger Windows di < module >! <type >. Il tipo deve essere completo. |
ObjSize [ indirizzo dell'oggetto<>] | [-aggregate] [-stat] | Visualizza le dimensioni dell'oggetto specificato. Se non si specifica alcun parametro, il comando ObjSize visualizza le dimensioni di tutti gli oggetti trovati nei thread gestiti, visualizza tutti gli handle di Garbage Collector nel processo e totalizza le dimensioni di tutti gli oggetti a cui punta tali handle. Il comando ObjSize include le dimensioni di tutti gli oggetti figlio oltre al padre. L'opzione -aggregate Supportato solo in Windows. |
PrintException [-nested] [-lines] [<Address dell'oggetto Exception>] -o- PE [-nested] [<address 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 nel thread corrente. L'opzione L'opzione È possibile usare questo comando per formattare e visualizzare il campo _stackTrace , ovvero una matrice binaria. |
ProcInfo [-env] [-time] [-mem] | Visualizza le variabili di ambiente per il processo, il tempo cpu del kernel e le statistiche di utilizzo della memoria. Supportato solo con Windbg. |
Visualizza l'elenco dei wrapper chiamabili in fase di esecuzione nell'indirizzo specificato in attesa della pulizia. Supportato solo con Windbg. | |
SaveModule<Indirizzo di base><nome file> | Scrive un'immagine, che viene caricata in memoria in corrispondenza dell'indirizzo specificato, nel file specificato. Supportato solo con Windbg. |
SetHostRuntime [<runtime-directory>] | Questo comando imposta il percorso del runtime .NET da usare per ospitare il codice gestito eseguito come parte di SOS nel debugger (LLDB). Il runtime deve avere almeno la versione 2.1.0 o successiva. Se sono presenti spazi nella directory, deve essere racchiuso tra virgolette singole ('). In genere, SOS tenta di trovare un runtime .NET installato per eseguire automaticamente il codice gestito, ma questo comando è disponibile in caso di errore. L'impostazione predefinita consiste nell'usare lo stesso runtime (libcoreclr) di cui viene eseguito il debug. Usare questo comando se il runtime predefinito sottoposto a debug non funziona abbastanza per eseguire il codice SOS o se la versione è minore di 2.1.0. Se viene visualizzato il messaggio di errore seguente quando si esegue un comando SOS, usare questo comando per impostare il percorso su runtime .NET 2.1.0 o versione successiva. (lldb) clrstack Error: Fail to initialize CoreCLR 80004005 ClrStack failed (lldb) sethostruntime /usr/share/dotnet/shared/Microsoft.NETCore.App/2.1.6 È possibile usare "dotnet --info" in una shell dei comandi per trovare il percorso di un runtime .NET installato. |
SetSymbolServer [-ms] [-disable] [-log] [-loadymbols] [-cache<cache-path>] [-directory<search-directory>] [-sympath<windows-symbol-path>] [<symbol-server-URL>] | Abilita il supporto per il download del server dei simboli. L'opzione -ms consente il download dal server dei simboli Microsoft pubblico. L'opzione -disable attiva il supporto per il download dei simboli. L'opzione -cache<> cache-path specifica una directory della cache dei simboli. Il valore predefinito è $HOME/.dotnet/symbolcache, se non specificato. L'opzione L'opzione L'opzione L'opzione -loadsymbols tenta di scaricare i simboli .NET nativi per il runtime. Supportato in lldb e dotnet-dump. |
SOSFlush | Scarica una cache SOS interna. |
SOSStatus [-reset] | Visualizza lo stato SOS interno o reimposta lo stato interno memorizzato nella cache. |
StopOnException [-derived] [-create | -create2] <Exception><pseudo-register number> | Determina l'arresto del debugger quando viene generata l'eccezione specificata, ma di continuare l'esecuzione quando vengono generate altre eccezioni. L'opzione derivata intercetta l'eccezione specificata e ogni eccezione derivata dall'eccezione specificata. Supportato solo con Windbg. |
SyncBlk [-all | <numero syncblk>] | Visualizza la struttura SyncBlock specificata o tutte le strutture SyncBlock . Se non si passano argomenti, il comando SyncBlk visualizza la struttura SyncBlock corrispondente agli oggetti di proprietà di un thread.Una struttura SyncBlock è un contenitore per informazioni aggiuntive che non devono essere create 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, incluso il numero di richieste di lavoro nella coda, il numero di thread di porta di completamento e il numero di timer. |
thread (clrthreads) [-live] [-special] | Visualizza tutti i thread gestiti nel processo. Il comando thread visualizza l'ID abbreviato del debugger, l'ID del thread CLR e l'ID del thread del sistema operativo. Inoltre, il comando thread L'opzione L'opzione -special visualizza tutti i thread speciali creati da CLR. I thread speciali includono thread di Garbage Collection (in garbage collection simultanei e server), thread helper del debugger, thread finalizzatori, AppDomain scaricare thread e thread timer del pool di thread. Supportato per le applicazioni AOT native. |
campo Valore stato <ThreadState> | Visualizza lo stato del thread. Il parametro |
Token2EEE<nome del modulo><token> | Trasforma il token di metadati specificato nel modulo specificato in una struttura MethodTable o MethodDesc .È possibile passare * per il parametro del nome del modulo per trovare il mapping di tale token in ogni modulo gestito caricato. È anche possibile passare il nome del debugger per un modulo, ad esempio mscorlib o image00400000 . |
U [-gcinfo] [-ehinfo] [-n] <Address> | <indirizzo di codice> | Visualizza un disassembly annotato di un metodo gestito specificato da un puntatore di struttura MethodDesc per il metodo o da un indirizzo di codice all'interno del corpo del metodo. Il comando U L'opzione L'opzione -ehinfo visualizza informazioni sulle eccezioni per il metodo . È anche possibile ottenere queste informazioni con il comando L'opzione -n disabilita la visualizzazione dei nomi di file di origine e dei numeri di riga. Se il debugger ha l'opzione SYMOPT_LOAD_LINES specificata, SOS cerca i simboli per ogni fotogramma gestito e, se ha esito positivo, visualizza il nome del file di origine e il numero di riga corrispondenti. È possibile specificare l'opzione -n per disabilitare questo comportamento. |
VerifyHeap | Controlla l'heap di Garbage Collector per verificare la presenza di segni di danneggiamento e visualizza eventuali errori rilevati. I danneggiamenti dell'heap possono essere causati da chiamate platform invoke costruite in modo non corretto. Supportato per le applicazioni AOT native. |
VerifyObj<> | Controlla l'oggetto passato come argomento per i segni di danneggiamento. Supportato solo in Windows. |
VMMap | Attraversa lo spazio indirizzi virtuale e visualizza il tipo di protezione applicato a ogni area. Supportato solo con Windbg. |
VMStat | Fornisce una visualizzazione riepilogativa dello spazio degli indirizzi virtuali, ordinato in base a ogni tipo di protezione applicato alla memoria (gratuito, riservato, commit, privato, mappato, immagine). Nella colonna TOTAL viene visualizzato il risultato della colonna AVERAGE moltiplicata per la colonna BLK COUNT. Supportato solo con Windbg. |
Windows Debugger
È anche possibile usare le estensioni del debugger .NET caricandola nel debugger debugger WinDbg/dbg ed eseguendo i comandi all'interno del debugger Windows. I comandi possono essere usati su processi o dump in tempo reale.
Windbg deve caricare automaticamente l'estensione ogni volta che il processo sottoposto a debug contiene il runtime .NET (coreclr.dll o libcoreclr.so).
LLDB Debugger
Per istruzioni sulla configurazione delle estensioni del debugger .NET per LLDB, vedere dotnet-debugger-extensions. I comandi possono essere usati su processi o dump in tempo reale.
Per impostazione predefinita, è possibile raggiungere tutti i comandi immettendo: sos [command_name]
. Tuttavia, i comandi comuni sono stati aliasati in modo che non sia necessario il prefisso sos
:
Comando | Funzione |
---|---|
analyzeoom |
Visualizza le informazioni dell'ultimo OOM che si è verificato in una richiesta di allocazione all'heap GC. |
bpmd |
Crea un punto di interruzione nel metodo gestito specificato nel modulo specificato. |
clrmodules |
Elenca i moduli gestiti nel processo. |
clrstack |
Fornisce un'analisi dello stack solo del codice gestito. |
clrthreads |
Elenca i thread gestiti in esecuzione. |
clru |
Visualizza un disassembly con annotazioni di un metodo gestito. |
dbgout |
Abilita/disabilita (-off ) la registrazione SOS interna. |
dso |
Visualizza tutti gli oggetti gestiti trovati all'interno dei limiti dello stack corrente. |
dumpalc |
Visualizza i dettagli relativi a un assemblyLoadContext raccoglibile in cui viene caricato l'oggetto specificato. |
dumparray |
Visualizza i dettagli relativi a una matrice gestita. |
dumpasync |
Visualizza informazioni sulle macchine async state machine nell'heap di Garbage Collection. |
dumpassembly |
Visualizza i dettagli relativi a un assembly. |
dumpclass |
Visualizza informazioni sulla struttura EEClass in corrispondenza dell'indirizzo specificato. |
dumpconcurrentdictionary |
Visualizza il contenuto del dizionario simultaneo. |
dumpconcurrentqueue |
Visualizza il contenuto della coda simultaneo. |
dumpdelegate |
Visualizza informazioni su un delegato. |
dumpdomain |
Visualizza informazioni su tutti gli assembly all'interno di tutti gli AppDomain o su quello specificato. |
dumpgcdata |
Visualizza informazioni sui dati GC. |
dumpgen |
Visualizza il contenuto dell'heap per la generazione specificata. |
dumpheap |
Visualizza informazioni sull'heap di Garbage Collection e sulle statistiche di raccolta sugli oggetti. |
dumpil |
Visualizza il linguaggio intermedio comune (CIL) associato a un metodo gestito. |
dumplock |
Visualizza informazioni sugli oggetti System.Threading.Lock, ad esempio quelli mantenuti dai thread (impostazione predefinita) o quelli in attesa dai thread. Questo comando è disponibile solo nelle estensioni del debugger .NET . |
dumplog |
Scrive il contenuto di un log di stress in memoria nel file specificato. |
dumpmd |
Visualizza informazioni sulla struttura MethodDesc in corrispondenza dell'indirizzo specificato. |
dumpmodule |
Visualizza informazioni sul modulo in corrispondenza dell'indirizzo specificato. |
dumpmt |
Visualizza informazioni sulla tabella del metodo in corrispondenza dell'indirizzo specificato. |
dumpobj |
Visualizza informazioni sull'oggetto in corrispondenza dell'indirizzo specificato. |
dumpruntimetypes |
Trova tutti gli oggetti System.RuntimeType nell'heap GC e stampa anche il nome del tipo e MethodTable a cui fanno riferimento. |
dumpsig |
Esegue il dump della firma di un metodo o di un campo specificato da <sigaddr> <moduleaddr> . |
dumpsigelem |
Esegue il dump di un singolo elemento di un oggetto firma. |
dumpstack |
Visualizza un'analisi dello stack nativa e gestita. |
dumpstackobjects |
Visualizza tutti gli oggetti gestiti trovati all'interno dei limiti dello stack corrente. |
dumpvc |
Visualizza informazioni sui campi di una classe valore. |
eeheap |
Visualizza informazioni sulla memoria del processo utilizzata dalle strutture dei dati di runtime interne. |
eestack |
Esegue dumpstack su tutti i thread del processo. |
eeversion |
Visualizza informazioni sulle versioni di runtime e SOS. |
ehinfo |
Visualizza i blocchi di gestione delle eccezioni in un metodo JIT-ed. |
finalizequeue |
Visualizza tutti gli oggetti registrati per la finalizzazione. |
findappdomain |
Tenta di risolvere l'AppDomain di un oggetto GC. |
findroots |
Trova e visualizza le radici degli oggetti nelle raccolte GC. |
gchandles |
Visualizza le statistiche sugli handle di Garbage Collector nel processo. |
gcheapstat |
Visualizza le statistiche relative al Garbage Collector. |
gcinfo |
Visualizza la codifica GC JIT per un metodo. |
gcroot |
Visualizza informazioni sui riferimenti (o radici) all'oggetto in corrispondenza dell'indirizzo specificato. |
gcwhere |
Visualizza la posizione nell'heap GC dell'indirizzo specificato. |
histclear |
Rilascia tutte le risorse usate dalla famiglia di comandi Hist. |
histinit |
Inizializza le strutture SOS dal log di stress salvato nel debug. |
histobj |
Esamina tutti i record di rilocazione dei log di stress e visualizza la catena di rilocazione di Garbage Collection che potrebbero aver portato all'indirizzo passato come argomento. |
histobjfind |
Visualizza tutte le voci di log che fanno riferimento all'oggetto in corrispondenza dell'indirizzo specificato. |
histroot |
Visualizza informazioni relative sia alle promozioni che alle rilocazione della radice specificata. |
histstats |
Visualizza le statistiche del log di stress. |
ip2md |
Visualizza la struttura MethodDesc in corrispondenza dell'indirizzo specificato nel codice compilato da JIT. |
listnearobj |
Visualizza l'oggetto precedente e ha esito positivo sull'indirizzo specificato. |
loadsymbols |
Carica i simboli del modulo nativo .NET. |
logging |
Abilita/disabilita la registrazione SOS interna. |
name2ee |
Visualizza le strutture MethodTable e EEClass per il tipo o il metodo specificato nel modulo specificato. |
objsize |
Visualizza le dimensioni dell'oggetto specificato. |
parallelstacks |
Visualizza lo stack di thread uniti in modo analogo al pannello "Stack paralleli" di Visual Studio. |
pathto |
Visualizza il percorso GC da <root> a <target> . |
pe |
Visualizza e formatta i campi di qualsiasi oggetto derivato dalla classe Exception in corrispondenza dell'indirizzo specificato. |
printexception |
Visualizza e formatta i campi di qualsiasi oggetto derivato dalla classe Exception in corrispondenza dell'indirizzo specificato. |
runtimes |
Elenca i runtime nella destinazione o modifica il runtime predefinito. |
stoponcatch |
Il processo di destinazione interromperà la successiva individuazione di un'eccezione gestita durante l'esecuzione. |
setclrpath |
Imposta il percorso per caricare i file dac/dbi coreclr.
setclrpath <path> . |
sethostruntime |
Imposta o visualizza la directory di runtime .NET da usare per eseguire codice gestito in SOS. |
setsymbolserver |
Abilita il supporto del server dei simboli. |
setsostid |
Imposta l'indice di tid/thread corrente del sistema operativo anziché usare quello fornito da LLDB.
setsostid <tid> <index> . |
sos |
Esegue vari comandi di debug coreclr. Usare la sintassi sos <command-name> <args> . Per altre informazioni, vedere "soshelp". |
soshelp |
Visualizza tutti i comandi disponibili quando non viene specificato alcun parametro o visualizza informazioni dettagliate sulla Guida sul comando specificato: soshelp <command> . |
syncblk |
Visualizza le informazioni sul supporto SyncBlock. |
taskstate |
Visualizza uno stato attività in un formato leggibile. |
threadpool |
Visualizza informazioni sul pool di thread di runtime. |
threadpoolqueue |
Visualizza gli elementi di lavoro del pool di thread in coda. |
threadstate |
Abbastanza stampa il significato di uno stato di thread. |
timerinfo |
Visualizza informazioni sull'esecuzione dei timer. |
token2ee |
Visualizza la struttura MethodTable e la struttura MethodDesc per il token e il modulo specificati. |
traverseheap |
Scrive informazioni sull'heap in un file in un formato compreso dal profiler CLR. |
verifyheap |
Controlla l'heap GC per verificare la presenza di segni di danneggiamento. |
verifyobj |
Controlla l'oggetto passato come argomento per i segni di danneggiamento. |
Esempio di Windbg/cdb
Comando | Descrizione |
---|---|
!dumparray -start 2 -length 5 -details 00ad28d0 |
Visualizza il contenuto di una matrice nell'indirizzo 00ad28d0 . La visualizzazione inizia dal secondo elemento e continua per cinque elementi. |
!dumpassembly 1ca248 |
Visualizza il contenuto di un assembly nell'indirizzo 1ca248 . |
!dumpheap |
Visualizza informazioni sull'heap di Garbage Collector. |
!DumpLog |
Scrive il contenuto del log di stress in memoria in un file (predefinito) denominato StressLog.txt nella directory corrente. |
!dumpmd 902f40 |
Visualizza la struttura MethodDesc nell'indirizzo 902f40 . |
!dumpmodule 1caa50 |
Visualizza informazioni su un modulo all'indirizzo 1caa50 . |
!DumpObj a79d40 |
Visualizza informazioni su un oggetto nell'indirizzo a79d40 . |
!DumpVC 0090320c 00a79d9c |
Visualizza i campi di una classe valore in corrispondenza dell'indirizzo 00a79d9c utilizzando la tabella del metodo nell'indirizzo 0090320c . |
!eeheap -gc |
Visualizza la memoria del processo utilizzata dal Garbage Collector. |
!finalizequeue |
Visualizza tutti gli oggetti pianificati per la finalizzazione. |
!findappdomain 00a79d98 |
Determina il dominio applicazione di un oggetto nell'indirizzo 00a79d98 . |
!gcinfo 5b68dbb8 |
Visualizza tutti gli handle di Garbage Collector nel processo corrente. |
!name2ee unittest.exe MainClass.Main |
Visualizza le strutture MethodTable e EEClass per il metodo Main nella classe MainClass nel modulo unittest.exe . |
!token2ee unittest.exe 02000003 |
Visualizza informazioni sul token di metadati nell'indirizzo 02000003 nel modulo unittest.exe . |
Utilizzo di esempio di LLDB
Comando | Descrizione |
---|---|
dumparray -start 2 -length 5 -details 00ad28d0 |
Visualizza il contenuto di una matrice nell'indirizzo 00ad28d0 . La visualizzazione inizia dal secondo elemento e continua per cinque elementi. |
dumpassembly 1ca248 |
Visualizza il contenuto di un assembly nell'indirizzo 1ca248 . |
dumpheap |
Visualizza informazioni sull'heap di Garbage Collector. |
dumplog |
Scrive il contenuto del log di stress in memoria in un file (predefinito) denominato StressLog.txt nella directory corrente. |
dumpmd 902f40 |
Visualizza la struttura MethodDesc nell'indirizzo 902f40 . |
dumpmodule 1caa50 |
Visualizza informazioni su un modulo all'indirizzo 1caa50 . |
dumpobj a79d40 |
Visualizza informazioni su un oggetto nell'indirizzo a79d40 . |
dumpvc 0090320c 00a79d9c |
Visualizza i campi di una classe valore in corrispondenza dell'indirizzo 00a79d9c utilizzando la tabella del metodo nell'indirizzo 0090320c . |
eeheap -gc |
Visualizza la memoria del processo utilizzata dal Garbage Collector. |
findappdomain 00a79d98 |
Determina il dominio applicazione di un oggetto nell'indirizzo 00a79d98 . |
gcinfo 5b68dbb8 |
Visualizza tutti gli handle di Garbage Collector nel processo corrente. |
name2ee unittest.exe MainClass.Main |
Visualizza le strutture MethodTable e EEClass per il metodo Main nella classe MainClass nel modulo unittest.exe . |
token2ee unittest.exe 02000003 |
Visualizza informazioni sul token di metadati nell'indirizzo 02000003 nel modulo unittest.exe . |
clrthreads |
Visualizza i thread gestiti. |
Vedere anche
- Introduzione ai dump in .NET
- Informazioni su come eseguire il debug di una perdita di memoria in .NET
- blog Raccolta e analisi dei dump della memoria
- strumento di analisi dump (dotnet-dump)
- programma di installazione delle estensioni del debugger .NET (dotnet-debugger-extensions)
- strumento di analisi heap (dotnet-gcdump)