Compartilhar via


Extensões do depurador do .NET

As extensões do depurador do .NET permitem exibir informações sobre o código em execução dentro do runtime do .NET, tanto em processos dinâmicos quanto em despejos. As extensões são pré-instaladas com windbg e podem ser baixadas para uso com o LLDB. Você pode usar as extensões do depurador do .NET para:

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

As extensões do depurador do .NET incluem comandos da ferramenta do dotnet-sos existente, bem como novos comandos. Um conjunto limitado de comandos também agora tem suporte para o runtime do AOT nativo.

Sintaxe

Sob o windbg: ![command] [options]

Em LLDB: 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 comando individual está disponível usando soshelp <command>.

Comando Descrição
bpmd [-nofuturemodule] [<nome do método><nome do método>] [-md<MethodDesc>] -list-clear<número de ponto de interrupção pendente>-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, esse comando aguardará uma notificação de que o módulo foi carregado e JIT (just-in-time) compilado antes de criar um ponto de interrupção.

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

A opção de lista de gera uma lista de todos os pontos de interrupção pendentes. Se um ponto de interrupção pendente tiver uma 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 uma ID de módulo zero, esse ponto de interrupção se aplicará a 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] [-all] Fornece apenas um rastreamento de pilha 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. As extensões do depurador .NET não podem recuperar nomes locais, portanto, a saída para nomes locais está no formato <endereço local>=<valor>.

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

A opção -n desabilita a exibição de nomes de arquivo de origem e números de linha. Se o depurador tiver a opção SYMOPT_LOAD_LINES especificada, o SOS procurará os símbolos para cada quadro gerenciado e, se bem-sucedido, exibirá o nome do arquivo de origem e o número de 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 intercalando-os com os quadros gerenciados e o nome do assembly e o deslocamento de função para os quadros gerenciados. Essa opção não exibe quadros nativos quando usada com dotnet-dump.

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

A opção -all despeja as pilhas de todos os threads gerenciados.
COMState Lista o modelo de apartamento COM para cada thread e um ponteiro de Context, se disponível. Esse comando só tem suporte no Windows.
DumpArray [-start<startIndex>] [-length<length>] [-details] [-nofields] <> de objeto de matriz

-ou-

DA [-start<startIndex>] [-length<length>] [-details] [-nofields] array object address>
Examina elementos de um objeto de matriz.

A opção -start especifica o índice inicial no qual exibir elementos.

A opção de comprimento especifica quantos elementos serão mostrados.

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

A opção -nofields impede que as matrizes sejam exibidas. Essa opção só estará disponível quando a opção -details for especificada.
DumpAsync (dumpasync ) [-mt<methodTable address>] [-type<partial type name>] [-waiting] [-roots] DumpAsync atravessa o heap coletado por lixo e procura objetos que representam computadores de estado assíncrono, conforme criado quando o estado de um método assíncrono é transferido para o heap. Esse comando reconhece computadores de estado assíncrono definidos 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 computador de estado assíncrono encontrado. Estes detalhes incluem:
- Uma linha para o tipo do objeto de computador 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 computador de estado, conforme contido no objeto.
- Uma listagem de cada campo no computador de estado.
- Uma linha para uma continuação desse objeto de computador de estado, se um ou mais tiver sido registrado.
- Raízes de GC descobertas para este objeto de computador de estado assíncrono.

Com suporte para aplicativos AOT nativos.
de assemblyDumpAssembly Exibe informações sobre um assembly.

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

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

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

Use o comandoDumpMT, DumpObj, Name2EEou token2EE para obter um endereço de estrutura .
DumpDomain [<endereço de domínio>] Enumera cada objeto Assembly carregado dentro do endereço do objeto AppDomain especificado. Quando chamado sem parâmetros, o comando DumpDomain lista todos os objetos AppDomain em um processo. Como o .NET (Core) tem apenas um AppDomain, DumpDomain retorna apenas um objeto.
DumpHeap [-stat] [-strings] [-short] [-min<size>] [-max<size>] [-thinlock] [-startAtLowerBound] [-mt<methodTable address>] [-type<partial type name>] [start [end]] Exibe informações sobre o heap coletado por lixo e estatísticas de coleta sobre objetos.

