Partilhar via


Extensão de depuração SOS

A extensão de depuração SOS permite exibir informações sobre o código que está sendo executado dentro do tempo de execução do .NET, tanto em processos ao vivo quanto em dumps. A extensão é pré-instalada com dotnet-dump e Windbg/dbg, e pode ser baixada para uso com LLDB. Você pode usar a extensão de depuração SOS para:

  • Colete informações sobre o heap gerenciado.
  • Procure por corrupções de pilha.
  • Exibir tipos de dados internos usados pelo tempo de execução.
  • Exiba informações sobre todo o código gerenciado em execução dentro do tempo de execução.

Sintaxe

No Windows: ![command] [options]

No Linux e macOS: sos [command] [options]

Muitos dos comandos têm aliases ou atalhos em lldb: clrstack [options]

Comandos

A tabela de comandos a seguir também está disponível em Ajuda ou soshelp. A ajuda de comandos individuais está disponível usando soshelp <command>o .

Comando Description
bpmd [-nofuturemodule] [<nome><>do módulo] [-md<MethodDesc>] -list-clear<pending breakpoint number-clearall> Cria um ponto de interrupção no método especificado no módulo especificado.

Se o módulo e o método especificados não tiverem sido carregados, este comando aguardará uma notificação de que o módulo foi carregado e compilado just-in-time (JIT) antes de criar um ponto de interrupção.

Você pode gerenciar a lista de pontos de interrupção pendentes usando as opções -list, -clear e -clearall :

A opção -list gera uma lista de todos os pontos de interrupção pendentes. Se um ponto de interrupção pendente tiver um ID de módulo diferente de zero, esse ponto de interrupção será específico para uma função nesse módulo carregado específico. Se o ponto de interrupção pendente tiver um ID de módulo zero, esse ponto de interrupção se aplicará aos módulos que ainda não foram carregados.

Use a opção -clear ou -clearall para remover pontos de interrupção pendentes da lista.
CLRStack [-a] [-l] [-p] [-n] [-f] [-r] [-todos] Fornece um rastreamento de pilha somente de código gerenciado.

A opção -p mostra argumentos para a função gerenciada.

A opção -l mostra informações sobre variáveis locais em um quadro. A extensão de depuração SOS não pode recuperar nomes locais, portanto, a saída para nomes locais está no valor<>

A opção -a é um atalho para -l e -p combinados.

A opção -n desativa a exibição de nomes de arquivos de origem e números de linha. Se o depurador tiver a opção SYMOPT_LOAD_LINES especificada, o SOS procurará os símbolos de cada quadro gerenciado e, se for bem-sucedido, exibirá o nome do arquivo de origem e o número da linha correspondentes. O parâmetro -n (Sem números de linha) pode ser especificado para desabilitar esse comportamento.

A opção -f (modo completo) exibe os quadros nativos misturando-os com os quadros gerenciados e o nome do assembly e o deslocamento de função para os quadros gerenciados. Esta opção não exibe quadros nativos quando usada com dotnet-dumpo .

A opção -r despeja os registradores para cada quadro de pilha.

