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
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 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 A opção 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 ValueTask e 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. |
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 |
|
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 comando |
|
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ço |
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 |
DumpObj [-nofields] <endereço do objeto> -ou- |
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. |
|
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. |
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. |
-ou- |
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ço |
Exibe informações sobre os campos de uma classe de valor no endereço especificado. O parâmetro |
EEHeap [-gc] [-loader] | Exibe informações sobre a memória do processo consumida por estruturas de dados internas de runtime. As opções 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 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 |
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ço |
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). |
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. |
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 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 o * 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 Só há suporte no Windows. |
PrintException [-aninhado] [-lines] [<endereço do objeto Exception>] -ou- |
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 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. |
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. |
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. |
Exibe o estado do thread. O parâmetro |
|
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 . |
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 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 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. |
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
- Uma introdução aos despejos no .NET
- Saiba como depurar um vazamento de memória no .NET
- blog Coletando e analisando despejos de memória
- da ferramenta de análise de despejo de
(despejo de dotnet) - instalador de extensões de depurador do .NET (dotnet-debugger-extensions)
- ferramenta de análise de heap (dotnet-gcdump)