O comando DumpHeap exibirá um aviso se detectar fragmentação excessiva no heap 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 de valor de cadeia de caracteres estatística.

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

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

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

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

A opção -startAtLowerBound força a caminhada do heap a começar no limite inferior de um intervalo de endereços fornecido. Durante a fase de planejamento, o heap geralmente não é andável porque os objetos estão sendo movidos. Essa opção força 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 memória no endereço de um objeto inválido para localizar manualmente a próxima tabela de métodos. 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 de MethodTable especificada.

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

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

O parâmetro end interrompe a listagem no endereço especificado.

Com suporte para aplicativos AOT nativos.
dumpil<> de objeto DynamicMethod gerenciado | <> de ponteiro DynamicMethodDesc | <> de ponteiro MethodDesc Exibe a CIL (linguagem intermediária) comum associada a um método gerenciado.

O CIL dinâmico é emitido de forma diferente do CIL que é carregado de um assembly. CIL dinâmico refere-se a objetos em uma matriz de objetos gerenciados em vez de tokens de metadados.
de DumpLock [--allthreads] [--waits] Exibe informações sobre objetos System.Threading.Lock, como aqueles que estão sendo mantidos por threads (padrão) ou aqueles que estão sendo aguardados por threads.
de DumpLog [-addr<addressOfStressLog>] [<Filename>] 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 log de estresse na memória ajuda você a diagnosticar falhas de estresse sem usar 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.

Com suporte para aplicativos AOT nativos.
endereçoMethodDesc do DumpMD Exibe informações sobre uma estrutura de MethodDesc no endereço especificado.

Você pode usar o comando IP2MD para obter o endereço da estrutura MethodDesc de uma função gerenciada.
dumpmt [-MD] <> de endereço methodTable Exibe informações sobre uma tabela de métodos 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.
DumpModule [-mt] endereço do módulo <> 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 DumpDomain ou o comando DumpAssembly para recuperar o endereço de um módulo.
DumpObj [-nofields] <endereço do objeto>

-ou-

de endereço do objeto DO
Exibe informações sobre um objeto no endereço especificado. O comando DumpObj exibe os campos, as informações da estrutura EEClass, a tabela de métodos 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 campos do objeto sejam exibidos, ele é útil para objetos como String.
DumpRuntimeTypes Exibe os objetos de tipo de runtime no heap do coletor de lixo e lista seus nomes de tipo associados e tabelas de método.
DumpStack [-EE] [-n] [ de pilha de[pilha]] Exibe um rastreamento de pilha.

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

A opção -n desabilita a exibição de nomes de arquivo de origem e números de linha. Se o depurador tiver a opção SYMOPT_LOAD_LINES especificada, o SOS procurará os símbolos para cada quadro gerenciado e, se for bem-sucedido, exibirá o nome do arquivo de origem e o número de 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 estrutura de Sig no endereço especificado.
DumpSigElem<sigaddr><moduleaddr> 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 tiver sido corrompida de alguma forma, você poderá usar DumpSigElem para ler as partes válidas dela.
DumpStackObjects [-verify] [ de pilha de[de pilha de]]

-ou-

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

A opção -verify valida cada campo de 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çomethodTable doDumpVC 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étodos como seu primeiro campo.
EEHeap [-gc] [-loader] Exibe informações sobre a memória do processo consumida por estruturas de dados internas de runtime.

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

As informações do coletor de lixo listam os intervalos de cada segmento no heap gerenciado. Se o ponteiro estiver dentro de um intervalo de segmento fornecido 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:

Threads que tomaram um bloqueio.

