Estensioni di debug SOS
L'estensione di debug SOS consente di visualizzare informazioni sul codice in esecuzione all'interno del runtime .NET, sia nei processi attivi che nei dump. L'estensione è preinstallata con dotnet-dump e Windbg/dbg e può essere scaricata per l'uso con LLDB. È possibile usare l'estensione di debug SOS per:
- Raccogliere informazioni sull'heap gestito.
- Cercare 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.
Sintassi
In Windows: ![command] [options]
In Linux e macOS: sos [command] [options]
Molti dei comandi hanno alias o collegamenti in lldb: clrstack [options]
Comandi
La seguente tabella dei comandi è disponibile anche in Guida o soshelp. La Guida ai singoli comandi è disponibile usando soshelp <command>
.
Comando | Descrizione |
---|---|
bpmd [-nofuturemodule] [<nome<>del metodo del> modulo] [-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 usando 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 modulo diverso da zero, il punto di interruzione è specifico di una funzione in quel particolare modulo caricato. Se il punto di interruzione in sospeso dispone di un ID modulo pari a zero, il punto di interruzione si applica a moduli che non sono stati ancora caricati. Usare l'opzione -clear o -clearall per rimuovere punti di interruzione in sospeso dall'elenco. |
CLRStack [-a] [-l] [-p] [-n] [-f] [-r] [-all] | Fornisce l'analisi dello stack del solo codice gestito. L'opzione -p mostra gli argomenti della funzione gestita. L'opzione -l mostra le informazioni sulle variabili locali in un frame. L'estensione di debug SOS non può recuperare i nomi locali, quindi l'output per i nomi locali è nel formato <valore> dell'indirizzo<>=locale. L'opzione -a è una scelta rapida per la combinazione di -l e -p. L'opzione -n disabilita la visualizzazione dei nomi dei file di origine e dei numeri di riga. Se nel debugger è specificata l'opzione SYMOPT_LOAD_LINES, verranno ricercati i simboli di ogni frame gestito e, in caso di esito positivo, verranno visualizzati il nome del file di origine e il numero di riga corrispondenti. È possibile specificare il parametro -n (nessun numero di riga) per disabilitare questo comportamento. L'opzione -f (modalità completa) visualizza i fotogrammi nativi mescolandoli con i frame gestiti e con 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 di tutti gli stack dei thread gestiti. |
COMState | Elenca il modello di 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 devono essere visualizzati gli elementi. L'opzione -length specifica il numero di elementi da visualizzare. L'opzione -details visualizza dettagli dell'elemento usando i formati DumpObj e DumpVC. L'opzione -nofields impedisce la visualizzazione delle matrici. Questa opzione è disponibile solo se viene specificata l'opzione -detail. |
DumpAsync (dumpasync) [-mt<MethodTable>] [-type<nome di tipo parziale>] [-waiting] [-roots] | DumpAsync attraversa l'heap di Garbage collection e cerca gli oggetti che rappresentano le macchine a stati asincrone 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. Tali dettagli includono: - Riga per il tipo dell'oggetto macchina a stati asincrona, 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 contenuto nell'oggetto. - Elenco di ogni campo nella macchina a stati. - Riga per continuare da questo oggetto macchina a stati, se una o più sono state registrate. - Radici GC individuate per l’oggetto macchina a stati asincrona. |
DumpAssembly<indirizzo assembly> | Visualizza informazioni su un assembly. Il comando DumpAssembly elenca più moduli, se esistenti. È possibile ottenere l'indirizzo di un assembly usando il comando DumpDomain. |
DumpClass<indirizzo EEClass> | 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. Usare il comando DumpMT, DumpObj, Name2EE o Token2EE per ottenere l'indirizzo di una struttura EEClass . |
DumpDomain [<domain address>] | Enumera ogni Assembly oggetto caricato all'interno dell'indirizzo dell'oggetto specificato AppDomain . In caso di chiamata senza parametri, il comando DumpDomain elenca tutti gli oggetti AppDomain in un processo. Poiché .NET (Core) ha solo un AppDomainoggetto , DumpDomain restituisce solo un oggetto. |
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 raccolta 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 a un riepilogo di valori di stringa statistici. L'opzione -short limita l'output al solo indirizzo di ogni oggetto. In tal modo, è possibile inviare facilmente l'output 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 segnala la presenza di ThinLock. Per altre informazioni, vedere il comando SyncBlk. L'opzione -startAtLowerBound forza l'inizio del percorso nell'heap al limite inferiore di un intervallo di indirizzi specificato. Durante la fase della pianificazione, l'heap spesso non è percorribile perché gli oggetti vengono spostati. Questa opzione forza DumpHeap a iniziare il percorso al limite inferiore specificato. È necessario fornire l'indirizzo di un oggetto valido come limite inferiore affinché questa opzione funzioni. È possibile visualizzare la memoria in corrispondenza dell'indirizzo di un oggetto non valido per trovare manualmente la tabella dei metodi successiva. Se il processo di Garbage Collection è attualmente impegnato in una chiamata a memcopy , è possibile riuscire a trovare l'indirizzo dell'oggetto successivo anche 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 sottostringa corrispondente alla stringa specificata. Il parametro start inizia l'elenco a partire dall'indirizzo specificato.Il parametro end arresta l'elenco in corrispondenza dell'indirizzo specificato. |
DumpIL<Managed DynamicMethod object> | <DynamicMethodDesc pointer> | <MethodDesc pointer> | 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. |
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 facilita la diagnosi degli errori da stress senza utilizzare blocchi o I/O. Per abilitare il log di stress, impostare le seguenti chiavi del Registro di sistema in HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft.NETFramework: (DWORD) StressLog = 1 (DWORD) LogFacility = 0xffffffff (DWORD) StressLogSize = 65536 L'opzione -addr facoltativa consente di specificare un log di stress diverso dal log predefinito. |
DumpMD<indirizzo MethodDesc> | Visualizza informazioni su una struttura MethodDesc in corrispondenza dell'indirizzo specificato.È possibile usare il comando IP2MD per ottenere l'indirizzo della struttura MethodDesc da una funzione gestita. |
DumpMT [-MD] <indirizzo MethodTable> | Visualizza informazioni su una tabella dei metodi 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 dei metodi. |
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 oggetto> -o- DO<indirizzo oggetto> |
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 la dimensione dell'oggetto.È possibile usare il comando DumpStackObjects per recuperare l'indirizzo di un oggetto. Il comando DumpObj può essere eseguito sui campi di tipo CLASS perché sono anch'essi oggetti.L'opzione - nofields impedisce la visualizzazione dei campi dell'oggetto. Utile per gli oggetti di tipo String. |
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 l'analisi di uno 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 dei file di origine e dei numeri di riga. Se nel debugger è specificata l'opzione SYMOPT_LOAD_LINES, verranno ricercati i simboli di ogni frame gestito e, in caso di esito positivo, verranno visualizzati il nome del file di origine e il numero di riga corrispondenti. È possibile specificare il parametro -n (nessun numero di riga) 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 va usato il comando DumpSig per analizzare singoli oggetti firma. Se tuttavia una firma è stata danneggiata in qualche modo, è possibile usare DumpSigElem per leggerne le parti valide. |
DumpStackObjects [-verify] [top stack [bottom stack]]oppure DSO [-verify] [ top stack [bottom stack]] |
Visualizza tutti gli oggetti gestiti trovati nell'ambito dei limiti dello stack corrente. L'opzione -verify convalida tutti i campi CLASS non statici di un campo dell'oggetto.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. |
DumpVC<indirizzo MethodTable><indirizzo> | 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 dispongono di una tabella dei metodi come primo campo. |
EEHeap [-gc] [-loader] | Mostra 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 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. |
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 ). |
Domande frequenti | Visualizza le domande frequenti. Non supportata in dotnet-dump . |
FinalizeQueue [-detail] | [-allReady] [-short] | Visualizza tutti gli oggetti registrati per la finalizzazione. L'opzione -detail visualizza informazioni aggiuntive su eventuali oggetti SyncBlocks da pulire ed eventuali oggetti RuntimeCallableWrappers (RCW) in attesa di pulizia. Entrambe le strutture dati vengono memorizzate nella cache e pulite dal thread del finalizzatore in esecuzione.L'opzione -allReady visualizza tutti gli oggetti pronti per la finalizzazione, indipendentemente dal fatto che siano già contrassegnati dall'operazione di Garbage Collection o se saranno contrassegnati dalla prossima operazione di Garbage Collection. Gli oggetti che sono nell'elenco "pronti per la finalizzazione" sono oggetti finalizzabili senza più radice. Questa opzione può essere molto costosa, perché verifica se tutti gli oggetti nelle code finalizzabili contengono ancora una radice.L'opzione -short limita l'output all'indirizzo di ogni oggetto. Se usata insieme a -allReady, enumera tutti gli oggetti con un finalizzatore che non contengono più una radice. Se utilizzata in modo indipendente, elenca tutti gli oggetti nelle code di oggetti finalizzabili e "pronti per la finalizzazione". |
FindAppDomain<indirizzo oggetto> | Determina il dominio applicazione di un oggetto in corrispondenza dell'indirizzo specificato. |
FindRoots -gen<N> | -gen any |<indirizzo dell'oggetto> | Determina l'interruzione dell'oggetto del debug da parte del debugger alla raccolta successiva della generazione specificata. L'effetto viene reimpostato appena si verifica l'interruzione. Per impostare l'interruzione alla raccolta successiva, è necessario emettere nuovamente il comando. Il modulo dell’<indirizzo oggetto> di questo comando viene usato dopo l'interruzione causata da-gen o da -gen any. In quel momento l'oggetto del debug è nello stato appropriato per consentire a FindRoots di identificare le radici degli oggetti dalle generazioni condannate correnti. Supportato solo in Windows. |
GCHandles [-perdomain] | Visualizza le statistiche relative agli handle del Garbage Collector nel processo. L'opzione -perdomain organizza le statistiche per dominio dell'applicazione. Usare il comando GCHandles per trovare 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 che punta ancora a essa viene eliminato senza liberarla. Supportato solo in Windows. |
GCHandleLeaks | Ricerca nella memoria i riferimenti 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, il comando visualizza una notifica. Supportato solo in Windows. |
GCInfo<indirizzo MethodDesc><indirizzo codice> | Visualizza i dati che indicano quando nei registri o nei percorsi 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] [-all] <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 cercare gli handle in altri oggetti e handle nello stack. In ogni stack viene quindi eseguita 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 viene ignorata. Usare i comandi clrstack e U per disassemblare il frame a cui appartiene il valore dell'argomento o quello locale per poter 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. L'opzione -all forza la visualizzazione di tutte le radici anziché solo delle radici univoche. |
Indirizzo dell'oggetto GCWhere< > | 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 di oggetto valido, la dimensione viene visualizzata come 0 (zero). |
Help (soshelp) [<command>] [faq ] |
Visualizza tutti i comandi disponibili se non è specificato alcun parametro oppure visualizza informazioni di Guida dettagliate 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 su ogni heap. Se viene specificata l'opzione -inclUnrooted, il report include informazioni sugli oggetti gestiti dall'heap di Garbage Collection che non contiene più una radice. Supportato solo in Windows. |
HistClear | Rilascia tutte le risorse utilizzate 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 nell'oggetto del debug. |
HistObj <obj_address> | Esamina tutti i record delle rilocazioni del log di stress e visualizza la catena di rilocazioni di Garbage Collection che hanno potuto condurre all'indirizzo passato come argomento. |
HistObjFind <obj_address> | Visualizza tutte le voci del log che fanno riferimento a un oggetto in corrispondenza dell'indirizzo specificato. |
Radice HistRoot <> | Visualizza informazioni correlate sia alle promozioni sia alle rilocazioni della radice specificata. Il valore radice può essere utilizzato per tenere traccia del movimento di un oggetto attraverso le operazioni di Garbage Collection. |
IP2MD (ip2md) <Code address> | Visualizza la struttura MethodDesc in corrispondenza dell'indirizzo specificato nel codice con compilazione JIT. |
ListNearObj (lno) <obj_address> | Visualizza gli oggetti che precedono e seguono l'indirizzo specificato. Il comando cerca l'indirizzo nell'heap di Garbage Collection che sembra un inizio valido di un oggetto gestito (in base a una tabella dei metodi valida) e l'oggetto che segue l'indirizzo dell'argomento. Supportato solo in Windows. |
MinidumpMode [0] [1] | Impedisce l'esecuzione di comandi non sicuri quando si utilizza un minidump. Passare 0 per disabilitare la funzionalità o 1 per abilitarla. Per impostazione predefinita, il valore MinidumpMode è impostato su 0. I minidump creati con il comando .dump /m o .dump contengono una quantità limitata di dati specifici di CLR e consentono la corretta esecuzione solo di un subset di comandi SOS. È possibile che alcuni comandi abbiano esito negativo con errori imprevisti perché aree richieste di memoria non sono mappate o sono mappate solo parzialmente. Questa opzione impedisce l'esecuzione di comandi non sicuri sui minidump. Supportato solo con Windbg. |
Name2EE (name2ee) <module name><type or method name> -o- Name2EE<nome modulo>!<nome tipo o metodo> |
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, esplorare il modulo usando Ildasm.exe (Disassembler IL). È inoltre possibile passare * come parametro del nome del modulo per eseguire la ricerca in tutti i moduli gestiti caricati. Il parametro nome modulo può anche essere 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 a quella dell'entità principale. L'opzione -aggregate può essere usata con l'argomento -stat per ottenere una visualizzazione dettagliata dei tipi che contengono ancora una radice. Usando !dumpheap -stat e !objsize -aggregate -stat è possibile determinare quali oggetti non contengono più una radice e diagnosticare vari problemi relativi alla memoria. Supportato solo in Windows. |
PrintException [-nested] [-lines] [<Exception object address>] -o- 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 nel 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. Supportato solo con Windbg. |
RCWCleanupList<indirizzo RCWCleanupList> | Visualizza l'elenco di Runtime Callable Wrapper in corrispondenza dell'indirizzo specificato che sono in attesa di pulizia. Supportato solo con Windbg. |
SaveModule<indirizzo di base><nomefile> | Scrive nel file specificato un'immagine caricata in memoria in corrispondenza dell'indirizzo 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). La versione del runtime deve essere 2.1.0 o successive. Se sono presenti spazi nella directory, devono essere racchiusi 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) del quale viene eseguito il debug. Usare questo comando se il runtime predefinito sottoposto a debug non riesce a eseguire il codice SOS o se la versione è precedente a 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] [-loadsymbols] [-cache<cache-path>] [-directory<search-directory>] [-sympath<windows-symbol-path>] [<symbol-server-URL>] | Abilita il supporto per il download dal server di simboli. L'opzione -ms consente il download dal server di simboli Microsoft pubblico. L'opzione -disable attiva il supporto per il download dei simboli. L'opzione -cache<cache-path> specifica una directory della cache di simboli. Se non specificato, il valore predefinito è $HOME/.dotnet/symbolcache. L'opzione -directory aggiunge un percorso per cercare simboli. Può essere più di uno. L'opzione -sympath aggiunge percorsi di server, cache e directory nel formato del percorso di simboli di Windows. L'opzione -log abilita la registrazione del download di simboli. L'opzione -loadsymbols tenta di scaricare i simboli .NET nativi per il runtime. Supportato in lldb e dotnet-dump. |
SOSFlush | Scarica la 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 solo quando viene generata l'eccezione specificata, consentendo la continuazione dell'esecuzione quando vengono generate altre eccezioni. L'opzione -derived rileva l'eccezione specificata e tutte le eccezioni che derivano da essa. Supportato solo con Windbg. |
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 di proprietà di 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 della porta di completamento e il numero di timer. |
Threads (clrthreads) [-live] [-special] | Visualizza tutti i thread gestiti del processo. Il comando Threads visualizza l'ID abbreviato del debugger, l'ID del thread di CLR e l'ID del thread del sistema operativo. Il comando Threads visualizza anche 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 i thread associati a un thread attivo. L'opzione -special visualizza tutti i thread speciali creati da CLR. Tra i thread speciali sono inclusi i thread della Garbage Collection (nell'esecuzione contemporanea e su server), i thread di supporto del debugger, i thread del finalizzatore, i thread di scaricamento di AppDomain e i thread di timer del pool di thread. |
Campo Valore stato ThreadState < > | Visualizza lo stato del thread. Il parametro value è il valore del campo State nell'output del report Threads. |
Token2EE<nome modulo><token> | Trasforma il token di metadati specificato del modulo specificato in una struttura MethodTable o MethodDesc .È possibile passare * come parametro del nome del modulo per trovare il mapping del token in ogni modulo gestito caricato. È anche possibile passare il nome del debugger di un modulo, ad esempio mscorlib o image00400000 . |
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 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 GCInfo del metodo.L'opzione -ehinfo visualizza informazioni sulle eccezioni del metodo. È possibile ottenere queste informazioni anche con il comando EHInfo. L'opzione -n disabilita la visualizzazione dei nomi dei file di origine e dei numeri di riga. Se nel debugger è specificata l'opzione SYMOPT_LOAD_LINES, vengono ricercati i simboli di ogni frame gestito e, in caso di esito positivo, vengono visualizzati il nome del file di origine e il numero di riga corrispondenti. È possibile specificare l'opzione -n per disabilitare questo comportamento. |
VerifyHeap | Cerca segni di danneggiamento nell'heap del Garbage Collector e visualizza gli eventuali errori trovati. L'heap può danneggiarsi a causa di chiamate di pInvoke costruite in modo non corretto. |
VerifyObj<indirizzo oggetto> | Cerca segni di danneggiamento nell'oggetto passato come argomento. Supportato solo in Windows. |
VMMap | Attraversa lo spazio degli indirizzi virtuali e visualizza il tipo di protezione applicato a ogni regione. Supportato solo con Windbg. |
VMStat | Fornisce una visualizzazione di riepilogo dello spazio degli indirizzi virtuali, ordinata in base a ogni tipo di protezione applicato alla memoria (free, reserved, committed, private, mapped, image). La colonna TOTAL visualizza il risultato della colonna AVERAGE moltiplicato per la colonna BLK COUNT. Supportato solo con Windbg. |
Dotnet-Dump
Per un elenco dei comandi SOS disponibili con dotnet-dump analyze
, vedere dotnet-dump.
Debugger Windows
È anche possibile usare l'estensione di debug SOS caricandola nel debugger WinDbg/dbg ed eseguendo comandi all'interno del debugger windows. I comandi SOS possono essere usati su processi o dump in tempo reale.
Windbg deve caricare automaticamente l'estensione SOS ogni volta che il processo sottoposto a debug contiene il runtime .NET (coreclr.dll o libcoreclr.so).
Debugger LLDB
Per istruzioni sulla configurazione di SOS per LLDB, consultare dotnet-sos. I comandi SOS possono essere usati su processi o dump in tempo reale.
Per impostazione predefinita, è possibile coprire tutti i comandi SOS immettendo: sos [command_name]
. Tuttavia, è stato fornito un alias per i comandi più comuni in modo che non sia necessario il sos
prefisso:
Comando | Funzione |
---|---|
analyzeoom |
Contiene informazioni sull’ultimo OOM che si è verificato in una richiesta di allocazione all'heap GC. |
bpmd |
Crea un punto di interruzione in corrispondenza del metodo gestito specificato nel modulo specificato. |
clrmodules |
Elenca i moduli gestiti nel processo. |
clrstack |
Fornisce l'analisi dello stack del solo codice gestito. |
clrthreads |
Elenca i thread gestiti in esecuzione. |
clru |
Contiene un disassembly con le annotazioni di un metodo gestito. |
dbgout |
Abilita/disabilita (-off ) la registrazione SOS interna. |
dso |
Visualizza tutti gli oggetti gestiti trovati nell'ambito dei limiti dello stack corrente. |
dumpalc |
Contiene dettagli relativi a un assemblyLoadContext raccoglibile in cui viene caricato l'oggetto specificato. |
dumparray |
Contiene dettagli relativi a una matrice gestita. |
dumpasync |
Contiene informazioni sulle macchine a stati asincrone nell'heap di Garbage Collection. |
dumpassembly |
Contiene dettagli relativi a un assembly. |
dumpclass |
Contiene informazioni sulla struttura EEClass in corrispondenza dell'indirizzo specificato. |
dumpconcurrentdictionary |
Illustra il contenuto del dizionario simultaneo. |
dumpconcurrentqueue |
Illustra il contenuto della coda simultaneo. |
dumpdelegate |
Contiene informazioni su un delegato. |
dumpdomain |
Contiene informazioni su tutti gli assembly all'interno di tutti gli AppDomain o su quello specificato. |
dumpgcdata |
Contiene informazioni sui dati GC. |
dumpgen |
Illustra il contenuto dell'heap per la generazione specificata. |
dumpheap |
Contiene informazioni sull'heap sottoposto a procedura di Garbage Collection e le statistiche di raccolta relative agli oggetti. |
dumpil |
Visualizza il linguaggio intermedio comune (CIL) associato a un metodo gestito. |
dumplog |
Scrive nel file specificato il contenuto di un log di stress in memoria. |
dumpmd |
Contiene informazioni sulla struttura MethodDesc in corrispondenza dell'indirizzo specificato. |
dumpmodule |
Contiene informazioni su un modulo in corrispondenza dell'indirizzo specificato. |
dumpmt |
Contiene informazioni sulla tabella dei metodi in corrispondenza dell'indirizzo specificato. |
dumpobj |
Contiene informazioni sull'oggetto in corrispondenza dell'indirizzo specificato. |
dumpruntimetypes |
Trova tutti gli oggetti System.RuntimeType nell'heap GC e stampa inoltre il nome del tipo e la MethodTable a cui fanno riferimento. |
dumpsig |
Esegue il dump della firma di un metodo o di un campo specificato da <sigaddr> <moduleaddr> . |
dumpsigelem |
VisuEffettua il dump di un singolo elemento di un oggetto firma. |
dumpstack |
Contiene un'analisi dello stack nativa e gestita. |
dumpstackobjects |
Visualizza tutti gli oggetti gestiti trovati nell'ambito dei limiti dello stack corrente. |
dumpvc |
Contiene informazioni sui campi di una classe valore. |
eeheap |
Contiene informazioni sulla memoria del processo utilizzata dalle strutture dei dati di runtime interne. |
eestack |
Esegue dumpstack su tutti i thread del processo. |
eeversion |
Contiene informazioni sulle versioni di runtime e SOS. |
ehinfo |
Illustra i blocchi di gestione delle eccezioni in un metodo JIT. |
finalizequeue |
Visualizza tutti gli oggetti registrati per la finalizzazione. |
findappdomain |
Tenta di risolvere l'AppDomain di un oggetto GC. |
findroots |
Trova e mostra le radici degli oggetti nelle raccolte GC. |
gchandles |
Visualizza le statistiche relative agli handle del Garbage Collector nel processo. |
gcheapstat |
Illustra le statistiche relative al Garbage Collector. |
gcinfo |
Illustra la codifica GC JIT per un metodo. |
gcroot |
Contiene informazioni sui riferimenti (o radici) all’oggetto in corrispondenza dell'indirizzo specificato. |
gcwhere |
Mostra la posizione nell'heap GC dell'indirizzo specificato. |
histclear |
Rilascia tutte le risorse utilizzate dalla famiglia di comandi Hist. |
histinit |
Inizializza le strutture SOS dal log di stress salvato nell'oggetto del debug. |
histobj |
Esamina tutti i record delle rilocazioni del log di stress e visualizza la catena di rilocazioni di Garbage Collection che hanno potuto condurre all'indirizzo passato come argomento. |
histobjfind |
Contiene tutte le voci del log che fanno riferimento all’oggetto in corrispondenza dell'indirizzo specificato. |
histroot |
Visualizza informazioni correlate sia alle promozioni sia alle rilocazioni della radice specificata. |
histstats |
Contiene le statistiche del log di stress. |
ip2md |
Visualizza la struttura MethodDesc in corrispondenza dell'indirizzo specificato nel codice con compilazione JIT. |
listnearobj |
Mostra l'oggetto precedente e successivo all'indirizzo specificato. |
loadsymbols |
Carica i simboli del modulo nativo .NET. |
logging |
Abilita/disabilita la registrazione SOS interna. |
name2ee |
Illustra le strutture MethodTable e EEClass per il tipo o il metodo specificato nel modulo specificato. |
objsize |
Visualizza la dimensione dell'oggetto specificato. |
parallelstacks |
Illustra gli stack di thread uniti in modo analogo al pannello "Stack paralleli" di Visual Studio. |
pathto |
Illustra 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 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 |
Illustra tutti i comandi disponibili quando non è specificato alcun parametro oppure contiene informazioni di Guida dettagliate sul comando specificato: soshelp <command> . |
syncblk |
Contiene informazioni sul supporto SyncBlock. |
taskstate |
Mostra uno stato attività in un formato leggibile. |
threadpool |
Contiene informazioni sul pool di thread di runtime. |
threadpoolqueue |
Illustra gli elementi di lavoro del pool di thread in coda. |
threadstate |
Stampa correttamente il significato di uno stato di thread. |
timerinfo |
Contiene informazioni sull'esecuzione dei timer. |
token2ee |
Illustra la struttura MethodTable e la struttura MethodDesc per il token e il modulo specificati. |
traverseheap |
Scrive informazioni sull'heap nel file specificato, in un formato leggibile dal profiler CLR. |
verifyheap |
Controlla l'heap GC per verificare la presenza di segni di danneggiamento. |
verifyobj |
Cerca segni di danneggiamento nell'oggetto passato come argomento. |
Esempio di Windbg/cdb
Comando | Descrizione |
---|---|
!dumparray -start 2 -length 5 -details 00ad28d0 |
Mostra il contenuto di una matrice all'indirizzo 00ad28d0 . La visualizzazione parte dal secondo elemento e continua per cinque elementi. |
!dumpassembly 1ca248 |
Mostra il contenuto di un assembly all'indirizzo 1ca248 . |
!dumpheap |
Contiene 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 |
Illustra la MethodDesc struttura all'indirizzo 902f40 . |
!dumpmodule 1caa50 |
Contiene informazioni su un modulo all'indirizzo 1caa50 . |
!DumpObj a79d40 |
Contiene informazioni su un oggetto all'indirizzo a79d40 . |
!DumpVC 0090320c 00a79d9c |
Illustra i campi di una classe di valori in corrispondenza dell'indirizzo 00a79d9c utilizzando la tabella dei metodi in corrispondenza dell'indirizzo 0090320c . |
!eeheap -gc |
Illustra la memoria del processo utilizzata dal Garbage Collector. |
!finalizequeue |
Mostra tutti gli oggetti pianificati per la finalizzazione. |
!findappdomain 00a79d98 |
Determina il dominio applicazione di un oggetto all'indirizzo 00a79d98 . |
!gcinfo 5b68dbb8 |
Mostra tutti gli handle di Garbage Collector nel processo corrente. |
!name2ee unittest.exe MainClass.Main |
Illustra le strutture MethodTable e EEClass per il metodo Main nella classe MainClass nel modulo unittest.exe . |
!token2ee unittest.exe 02000003 |
Contiene informazioni sul token di metadati all'indirizzo 02000003 nel modulo unittest.exe . |
Esempio di utilizzo di LLDB
Comando | Descrizione |
---|---|
dumparray -start 2 -length 5 -details 00ad28d0 |
Mostra il contenuto di una matrice all'indirizzo 00ad28d0 . La visualizzazione parte dal secondo elemento e continua per cinque elementi. |
dumpassembly 1ca248 |
Mostra il contenuto di un assembly all'indirizzo 1ca248 . |
dumpheap |
Contiene 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 |
Illustra la MethodDesc struttura all'indirizzo 902f40 . |
dumpmodule 1caa50 |
Contiene informazioni su un modulo all'indirizzo 1caa50 . |
dumpobj a79d40 |
Contiene informazioni su un oggetto all'indirizzo a79d40 . |
dumpvc 0090320c 00a79d9c |
Illustra i campi di una classe di valori in corrispondenza dell'indirizzo 00a79d9c utilizzando la tabella dei metodi in corrispondenza dell'indirizzo 0090320c . |
eeheap -gc |
Illustra la memoria del processo utilizzata dal Garbage Collector. |
findappdomain 00a79d98 |
Determina il dominio applicazione di un oggetto all'indirizzo 00a79d98 . |
gcinfo 5b68dbb8 |
Mostra tutti gli handle di Garbage Collector nel processo corrente. |
name2ee unittest.exe MainClass.Main |
Illustra le strutture MethodTable e EEClass per il metodo Main nella classe MainClass nel modulo unittest.exe . |
token2ee unittest.exe 02000003 |
Contiene informazioni sul token di metadati all'indirizzo 02000003 nel modulo unittest.exe . |
clrthreads |
Mostra i thread gestiti. |