Condividi tramite


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 nonché i nuovi comandi. È ora supportato anche un set limitato di comandi per il runtime AOT nativo.

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-list , -cleare -clearall:

L'opzione
-list genera un elenco di tutti i punti di interruzione in sospeso. Se un punto di interruzione in sospeso ha un ID modulo diverso da zero, tale punto di interruzione è specifico di una funzione in quel particolare modulo caricato. Se il punto di interruzione in sospeso ha un ID modulo zero, tale punto di interruzione si applica ai moduli non ancora caricati.

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 -length specifica il numero di elementi da visualizzare.

L'opzione -details visualizza i dettagli dell'elemento usando il dumpObj e formati di DumpVC.

L'opzione -nofields impedisce la visualizzazione delle matrici. Questa opzione è disponibile solo quando viene specificata l'opzione
-details.
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 ValueTaske 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.
dumpassembly Visualizza informazioni su un assembly.

Il comando DumpAssembly elenca più moduli, se presenti.

È possibile ottenere un indirizzo di assembly usando il comando
dumpdomain .
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 visualizza un avviso se rileva una frammentazione eccessiva nell'heap di Garbage Collector.

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

L'opzione
stringhe limita l'output a un riepilogo dei valori di stringa statistica.

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

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.
oggetto DynamicMethod gestitodumpIL | puntatore DynamicMethodDesc | puntatore MethodDesc 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.
addressMethodMD Visualizza informazioni su una struttura MethodDesc in corrispondenza dell'indirizzo specificato.

È possibile usare il comando ip2MD per ottenere l'indirizzo della struttura da una funzione gestita.
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 o DumpAssembly per recuperare l'indirizzo di un modulo.
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 per recuperare l'indirizzo di un oggetto.

È possibile eseguire il comando DumpObj sui campi di tipo CLASS perché sono anche oggetti .

L'opzione nofields impedisce la visualizzazione dei campi dell'oggetto, è utile per oggetti come String.
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] [topstack [bottomstack]] Visualizza un'analisi dello stack.

L'opzione -EE fa sì che il comando DumpStack visualizzi solo le funzioni gestite. Usare i parametri 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.
DumpStackObjects [-verify] [ stack[stack]]

-o-

DSO [-verify] [topstack [bottomstack]]
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 DumpStackObject con comandi di traccia dello stack, ad esempio K (windbg) o bt (lldb) insieme al comando clrstack per determinare i valori delle variabili e dei parametri locali.
addressAddressMethodTable dumpVC Visualizza informazioni sui campi di una classe valore in corrispondenza dell'indirizzo specificato.

Il parametro MethodTable consente al comando dumpVC di di interpretare correttamente i campi. Le classi valore non dispongono di una tabella dei metodi come primo campo.
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 su tutti i thread del processo.

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

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 -detail visualizza informazioni aggiuntive su qualsiasi da pulire e su qualsiasi (RCWs) che attendono la pulizia. Entrambe queste strutture di dati vengono memorizzate nella cache e eliminate dal thread finalizzatore durante l'esecuzione.

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.
FindRoots-genN | -gen qualsiasi | indirizzo dell'oggetto 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 forma di questo comando viene usato dopo l'interruzione causata dall' -gen o dall'-gen di qualsiasi. In quel momento, l'oggetto di debug è nello stato corretto per FindRoots identificare le radici per gli oggetti delle generazioni condannate correnti. Supportato solo in Windows.
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 per individuare le perdite di memoria causate da perdite di handle di Garbage Collector. Ad esempio, una perdita di memoria si verifica quando il codice mantiene una matrice di grandi dimensioni perché un handle di Garbage Collector sicuro punta ancora a esso e l'handle viene rimosso senza liberarlo.

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 GCHandleLeaks visualizza l'indirizzo del riferimento. Se non viene trovato un handle in memoria, questo comando visualizza una notifica. Supportato solo in Windows.
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 limita la ricerca agli handle di Garbage Collector e agli oggetti raggiungibili.

L'opzione -all forza la visualizzazione di tutte le radici anziché solo le radici univoche.
indirizzo dell'oggetto GCWhere 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.
radiceHistRoot 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 può essere usata con l'argomento -stat per ottenere una visualizzazione dettagliata dei tipi ancora rooted. Usando !dumpheap -stat e !objsize -aggregate -stat, è possibile determinare quali oggetti non sono più rooted e diagnosticare vari problemi di memoria.

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 annidata visualizza i dettagli sugli oggetti eccezione annidati.

L'opzione
righe visualizza le informazioni di origine, se disponibili.

È 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.
indirizzo RCWCleanupListRCWCleanupList 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 -directory aggiunge un percorso per la ricerca dei simboli. Può essere più di uno.

L'opzione
-sympath aggiunge percorsi di server, cache e directory nel formato del percorso dei simboli di Windows.

L'opzione
-log abilita la registrazione del download dei simboli.

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 visualizza una colonna Dominio che indica il dominio dell'applicazione in cui viene eseguito un thread, una colonna APT che visualizza la modalità apartment COM e una colonna Eccezione che visualizza l'ultima eccezione generata nel thread.

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

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 è il valore del campo nell'output del report thread .
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 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 per il metodo .

L'opzione -ehinfo visualizza informazioni sulle eccezioni per il 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 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