Threads que foram paralisados para permitir uma coleta de lixo.

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

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

A opção -allReady exibe todos os objetos que estão prontos para finalização, independentemente de já estarem marcados pela coleta de lixo, ou serão 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 cara, pois verifica se todos os objetos nas filas finalizáveis ainda estão enraizados.

A opção -short limita a saída ao endereço de cada objeto. Se ele for usado com -allReady, ele enumera todos os objetos que têm um finalizador que não estão mais enraizados. Se for usado de forma independente, ele listará todos os objetos nas filas finalizáveis e "prontas para finalização".
endereço do objeto<FindAppDomain> Determina o domínio do aplicativo de um objeto no endereço especificado.
FindRoots-gen<N> | -gen qualquer |<endereço do objeto> Faz com que o depurador interrompa o depurador na próxima coleção da geração especificada. O efeito é redefinido assim que a interrupção ocorre. Para interromper a próxima coleção, você precisa reemissar o comando. O endereço do objeto forma desse comando é usado após a interrupção causada pelo de -gen ou -gen qualquer ocorreu. Nesse momento, o depurador está no estado certo para findRoots identificar raízes para objetos das gerações condenadas atuais. Só há suporte no Windows.
GCHandles [-perdomain] Exibe estatísticas sobre identificadores de coletor de lixo no processo.

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

Use o comando GCHandles para localizar vazamentos de memória causados por vazamentos de identificador de 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 o identificador é descartado sem liberá-lo.

Só há suporte no Windows.
GCHandleLeaks Pesquisa memória em busca de 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. Só há suporte no Windows.
endereçoMethodDesc do GCInfoEndereço de código Exibe dados que indicam quando registros ou locais de pilha contêm objetos gerenciados. Se ocorrer uma coleta de lixo, o coletor deverá saber os locais das referências aos objetos para que possa atualizá-los com novos valores de ponteiro de objeto.
GCRoot [-nostacks] [-all] <Object address> 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 para identificadores dentro de outros objetos e identificadores na pilha. Cada pilha é pesquisada em busca de ponteiros para objetos e a fila do finalizador também é pesquisada.

Esse 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 de argumento pertence para determinar se a raiz da pilha ainda está em uso.

A opção -nostacks restringe a pesquisa a identificadores 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 únicas.
endereço do objeto GCWhere<> Exibe o local e o tamanho no heap 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).
help (soshelp) [do comando] [] Exibe todos os comandos disponíveis quando nenhum parâmetro é especificado ou exibe informações detalhadas de ajuda sobre o comando especificado.

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

Geralmente, você não precisa chamar explicitamente HistClear, pois cada HistInit limpa os recursos anteriores.
HistInit Inicializa as estruturas SOS do log de estresse salvas na depuração.
<obj_address> HistObj Examina todos os registros de realocação do log de estresse e exibe a cadeia de realocações de coleta de lixo que pode ter levado ao endereço passado como um argumento.
<obj_address> HistObjFind Exibe todas as entradas de log que fazem referência a um objeto no endereço especificado.
raizHistRoot Exibe informações relacionadas a promoções e realocações da raiz especificada.

O valor raiz pode ser usado para acompanhar o movimento de um objeto por meio das coletas de lixo.
IP2MD (ip2md) <endereço de código> Exibe a estrutura de MethodDesc no endereço especificado no código que foi compilado por JIT.
ListNearObj (lno) <obj_address> Exibe os objetos anteriores e seguindo o endereço especificado. O comando procura o endereço no heap de coleta de lixo que parece 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. Só há suporte no Windows.
minidumpMode [0] [1] Impede a execução de comandos não seguros ao usar um minidump.

Passe 0 para desabilitar esse recurso ou 1 para habilitar esse recurso. Por padrão, o valor minidumpMode é definido como 0.