A opção -all despeja todas as pilhas de threads gerenciados.
COMState Lista o modelo de apartamento COM para cada thread e um Context ponteiro, se disponível. Este comando só é suportado no Windows.
DumpArray [-start<>

-or-

DA [-startstartIndex<] [<] [-details] [>] endereço do objeto da matriz>
Examina elementos de um objeto de matriz.

A opção -start especifica o índice inicial no qual os elementos devem ser exibidos.

A opção -length especifica quantos elementos mostrar.

A opção -details exibe detalhes do elemento usando os formatos DumpObj e DumpVC .

A opção -nofields impede a exibição de matrizes. Esta opção só está disponível quando a opção -details é especificada.
DumpAsync (dumpasync) [-mt<] [>] [-roots] DumpAsync percorre a pilha de lixo coletada e procura objetos que representam máquinas de estado assíncronas criadas quando o estado de um método assíncrono é transferido para a pilha. Este comando reconhece máquinas de estado assíncronas definidas como async void, async Task, async Task<T>, async ValueTaske async ValueTask<T>.

A saída inclui um bloco de detalhes para cada objeto de máquina de estado assíncrono encontrado. Estes detalhes incluem:
- Uma linha para o tipo do objeto de máquina de estado assíncrono, incluindo seu endereço MethodTable, seu endereço de objeto, seu tamanho e seu nome de tipo.
- Uma linha para o nome do tipo de máquina de estado como contido no objeto.
- Uma listagem de cada campo na máquina de estado.
- Uma linha para uma continuação deste objeto de máquina de estado, se um ou mais tiverem sido registrados.
- Descobertas raízes GC para este objeto de máquina de estado assíncrono.
Endereço do assembly DumpAssembly<> Exibe informações sobre um assembly.

O comando DumpAssembly lista vários módulos, se existirem.

Você pode obter um endereço de assembly usando o comando DumpDomain .
Endereço DumpClass<EEClass> Exibe informações sobre a estrutura associada a EEClass um tipo.

O comando DumpClass exibe valores de campo estáticos, mas não exibe valores de campos não estáticos.

Use o comando DumpMT, DumpObj, Name2EE ou Token2EE para obter um endereço de EEClass estrutura.
DumpDomain [<endereço do domínio>] Enumera cada Assembly objeto que é carregado dentro do endereço de objeto especificado AppDomain . Quando chamado sem parâmetros, o comando DumpDomain lista todos os AppDomain objetos em um processo. Como o .NET (Core) tem apenas um AppDomain, DumpDomain retorna apenas um objeto.
DumpHeap [-stat] [-strings] [-short] [<] [<] [-thinlock] [>] [-mtMethodTable address<] [-type<] [start [>]] Exibe informações sobre a pilha coletada de lixo e estatísticas de coleta sobre objetos.

O comando DumpHeap exibe um aviso se detetar fragmentação excessiva na pilha do coletor de lixo.

A opção -stat restringe a saída ao resumo do tipo estatístico.

A opção -strings restringe a saída a um resumo estatístico do valor da cadeia de caracteres.

A opção -short limita a saída apenas ao endereço de cada objeto. Isso permite que você canalize facilmente a saída do comando para outro comando do depurador para automação.

A opção -min ignora objetos que são menores que o size parâmetro, especificado em bytes.

A opção -max ignora objetos maiores que o size parâmetro, especificado em bytes.

A opção -thinlock informa ThinLocks. Para obter mais informações, consulte o comando SyncBlk .

A -startAtLowerBound opção força a caminhada da pilha a começar no limite inferior de um intervalo de endereços fornecido. Durante a fase de planejamento, a pilha muitas vezes não é caminhável porque os objetos estão sendo movidos. Essa opção força o DumpHeap a iniciar sua caminhada no limite inferior especificado. Você deve fornecer o endereço de um objeto válido como o limite inferior para que essa opção funcione. Você pode exibir a memória no endereço de um objeto incorreto para localizar manualmente a próxima tabela de método. Se a coleta de lixo estiver atualmente em uma chamada para memcopy, você também poderá encontrar o endereço do próximo objeto adicionando o tamanho ao endereço inicial, que é fornecido como um parâmetro.

A opção -mt lista apenas os objetos que correspondem à estrutura especificada MethodTable .

A opção -type lista apenas os objetos cujo nome do tipo é uma correspondência de substring da cadeia de caracteres especificada.

O start parâmetro começa a listar a partir do endereço especificado.

O end parâmetro para de listar no endereço especificado.
DumpIL<Managed DynamicMethod objeto | ><Ponteiro> DynamicMethodDesc | <Ponteiro MethodDesc> Exibe a linguagem intermediária comum (CIL) associada a um método gerenciado.

A CIL dinâmica é emitida de forma diferente da CIL que é carregada a partir de uma montagem. CIL dinâmico refere-se a objetos em uma matriz de objetos gerenciados em vez de tokens de metadados.
> Grava o conteúdo de um log de estresse na memória no arquivo especificado. Se você não especificar um nome, esse comando criará um arquivo chamado StressLog.txt no diretório atual.

O registo de stress na memória ajuda-o a diagnosticar falhas de stress sem utilizar bloqueios ou E/S. Para habilitar o log de estresse, defina as seguintes chaves do Registro em HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\. NETFramework:

(DWORD) StressLog = 1

(DWORD) LogFacility = 0xffffffff

(DWORD) StressLogSize = 65536

A opção opcional -addr permite especificar um log de estresse diferente do log padrão.
Endereço DumpMD<MethodDesc> Exibe informações sobre uma MethodDesc estrutura no endereço especificado.

Você pode usar o comando IP2MD para obter o MethodDesc endereço da estrutura de uma função gerenciada.
Endereço DumpMT [-MD] <MethodTable> Exibe informações sobre uma tabela de método no endereço especificado. Especificar a opção -MD exibe uma lista de todos os métodos definidos com o objeto.

Cada objeto gerenciado contém um ponteiro de tabela de método.
Endereço do módulo DumpModule [-mt] <> Exibe informações sobre um módulo no endereço especificado. A opção -mt exibe os tipos definidos em um módulo e os tipos referenciados pelo módulo

Você pode usar o comando DumpDomain ou DumpAssembly para recuperar o endereço de um módulo.
Endereço do objeto DumpObj [-nofields] <>

-or-

Endereço do objeto DO<>
Exibe informações sobre um objeto no endereço especificado. O comando DumpObj exibe os campos, as informações de EEClass estrutura, a tabela de método e o tamanho do objeto.

Você pode usar o comando DumpStackObjects para recuperar o endereço de um objeto.

Você pode executar o comando DumpObj em campos do tipo CLASS porque eles também são objetos.

A -opção nofields impede que os campos do objeto sejam exibidos, é útil para objetos como String.
DumpRuntimeTypes Exibe os objetos de tipo de tempo de execução no heap do coletor de lixo e lista seus nomes de tipo associados e tabelas de método.
DumpStack [-EE] [-n] [ top pilha [bottompilha]] Exibe um rastreamento de pilha.

A opção -EE faz com que o comando DumpStack exiba apenas funções gerenciadas. Use os top parâmetros e bottom para limitar os quadros de pilha exibidos em plataformas x86.

A opção -n desativa a exibição de nomes de arquivos de origem e números de linha. Se o depurador tiver a opção SYMOPT_LOAD_LINES especificada, o SOS procurará os símbolos de cada quadro gerenciado e, se for bem-sucedido, exibirá o nome do arquivo de origem e o número da linha correspondentes. O parâmetro -n (Sem números de linha) pode ser especificado para desabilitar esse comportamento.
DumpSig<><moduleaddr> Exibe informações sobre uma Sig estrutura no endereço especificado.
DumpSigElem sigaddr<> Exibe um único elemento de um objeto de assinatura. Na maioria dos casos, você deve usar DumpSig para examinar objetos de assinatura individuais. No entanto, se uma assinatura foi corrompida de alguma forma, você pode usar DumpSigElem para ler as partes válidas dela.
DumpStackObjects [-verify] [ top pilha [bottomstack]]

-or-

DSO [-verify] [toppilha [bottompilha]]
Exibe todos os objetos gerenciados encontrados dentro dos limites da pilha atual.

A opção -verify valida cada campo CLASS não estático de um campo de objeto.

Use o comando DumpStackObject com comandos de rastreamento de pilha, como K (windbg) ou bt (lldb), juntamente com o comando clrstack , para determinar os valores de variáveis e parâmetros locais.
Endereço DumpVC<MethodTable><> Exibe informações sobre os campos de uma classe de valor no endereço especificado.

O parâmetro MethodTable permite que o comando DumpVC interprete corretamente os campos. As classes de valor não têm uma tabela de método como seu primeiro campo.
EEHeap [-gc] [-carregador] Exibe informações sobre a memória de processo consumida por estruturas de dados de tempo de execução internas.

As opções -gc e -loader limitam a saída deste comando às estruturas de dados do coletor ou carregador de lixo.

As informações para o coletor de lixo listam os intervalos de cada segmento no heap gerenciado. Se o ponteiro estiver dentro de um intervalo de segmentos dado por -gc, o ponteiro será um ponteiro de objeto.
EEStack [-short] [-EE] Executa o comando DumpStack em todos os threads no processo.

A opção -EE é passada diretamente para o comando DumpStack . O parâmetro -short limita a saída aos seguintes tipos de threads:

Fios que tomaram um bloqueio.

Fios que foram parados para permitir uma recolha de lixo.

Threads que estão atualmente em código gerenciado.
EHInfo [<Endereço MethodDesc> Exibe os blocos de tratamento de exceção em um método especificado. Este comando exibe os endereços de código e deslocamentos para o bloco de cláusula (o try bloco) e o bloco do manipulador (o catch bloco).
FAQ Exibe perguntas frequentes. Não suportado em dotnet-dump.
FinalizeQueue [-detalhe] | [-allReady] [-curto] Exibe todos os objetos registrados para finalização.

A opção -detail exibe informações extras sobre qualquer SyncBlocks um que precise ser limpo e qualquer RuntimeCallableWrappers (RCWs) que aguarde limpeza. Ambas as estruturas de dados são armazenadas em cache e limpas pelo thread do finalizador quando ele é executado.

A -allReady opção exibe todos os objetos que estão prontos para finalização, independentemente de já estarem marcados pela coleta de lixo como tal, ou serem marcados pela próxima coleta de lixo. Os objetos que estão na lista "pronto para finalização" são objetos finalizáveis que não estão mais enraizados. Essa opção pode ser muito cara, pois verifica se todos os objetos nas filas finalizáveis ainda estão enraizados.

A -short opção limita a saída ao endereço de cada objeto. Se for usado em conjunto com -allReady, ele enumerará todos os objetos que têm um finalizador que não estão mais enraizados. Se for usado de forma independente, ele lista todos os objetos nas filas finalizáveis e "prontos para finalização".
Endereço do objeto FindAppDomain<> Determina o domínio do aplicativo de um objeto no endereço especificado.
FindRoots-geração<N | >-geração qualquer |<Endereço do objeto> Faz com que o depurador quebre no depurador na próxima coleção da geração especificada. O efeito é reposto assim que ocorre a interrupção. Para quebrar na próxima coleção, você tem que reemitir o comando. A > do objeto deste comando é usada após a interrupção causada pelo -gen ou -gen any ter ocorrido. Nesse momento, o debuggee está no estado certo para o FindRoots identificar raízes para objetos das atuais gerações condenadas. Apenas suportado no Windows.
GCHandles [-perdomínio] Exibe estatísticas sobre as alças do coletor de lixo no processo.

A opção -perdomain organiza as estatísticas por domínio de aplicativo.

Use o comando GCHandles para encontrar vazamentos de memória causados por vazamentos no identificador do coletor de lixo. Por exemplo, um vazamento de memória ocorre quando o código retém uma grande matriz porque uma alça de coletor de lixo forte ainda aponta para ela e a alça é descartada sem liberá-la.

Apenas suportado no Windows.
GCHandleLeaks Procura na memória quaisquer referências a identificadores de coletor de lixo fortes e fixados no processo e exibe os resultados. Se um identificador for encontrado, o comando GCHandleLeaks exibirá o endereço da referência. Se um identificador não for encontrado na memória, esse comando exibirá uma notificação. Apenas suportado no Windows.
Endereço GCInfo<MethodDesc><Endereço do código> Exibe dados que indicam quando os registros ou locais de pilha contêm objetos gerenciados. Se ocorrer uma coleta de lixo, o coletor deve conhecer os locais das referências a objetos para que possa atualizá-los com novos valores de ponteiro de objeto.
GCRoot [-nostacks] [-all] <Endereço do objeto> Exibe informações sobre referências (ou raízes) a um objeto no endereço especificado.

O comando GCRoot examina todo o heap gerenciado e a tabela de identificadores em busca de identificadores dentro de outros objetos e identificadores na pilha. Cada pilha é então pesquisada por ponteiros para objetos, e a fila do finalizador também é pesquisada.

Este comando não determina se uma raiz de pilha é válida ou é descartada. Use os comandos clrstack e U para desmontar o quadro ao qual o valor local ou argumento pertence para determinar se a raiz da pilha ainda está em uso.

A opção -nostacks restringe a pesquisa a alças de coletor de lixo e objetos acessíveis.

A opção -all força todas as raízes a serem exibidas em vez de apenas as raízes exclusivas.
Endereço do objeto GCWhere<> Exibe o local e o tamanho na pilha de coleta de lixo do argumento passado. Quando o argumento está no heap gerenciado, mas não é um endereço de objeto válido, o tamanho é exibido como 0 (zero).
Ajuda (soshelp) [<command>] [faq] Exibe todos os comandos disponíveis quando nenhum parâmetro é especificado ou exibe informações de ajuda detalhadas sobre o comando especificado.

O faq parâmetro exibe respostas para perguntas frequentes.
HeapStat [-inclUnrooted-iu | ] Exibe os tamanhos de geração para cada pilha e o espaço livre total em cada geração em cada pilha. Se a opção -inclUnroot for especificada, o relatório incluirá informações sobre os objetos gerenciados do heap de coleta de lixo que não está mais enraizado. Apenas suportado no Windows.
HistClear Libera todos os recursos usados pela família de Hist comandos.

Geralmente, você não precisa chamar HistClearexplicitamente , porque cada HistInit um limpa os recursos anteriores.
HistInit Inicializa as estruturas SOS a partir do log de estresse salvo no depurador.
HistObj<obj_address> Examina todos os registros de realocação de log de estresse e exibe a cadeia de relocações de coleta de lixo que podem ter levado ao endereço passado como um argumento.
HistObjEncontre<obj_address> Exibe todas as entradas de log que fazem referência a um objeto no endereço especificado.
Raiz de HistRoot<> Exibe informações relacionadas a promoções e realocações da raiz especificada.

O valor raiz pode ser usado para rastrear o movimento de um objeto através das coletas de lixo.
Endereço de código IP2MD (ip2md) <> Exibe a MethodDesc estrutura no endereço especificado no código que foi compilado em JIT.
ListNearObj (lno) <obj_address> Exibe os objetos anteriores e posteriores ao endereço especificado. O comando procura o endereço no heap de coleta de lixo que se parece com um início válido de um objeto gerenciado (com base em uma tabela de método válida) e o objeto que segue o endereço do argumento. Apenas suportado no Windows.
MinidumpMode [0] [1] Impede a execução de comandos inseguros ao usar um minidump.

Passe 0 para desativar esse recurso ou 1 para habilitá-lo. Por padrão, o valor MinidumpMode é definido como 0.

Os minidumps criados com o comando .dump /m ou .dump têm dados específicos do CLR limitados e permitem que você execute apenas um subconjunto de comandos SOS corretamente. Alguns comandos podem falhar com erros inesperados porque as áreas necessárias de memória não são mapeadas ou são apenas parcialmente mapeadas. Esta opção protege você contra a execução de comandos inseguros contra minidumps.

Apenas suportado com Windbg.
Name2EE (name2ee) nome<<>

-or-

Nome do módulo<Nome do tipo ou método>
Exibe a estrutura e MethodTable a EEClass estrutura para o tipo ou método especificado no módulo especificado.

O módulo especificado deve ser carregado no processo.

Para obter o nome de tipo adequado, procure o módulo usando o Ildasm.exe (IL Disassembler). Você também pode passar * como o parâmetro de nome do módulo para pesquisar todos os módulos gerenciados carregados. O parâmetro module name também pode ser o nome do depurador para um módulo, como mscorlib ou image00400000.

Este comando suporta a sintaxe do depurador do Windows de <module>!<type>. O tipo deve ser plenamente qualificado.
ObjSize [<Endereço do> objeto] | [-agregado] [-stat] Exibe o tamanho do objeto especificado. Se você não especificar nenhum parâmetro, o comando ObjSize exibirá o tamanho de todos os objetos encontrados em threads gerenciados, exibirá todas as alças do coletor de lixo no processo e totalizará o tamanho de todos os objetos apontados por essas alças. O comando ObjSize inclui o tamanho de todos os objetos filho, além do pai.

A opção -aggregate pode ser usada em conjunto com o argumento -stat para obter uma visão detalhada dos tipos que ainda estão enraizados. Usando !dumpheap -stat e !objsize -aggregate -stat, você pode determinar quais objetos não estão mais enraizados e diagnosticar vários problemas de memória.

Apenas suportado no Windows.
PrintException [-nested] [-lines] [<Endereço do objeto> de exceção]

-or-

>
Exibe e formata campos de qualquer objeto derivado da Exception classe no endereço especificado. Se você não especificar um endereço, o comando PrintException exibirá a última exceção lançada no thread atual.

A opção -nested exibe detalhes sobre objetos de exceção aninhados.

A opção -lines exibe informações de origem, se disponíveis.

Você pode usar esse comando para formatar e exibir o _stackTrace campo, que é uma matriz binária.
ProcInfo [-env] [-time] [-mem] Exibe variáveis de ambiente para o processo, tempo de CPU do kernel e estatísticas de uso de memória. Apenas suportado com Windbg.
Endereço RCWCleanupList<RCWCleanupList> Exibe a lista de wrappers chamáveis em tempo de execução no endereço especificado que estão aguardando limpeza. Apenas suportado com Windbg.
Endereço base<Nome do arquivo> Grava uma imagem, que é carregada na memória no endereço especificado, no arquivo especificado. Apenas suportado com Windbg.
SetHostRuntime [<diretório> de tempo de execução] Este comando define o caminho para o tempo de execução do .NET a ser usado para hospedar o código gerenciado que é executado como parte do SOS no depurador (lldb). O tempo de execução precisa ser pelo menos a versão 2.1.0 ou superior. Se houver espaços no diretório, ele precisa ser aspas (').

Normalmente, o SOS tenta encontrar um tempo de execução .NET instalado para executar seu código gerenciado automaticamente, mas esse comando estará disponível se falhar. O padrão é usar o mesmo tempo de execução (libcoreclr) que está sendo depurado. Use este comando se o tempo de execução padrão que está sendo depurado não estiver funcionando o suficiente para executar o código SOS ou se a versão for menor que 2.1.0.

Se você recebeu a seguinte mensagem de erro ao executar um comando SOS, use esse comando para definir o caminho para 2.1.0 ou superior .NET runtime.

(lldb) clrstack
Error: Fail to initialize CoreCLR 80004005 ClrStack failed

(lldb) sethostruntime /usr/share/dotnet/shared/Microsoft.NETCore.App/2.1.6

Você pode usar o "dotnet --info" em um shell de comando para encontrar o caminho de um tempo de execução .NET instalado.
> Habilita o suporte para download do servidor de símbolos.

A opção -ms permite o download do servidor público de símbolos da Microsoft.

A opção -disable ativa o suporte para download de símbolos.

A opção -cache<cache-path> especifica um diretório de cache de símbolos. O padrão é $HOME/.dotnet/symbolcache se não for especificado.

A opção -directory adiciona um caminho para procurar símbolos. Pode ser mais de um.

A opção -sympath adiciona caminhos de servidor, cache e diretório no formato de caminho de símbolo do Windows.

A opção -log permite o registro de download de símbolos.

A opção -loadsymbols tenta baixar os símbolos nativos do .NET para o tempo de execução. Suportado em lldb e dotnet-dump.
SOSFlush Libera um cache SOS interno.
SOSStatus [-reiniciar] Exibe o status SOS interno ou redefine o estado interno armazenado em cache.
StopOnException [-derived] [-create-create2 | ] <Número de pseudo-registro da exceção><> Faz com que o depurador pare quando a exceção especificada é lançada, mas continue em execução quando outras exceções são lançadas.

A opção derivada captura a exceção especificada e todas as exceções derivadas da exceção especificada.

Apenas suportado com Windbg.
SyncBlk [-todos | <número> syncblk] Exibe a estrutura especificada SyncBlock ou todas as SyncBlock estruturas. Se você não passar nenhum argumento, o comando SyncBlk exibirá a SyncBlock estrutura correspondente aos objetos que pertencem a um thread.

Uma SyncBlock estrutura é um contêiner para informações extras que não precisam ser criadas para cada objeto. Ele pode conter dados de interoperabilidade COM, códigos hash e informações de bloqueio para operações seguras para threads.
ThreadPool Exibe informações sobre o pool de threads gerenciados, incluindo o número de solicitações de trabalho na fila, o número de threads de porta de conclusão e o número de temporizadores.
Tópicos (clrthreads) [-live] [-special] Exibe todos os threads gerenciados no processo.

O comando Threads exibe a ID abreviada do depurador, a ID do thread CLR e a ID do thread do sistema operacional. Além disso, o comando Threads exibe uma coluna Domain que indica o domínio do aplicativo no qual um thread está sendo executado, uma coluna APT que exibe o modo de apartamento COM e uma coluna Exception que exibe a última exceção lançada no thread.

A opção -live exibe threads associados a um thread ao vivo.

A opção -special exibe todos os threads especiais criados pelo CLR. Os threads especiais incluem threads de coleta de lixo (na coleta de lixo simultânea e no servidor), threads auxiliares do depurador, threads do finalizador, AppDomain threads de descarga e threads de timer do pool de threads.
Campo de valor ThreadState < State> Exibe o estado do thread. O value parâmetro é o State valor do campo na saída do relatório Threads .
Token de nome do<> Transforma o token de metadados especificado no módulo especificado em uma MethodTable estrutura ou MethodDesc estrutura.

Você pode passar * para o parâmetro de nome do módulo para encontrar o que esse token mapeia em cada módulo gerenciado carregado. Você também pode passar o nome do depurador para um módulo, como mscorlib ou image00400000.
U [-gcinfo] [-ehinfo] [-n]> MethodDesc | <Endereço do código> Exibe uma desmontagem anotada de um método gerenciado especificado por um MethodDesc ponteiro de estrutura para o método ou por um endereço de código dentro do corpo do método. O comando U exibe todo o método do início ao fim, com anotações que convertem tokens de metadados em nomes.

A opção -gcinfo faz com que o comando U exiba a GCInfo estrutura do método.

A opção -ehinfo exibe informações de exceção para o método. Você também pode obter essas informações com o comando EHInfo .

A opção -n desativa a exibição de nomes de arquivos de origem e números de linha. Se o depurador tiver a opção SYMOPT_LOAD_LINES especificada, o SOS procurará os símbolos de cada quadro gerenciado e, se for bem-sucedido, exibirá o nome do arquivo de origem e o número da linha correspondentes. Você pode especificar a opção -n para desabilitar esse comportamento.
VerifyHeap Verifica a pilha do coletor de lixo em busca de sinais de corrupção e exibe todos os erros encontrados.

As corrupções de heap podem ser causadas por chamadas de invocação de plataforma que são construídas incorretamente.
Endereço do objeto VerifyObj<> Verifica o objeto que é passado como um argumento para sinais de corrupção. Apenas suportado no Windows.
VMMap Atravessa o espaço de endereço virtual e exibe o tipo de proteção aplicada a cada região. Apenas suportado com Windbg.
VMStat Fornece uma visão resumida do espaço de endereço virtual, ordenado por cada tipo de proteção aplicada a essa memória (livre, reservado, confirmado, privado, mapeado, imagem). A coluna TOTAL exibe o resultado da coluna MÉDIA multiplicada pela coluna BLK COUNT. Apenas suportado com Windbg.

Ponto-Dump

Para obter uma lista de comandos SOS disponíveis com dotnet-dump analyzeo , consulte dotnet-dump.

Depurador do Windows

Você também pode usar a extensão de depuração SOS carregando-a no depurador WinDbg/dbg e executando comandos dentro do depurador do Windows. Os comandos SOS podem ser usados em processos ao vivo ou dumps.

Depurador LLDB

Para obter instruções sobre como configurar o SOS para LLDB, consulte dotnet-sos. Os comandos SOS podem ser usados em processos ao vivo ou dumps.

Por padrão, você pode acessar todos os comandos SOS digitando: sos [command_name]. No entanto, os comandos comuns foram aliased para que você não precise do prefixo sos :

Comando Function
analyzeoom Exibe as informações do último OOM que ocorreu em uma solicitação de alocação para o heap GC.
bpmd Cria um ponto de interrupção no método gerenciado especificado no módulo especificado.
clrmodules Lista os módulos gerenciados no processo.
clrstack Fornece um rastreamento de pilha somente de código gerenciado.
clrthreads Lista os threads gerenciados que estão em execução.
clru Exibe uma desmontagem anotada de um método gerenciado.
dbgout Habilita/desabilita (-off) o registro interno do SOS.
dso Exibe todos os objetos gerenciados encontrados dentro dos limites da pilha atual.
dumpalc Exibe detalhes sobre um AssemblyLoadContext colecionável para o qual o objeto especificado é carregado.
dumparray Exibe detalhes sobre uma matriz gerenciada.
dumpasync Exibe informações sobre máquinas de estado assíncronas na pilha coletada de lixo.
dumpassembly Exibe detalhes sobre uma montagem.
dumpclass Exibe informações sobre a EEClass estrutura no endereço especificado.
dumpconcurrentdictionary Exibe conteúdo de dicionário simultâneo.
dumpconcurrentqueue Exibe o conteúdo da fila simultânea.
dumpdelegate Exibe informações sobre um delegado.
dumpdomain Exibe informações sobre todos os assemblies em todos os AppDomains ou no especificado.
dumpgcdata Exibe informações sobre os dados GC.
dumpgen Exibe o conteúdo de pilha para a geração especificada.
dumpheap Exibe informações sobre a pilha coletada de lixo e estatísticas de coleta sobre objetos.
dumpil Exibe a linguagem intermediária comum (CIL) associada a um método gerenciado.
dumplog Grava o conteúdo de um log de estresse na memória no arquivo especificado.
dumpmd Exibe informações sobre a MethodDesc estrutura no endereço especificado.
dumpmodule Exibe informações sobre o módulo no endereço especificado.
dumpmt Exibe informações sobre a tabela de método no endereço especificado.
dumpobj Exibe informações do objeto no endereço especificado.
dumpruntimetypes Localiza todos os objetos System.RuntimeType no heap GC e imprime o nome do tipo e MethodTable a que eles se referem também.
dumpsig Despeja a assinatura de um método ou campo especificado por <sigaddr> <moduleaddr>.
dumpsigelem Despeja um único elemento de um objeto de assinatura.
dumpstack Exibe um rastreamento de pilha nativo e gerenciado.
dumpstackobjects Exibe todos os objetos gerenciados encontrados dentro dos limites da pilha atual.
dumpvc Exibe informações sobre os campos de uma classe de valor.
eeheap Exibe informações sobre a memória de processo consumida por estruturas de dados de tempo de execução internas.
eestack É executado dumpstack em todos os threads no processo.
eeversion Exibe informações sobre as versões de tempo de execução e SOS.
ehinfo Exibe os blocos de tratamento de exceção em um método JIT-ed.
finalizequeue Exibe todos os objetos registrados para finalização.
findappdomain Tenta resolver o AppDomain de um objeto GC.
findroots Localiza e exibe raízes de objeto em coleções GC.
gchandles Exibe estatísticas sobre as alças do coletor de lixo no processo.
gcheapstat Exibe estatísticas sobre o coletor de lixo.
gcinfo Exibe a codificação JIT GC para um método.
gcroot Exibe informações sobre referências (ou raízes) ao objeto no endereço especificado.
gcwhere Exibe o local no heap GC do endereço especificado.
histclear Libera todos os recursos usados pela família de comandos Hist.
histinit Inicializa as estruturas SOS a partir do log de estresse salvo no depurador.
histobj Examina todos os registros de realocação de log de estresse e exibe a cadeia de relocações de coleta de lixo que podem ter levado ao endereço passado como um argumento.
histobjfind Exibe todas as entradas de log que fazem referência ao objeto no endereço especificado.
histroot Exibe informações relacionadas a promoções e realocações da raiz especificada.
histstats Exibe estatísticas de log de estresse.
ip2md Exibe a MethodDesc estrutura no endereço especificado no código que foi compilado em JIT.
listnearobj Exibe o objeto que precede e sucede o endereço especificado.
loadsymbols Carrega os símbolos do módulo nativo do .NET.
logging Habilita/desabilita o registro interno de SOS.
name2ee Exibe as MethodTable estruturas e EEClass para o tipo ou método especificado no módulo especificado.
objsize Exibe o tamanho do objeto especificado.
parallelstacks Exibe a pilha de threads mesclados de forma semelhante ao painel 'Pilhas paralelas' do Visual Studio.
pathto Exibe o caminho GC de <root> para <target>.
pe Exibe e formata campos de qualquer objeto derivado da Exception classe no endereço especificado.
printexception Exibe e formata campos de qualquer objeto derivado da Exception classe no endereço especificado.
runtimes Lista os tempos de execução no destino ou altera o tempo de execução padrão.
stoponcatch O processo de destino será interrompido na próxima vez que uma exceção gerenciada for detetada durante a execução.
setclrpath Define o caminho para carregar arquivos coreclr dac/dbi. setclrpath <path>.
sethostruntime Define ou exibe o diretório de tempo de execução do .NET a ser usado para executar código gerenciado no SOS.
setsymbolserver Habilita o suporte ao servidor de símbolos.
setsostid Define o índice tid/thread atual do sistema operacional em vez de usar o lldb fornecido. setsostid <tid> <index>.
sos Executa vários comandos de depuração coreclr. Use a sintaxe sos <command-name> <args>. Para obter mais informações, consulte 'soshelp'.
soshelp Exibe todos os comandos disponíveis quando nenhum parâmetro é especificado ou exibe informações de ajuda detalhadas sobre o comando especificado: soshelp <command>.
syncblk Exibe as informações do titular do SyncBlock.
taskstate Exibe um estado Task em um formato legível por humanos.
threadpool Exibe informações sobre o pool de threads de tempo de execução.
threadpoolqueue Exibe itens de trabalho do pool de threads enfileirados.
threadstate Pretty imprime o significado de um estado de threads.
timerinfo Exibe informações sobre temporizadores em execução.
token2ee Exibe a estrutura MethodTable e a estrutura MethodDesc para o token e o módulo especificados.
traverseheap Grava informações de pilha em um arquivo em um formato compreendido pelo CLR Profiler.
verifyheap Verifica a pilha GC em busca de sinais de corrupção.
verifyobj Verifica o objeto que é passado como um argumento para sinais de corrupção.

Exemplo de uso do Windbg/cdb

Comando Description
!dumparray -start 2 -length 5 -details 00ad28d0 Exibe o conteúdo de uma matriz no endereço 00ad28d0. A exibição começa a partir do segundo elemento e continua por cinco elementos.
!dumpassembly 1ca248 Exibe o conteúdo de uma montagem no endereço 1ca248.
!dumpheap Exibe informações sobre a pilha do coletor de lixo.
!DumpLog Grava o conteúdo do log de estresse na memória em um arquivo (padrão) chamado StressLog.txt no diretório atual.
!dumpmd 902f40 Exibe a MethodDesc estrutura no endereço 902f40.
!dumpmodule 1caa50 Exibe informações sobre um módulo no endereço 1caa50.
!DumpObj a79d40 Exibe informações sobre um objeto no endereço a79d40.
!DumpVC 0090320c 00a79d9c Exibe os campos de uma classe de valor no endereço 00a79d9c usando a tabela de método no endereço 0090320c.
!eeheap -GC Exibe a memória de processo usada pelo coletor de lixo.
!finalizequeue Exibe todos os objetos agendados para finalização.
!findappdomain 00a79d98 Determina o domínio do aplicativo de um objeto no endereço 00a79d98.
!gcinfo 5b68dbb8 Exibe todas as alças do coletor de lixo no processo atual.
!name2ee unittest.exe MainClass.Main Exibe as MethodTable estruturas e EEClass para o Main método na classe MainClass no módulo unittest.exe.
!token2ee unittest.exe 02000003 Exibe informações sobre o token de metadados no endereço 02000003 no módulo unittest.exe.

Exemplo de uso do LLDB

Comando Description
dumparray -start 2 -length 5 -details 00ad28d0 Exibe o conteúdo de uma matriz no endereço 00ad28d0. A exibição começa a partir do segundo elemento e continua por cinco elementos.
dumpassembly 1ca248 Exibe o conteúdo de uma montagem no endereço 1ca248.
dumpheap Exibe informações sobre a pilha do coletor de lixo.
dumplog Grava o conteúdo do log de estresse na memória em um arquivo (padrão) chamado StressLog.txt no diretório atual.
dumpmd 902f40 Exibe a MethodDesc estrutura no endereço 902f40.
dumpmodule 1caa50 Exibe informações sobre um módulo no endereço 1caa50.
dumpobj a79d40 Exibe informações sobre um objeto no endereço a79d40.
dumpvc 0090320c 00a79d9c Exibe os campos de uma classe de valor no endereço 00a79d9c usando a tabela de método no endereço 0090320c.
eeheap -gc Exibe a memória de processo usada pelo coletor de lixo.
findappdomain 00a79d98 Determina o domínio do aplicativo de um objeto no endereço 00a79d98.
gcinfo 5b68dbb8 Exibe todas as alças do coletor de lixo no processo atual.
name2ee unittest.exe MainClass.Main Exibe as MethodTable estruturas e EEClass para o Main método na classe MainClass no módulo unittest.exe.
token2ee unittest.exe 02000003 Exibe informações sobre o token de metadados no endereço 02000003 no módulo unittest.exe.
clrthreads Exibe os threads gerenciados.

Consulte também