Ler em inglês

Partilhar via


Extensões do depurador .NET

As extensões do depurador .NET permitem exibir informações sobre o código que está sendo executado dentro do tempo de execução do .NET, tanto em processos em tempo real quanto em dumps. As extensões são pré-instaladas com Windbge podem ser baixadas para uso com LLDB. Você pode usar as extensões do depurador .NET 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.

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

Sintaxe

Sob windbg: ![command] [options]

No âmbito do 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. Ajuda de comando individual está disponível usando soshelp <command>.

Comando Descrição
bpmd [-nofuturemodule] [<nome do módulo><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, 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, -cleare -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 os] 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. 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 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-dump.

A opção -r despeja os registradores de 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 Context, se disponível. Este comando só é suportado no Windows.
DumpArray [-start<startIndex>] [-length<length>] [-details] [-nofields] <array object address>

-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 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<MethodTable address>] [-type<partial type name>] [-waiting] [-roots] DumpAsync atravessa a pilha coletada de lixo e procura objetos que representam máquinas de estado assíncronas como criadas quando o estado de um método assíncrono é transferido para a pilha. Este comando reconhece máquinas de estado assíncrono 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. Esses 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.

Suporte para aplicativos AOT nativos.
Endereço de montagem<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 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 DumpMT, DumpObj, Name2EEou comando Token2EE para obter um endereço de estrutura EEClass.
DumpDomain [<endereço de domínio>] Enumera cada objeto Assembly que é carregado dentro do endereço de 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 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. Este comando permite canalizar 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 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 informa ThinLocks. Para obter mais informações, consulte o comando SyncBlk.

A opção -startAtLowerBound força a caminhada de 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 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 MethodTable especificada.

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

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

O parâmetro end para de listar no endereço especificado.

Suporte para aplicativos AOT nativos.
de objeto DumpILManaged DynamicMethod | de 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.
DumpLock [--allthreads] [--espera] 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.
DumpLog [-addr<addressOfStressLog>] [<Nome do arquivo>] 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 -addr opcional permite especificar um log de estresse diferente do log padrão.

Suporte para aplicativos AOT nativos.
DumpMD<endereço MethodDesc> 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] <endereço 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.
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 comando DumpAssembly para recuperar o endereço de um módulo.
DumpObj [-nofields] <endereço do objeto>

-ou-

FAZER<endereço de objeto>
Exibe informações sobre um objeto no endereço especificado. O comando DumpObj exibe os campos, as informações de estrutura EEClass, 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] [topstack [bottomstack]] 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 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<sigaddr><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 foi corrompida de alguma forma, você pode usar DumpSigElem para ler as partes válidas dela.
DumpStackObjects [-verify] [topstack [bottomstack]]

-ou-

DSO [-verify] [topstack [bottomstack]]
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) junto com o comando clrstack para determinar os valores de variáveis e parâmetros locais.
DumpVC<MethodTable endereço><endereço> 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 [<MethodDesc address>] [<Code address>] 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 bloco try) e o bloco manipulador (o bloco catch).
FAQ Exibe perguntas frequentes. Não suportado em dotnet-dump.
FinalizeQueue [-detail] | [-allReady] [-curto ] Exibe todos os objetos registrados para finalização.

A opção de detalhes exibe informações adicionais sobre quaisquer que precisem ser limpos e quaisquer (RCWs) que aguardam limpeza. Ambas as estruturas de dados são armazenadas em cache e limpas pelo thread do finalizador quando ele é executado.

A opção -allReady exibe todos os objetos que estão prontos para finalização, independentemente de já estarem marcados pela coleta de lixo como tal, 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 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-gen<N> | -gen 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. O endereço <objeto> forma deste comando é usado após a quebra causada pelo -gen ou -gen qualquer ocorreu. Nesse momento, o depurador está no estado certo para FindRoots identificar raízes para objetos das atuais gerações condenadas. Apenas suportado no Windows.
GCHandles [-perdomain] 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.
GCInfo<endereço MethodDesc><endereço de 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 pertence o valor local ou argumento 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.
GCWaqui<endereço de objeto> 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 parâmetro faq exibe respostas a perguntas frequentes.
HeapStat [-inclUnroot | -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 da pilha de coleta de lixo que não está mais enraizada. Apenas suportado no Windows.
HistClear Libera todos os recursos usados pela família de comandos Hist.

Geralmente, você não precisa chamar explicitamente HistClear, porque cada HistInit 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.
HistRoot<raiz> 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.
IP2MD (ip2md) <endereço de código> Exibe a estrutura MethodDesc no endereço especificado no código que foi compilado 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 de MinidumpMode é definido como 0.

Os 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 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 do módulo><tipo ou nome do método>

-ou-

Name2EE<nome do módulo>!<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, 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 nome do módulo parâmetro 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 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 Exception>]

-ou-

PE [-nested] [<Endereço do objeto de exceção>]
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 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 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. Apenas suportado com Windbg.
de endereço RCWCleanupListRCWCleanupList 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.
SaveModule<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 [<>de 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.
SetSymbolServer [-ms] [-disable] [-log] [-loadsymbols] [-cache<cache-path>] [-directory<search-directory>] [-sympath<windows-symbol-path>] [<symbol-server-URL>] 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 .NET nativos para o tempo de execução. Suportado em lldb e dotnet-dump.
SOSFlush Libera um cache SOS interno.
SOSStatus [-reset] Exibe o status SOS interno ou redefine o estado interno armazenado em cache.
StopOnException [-derived] [-create | -create2] <Exceção><número de pseudo-registro> 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 do captura a exceção especificada e todas as exceções derivadas da exceção especificada.

Apenas suportado com Windbg.
SyncBlk [-all | <syncblk number>] Exibe a estrutura de SyncBlock especificada ou todas as estruturas SyncBlock. Se você não passar nenhum argumento, o comando SyncBlk exibirá a estrutura SyncBlock correspondente aos 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 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.
Threads (clrthreads) [-live] [-especial ] 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 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 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 de servidor), threads auxiliares do depurador, threads do finalizador, threads de AppDomain de descarregamento e threads de timer do pool de threads.

Suporte para aplicativos AOT nativos.
do valor do Estado ThreadState Exibe o estado do thread. O parâmetro é o valor do campo na saída do relatório Threads.
Token2EE<nome do módulo><token> Transforma o token de metadados especificado no módulo especificado em uma estrutura MethodTable 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] <endereço MethodDesc> | <Endereço do 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 GCInfo para o 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.

Suporte para aplicativos AOT nativos.
VerifyObj<endereço do objeto> 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.

Depurador do Windows

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

O Windbg deve carregar a extensão automaticamente sempre que o processo que está sendo depurado contiver o tempo de execução do .NET (coreclr.dll ou libcoreclr.so).

Depurador LLDB

Para obter instruções sobre como configurar as extensões do depurador .NET para LLDB, consulte dotnet-debugger-extensions. Os comandos podem ser usados em processos ao vivo ou dumps.

Por padrão, você pode acessar todos os comandos digitando: 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 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 Ativa/desativa (-off) o registo SOS interno.
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 estrutura 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 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.
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. Este comando está disponível apenas em extensões do depurador .NET.
dumplog Grava o conteúdo de um log de estresse na memória no arquivo especificado.
dumpmd Exibe informações sobre a estrutura 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é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 Executa 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 estrutura MethodDesc no endereço especificado no código que foi compilado 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 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 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 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 que o LLDB fornece. 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 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 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 estrutura 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é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 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.

Exemplo de uso 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 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 estrutura 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é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 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.

Ver também