Minidumps criados com o comando .dump /m ou comando .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 da memória não são mapeadas ou apenas parcialmente mapeadas. Essa opção protege você contra a execução de comandos não seguros contra minidumps.

Só há suporte com o Windbg.
name2EE (name2ee) <nome do módulo><tipo ou nome do método>

-ou-

nome do módulo<Name2EE>!<tipo ou nome do método>
Exibe a estrutura MethodTable e a estrutura EEClass 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, navegue pelo módulo usando oIldasm.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 nome do módulo parâmetro também pode ser o nome do depurador para um módulo, como mscorlib ou image00400000.

Esse comando dá suporte à sintaxe do depurador do Windows de <module>!<type>. O tipo deve ser totalmente qualificado.
ObjSize [<Endereço do objeto>] | [-aggregate] [-stat] Exibe o tamanho do objeto especificado. Se você não especificar parâmetros, 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 esses identificadores. O comando ObjSize inclui o tamanho de todos os objetos filho, além do pai.

A opção -aggregate pode ser usada 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.

Só há suporte no Windows.
PrintException [-aninhado] [-lines] [<endereço do objeto Exception>]

-ou-

pe [-aninhado] [do objeto exception]
Exibe e formata campos de qualquer objeto derivado da classe Exception no endereço especificado. Se você não especificar um endereço, o comando PrintException exibirá a última exceção gerada no thread atual.

A opção aninhada 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 campo _stackTrace, 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. Só há suporte com o Windbg.
endereço RCWCleanupList<RCWCleanupList> Exibe a lista de wrappers callable de runtime no endereço especificado que aguarda a limpeza. Só há suporte com o Windbg.
de endereço Base do SaveModule Grava uma imagem, que é carregada na memória no endereço especificado, no arquivo especificado. Só há suporte com o Windbg.
SetHostRuntime [<runtime-directory>] Esse comando define o caminho para o runtime do .NET a ser usado para hospedar o código gerenciado executado como parte do SOS no DEPURADOR (LLDB). O runtime precisa ser pelo menos a versão 2.1.0 ou superior. Se houver espaços no diretório, ele precisará ser entre aspas simples (').

Normalmente, o SOS tenta localizar um runtime do .NET instalado para executar seu código gerenciado automaticamente, mas esse comando estará disponível se falhar. O padrão é usar o mesmo runtime (libcoreclr) sendo depurado. Use esse comando se o runtime 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 este comando para definir o caminho como 2.1.0 ou maior runtime do .NET.

(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 runtime do .NET instalado.
SetSymbolServer [-ms] [-disable] [-log] [-loadsymbols] [-log] [-loadsymbols] [ -cachede caminho de cache ] [-directorysearch-directory] [-sympathwindows-symbol-path] [symbol-server-URL] Habilita o suporte de download do servidor de símbolos.

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

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

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

A opção -directory adiciona um caminho para pesquisar 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 habilita o registro em log de download de símbolos.

A opção -loadsymbols tenta baixar os símbolos nativos do .NET para o runtime. Com suporte no lldb e no dotnet-dump.
SOSFlush Libera um cache interno do SOS.
SOSStatus [-reset] Exibe o status interno do SOS ou redefine o estado armazenado em cache interno.
StopOnException [-derivado] [-create | -create2] <Exception><Pseudo-register number> Faz com que o depurador pare quando a exceção especificada for lançada, mas continue em execução quando outras exceções forem lançadas.

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

Só há suporte com o Windbg.
SyncBlk [-all | <syncblk number>] Exibe a estrutura de SyncBlock especificada ou todas as estruturas SyncBlock. Se você não passar argumentos, o comando SyncBlk exibirá a estrutura de SyncBlock correspondente a objetos pertencentes a um thread.

Uma estrutura SyncBlock é 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 de hash e informações de bloqueio para operações thread-safe.
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.
Threads (clrthreads) [-live] [-special] Exibe todos os threads gerenciados no processo.

O comando Threads exibe a ID de taquigrafia do depurador, a ID do thread CLR e a ID do thread do sistema operacional. Além disso, o comando Threads exibe uma coluna de domínio 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 exceção que exibe a última exceção lançada no thread.

A opção -live exibe threads associados a um thread dinâmico.

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 de servidor), threads auxiliares do depurador, threads de finalizador, AppDomain descarregar threads e threads de temporizador do pool de threads.

Com suporte para aplicativos AOT nativos.
de valor de estado do ThreadState Exibe o estado do thread. O parâmetro é o valor do campo na saída do relatório threads .
nome do módulo<Token2EE><> Transforma o token de metadados especificado no módulo especificado em uma estrutura MethodTable ou estrutura MethodDesc.

Você pode passar * para o parâmetro de nome do módulo para localizar 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 | de endereço de código Exibe uma desmontagem anotada de um método gerenciado especificado por um ponteiro de estrutura MethodDesc 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 estrutura de 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 desabilita a exibição de nomes de arquivo 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 bem-sucedido, exibirá o nome do arquivo de origem e o número de linha correspondentes. Você pode especificar a opção -n para desabilitar esse comportamento.
VerifyHeap Verifica o heap do coletor de lixo em busca de sinais de corrupção e exibe os erros encontrados.

As corrupçãos de heap podem ser causadas por chamadas de invocação de plataforma que são construídas incorretamente.

Com suporte para aplicativos AOT nativos.
de endereço de objetoVerifyObj Verifica o objeto que é passado como um argumento para sinais de corrupção. Só há suporte no Windows.
de VMap Percorre o espaço de endereço virtual e exibe o tipo de proteção aplicado a cada região. Só há suporte com o Windbg.
VMStat Fornece uma exibição resumida do espaço de endereço virtual, ordenado por cada tipo de proteção aplicada a essa memória (livre, reservada, confirmada, privada, mapeada, imagem). A coluna TOTAL exibe o resultado da coluna AVERAGE multiplicada pela coluna BLK COUNT. Só há suporte com o Windbg.

Depurador do Windows

Você também pode usar as extensões do depurador .NET carregando-as no do depurador WinDbg/dbg e executando comandos no depurador do Windows. Os comandos podem ser usados em processos dinâmicos ou despejos.

O windbg deve carregar a extensão automaticamente sempre que o processo que está sendo depurado contiver o runtime do .NET (coreclr.dll ou libcoreclr.so).

Depurador DO LLDB

Para obter instruções sobre como configurar as extensões de depurador do .NET para LLDB, consulte dotnet-debugger-extensions. Os comandos podem ser usados em processos dinâmicos ou despejos.

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

Comando Função
analyzeoom Exibe as informações do último OOM que ocorreu em uma solicitação de alocação para o heap do 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 apenas um rastreamento de pilha 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 log interno do SOS.
dso Exibe todos os objetos gerenciados encontrados dentro dos limites da pilha atual.
dumpalc Exibe detalhes sobre um AssemblyLoadContext colecionável ao qual o objeto especificado é carregado.
dumparray Exibe detalhes sobre uma matriz gerenciada.
dumpasync Exibe informações sobre computadores de estado assíncrono no heap coletado por lixo.
dumpassembly Exibe detalhes sobre um assembly.
dumpclass Exibe informações sobre a estrutura de EEClass 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 do GC.
dumpgen Exibe o conteúdo do heap para a geração especificada.
dumpheap Exibe informações sobre as estatísticas de heap e coleta coletadas de lixo sobre objetos.
dumpil Exibe a CIL (linguagem intermediária) comum associada a um método gerenciado.
dumplock Exibe informações sobre objetos System.Threading.Lock, como aqueles que estão sendo mantidos por threads (padrão) ou aqueles que estão sendo aguardados por threads. Esse comando está disponível apenas em extensões de depurador do .NET .
dumplog Grava o conteúdo de um log de estresse na memória no arquivo especificado.
dumpmd Exibe informações sobre a estrutura de MethodDesc 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étodos no endereço especificado.
dumpobj Exibe informações do objeto no endereço especificado.
dumpruntimetypes Localiza todos os objetos System.RuntimeType no heap do GC e imprime o nome do tipo e MethodTable 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 do processo consumida por estruturas de dados internas de runtime.
eestack Executa dumpstack em todos os threads no processo.
eeversion Exibe informações sobre o runtime e as versões do SOS.
ehinfo Exibe os blocos de tratamento de exceção em um método com JIT.
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 identificadores de coletor de lixo no processo.
gcheapstat Exibe estatísticas sobre 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 do GC do endereço especificado.
histclear Libera todos os recursos usados pela família de comandos Hist.
histinit Inicializa as estruturas SOS do log de estresse salvas na depuração.
histobj Examina todos os registros de realocação do log de estresse e exibe a cadeia de realocações de coleta de lixo que pode 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 estrutura de MethodDesc no endereço especificado no código que foi compilado por JIT.
listnearobj Exibe o objeto anterior e o endereço especificado com êxito.
loadsymbols Carrega os símbolos de módulo nativo do .NET.
logging Habilita/desabilita o log interno do SOS.
name2ee Exibe as estruturas MethodTable 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 do GC de <root> para <target>.
pe Exibe e formata campos de qualquer objeto derivado da classe Exception no endereço especificado.
printexception Exibe e formata campos de qualquer objeto derivado da classe Exception no endereço especificado.
runtimes Lista os runtimes no destino ou altera o runtime padrão.
stoponcatch O processo de destino será interrompido na próxima vez que uma exceção gerenciada for capturada durante a execução.
setclrpath Define o caminho para carregar arquivos dac/dbi coreclr. setclrpath <path>.
sethostruntime Define ou exibe o diretório de runtime do .NET a ser usado para executar o código gerenciado no SOS.
setsymbolserver Habilita o suporte ao servidor de símbolos.
setsostid Define o índice tid/thread do sistema operacional atual em vez de usar o que o LLDB fornece. setsostid <tid> <index>.
sos Executa vários comandos de depuração de 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 detalhadas de ajuda sobre o comando especificado: soshelp <command>.
syncblk Exibe as informações do titular do SyncBlock.
taskstate Exibe um estado de tarefa em um formato legível humano.
threadpool Exibe informações sobre o pool de threads de runtime.
threadpoolqueue Exibe itens de trabalho do pool de threads enfileirados.
threadstate Imprime bastante o significado de um estado de threads.
timerinfo Exibe informações sobre a execução de temporizadores.
token2ee Exibe a estrutura MethodTable e a estrutura MethodDesc para o token e o módulo especificados.
traverseheap Grava informações de heap em um arquivo em um formato compreendido pelo CLR Profiler.
verifyheap Verifica o heap do GC em busca de sinais de corrupção.
verifyobj Verifica o objeto que é passado como um argumento para sinais de corrupção.

Uso de exemplo de windbg/cdb

Comando Descrição
!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 para cinco elementos.
!dumpassembly 1ca248 Exibe o conteúdo de um assembly no endereço 1ca248.
!dumpheap Exibe informações sobre o heap 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 estrutura de MethodDesc 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étodos no endereço 0090320c.
!eeheap -gc Exibe a memória do 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 estruturas MethodTable e EEClass para o método Main no MainClass de classe 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.

Uso de exemplo do LLDB

Comando Descrição
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 para cinco elementos.
dumpassembly 1ca248 Exibe o conteúdo de um assembly no endereço 1ca248.
dumpheap Exibe informações sobre o heap 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 estrutura de MethodDesc 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étodos no endereço 0090320c.
eeheap -gc Exibe a memória do 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 estruturas MethodTable e EEClass para o método Main no MainClass de classe 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