SOS. dll (SOS extensão de depuração)
A extensão de depuração SOS (SOS. dll) ajuda a depurar programas gerenciados no depurador WinDBG. exe e, em Visual Studio, fornecendo informações sobre o ambiente interno do common language runtime (CLR).
A extensão de depuração SOS é instalada automaticamente com Visual Studio e exige o seu projeto para que a depuração não gerenciada ativadas. Você também pode usar a extensão de depuração SOS com o depurador do Windows (WinDbg).
![command] [options]
Comandos
Comando |
Descrição |
---|---|
AnalyzeOOM (ao) |
Exibe as informações para a última OOM ocorridos em uma solicitação de alocação de heap de coleta de lixo. (Coleta de lixo do servidor, ele exibe OOM, se houver, em cada pilha de coleta de lixo.) |
BPMD -nofuturemodule] [<module name> <nome do método>]-md <MethodDesc>-list -clear <o 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 especificado e o método não foi carregados, esse comando aguarda uma notificação de que o módulo foi carregado e just-in-time (JIT) compilado antes de criar um ponto de interrupção. Você pode gerenciar a lista de pendentes pontos de interrupção usando o -list, -clear, e -clearall Opções:
|
CLRStack [-a] [-l] [-p] [-n] |
Fornece um rastreamento de pilha de somente para código gerenciado.
A extensão de depuração SOS não exibe quadros de transição em determinadas plataformas baseadas em IA-64 e x64. |
COMState |
Lista o modelo de apartment COM para cada segmento e um Context o ponteiro, se disponível. |
DumpArray-start <startIndex>]-length <length>]-details] [-nofields] <array object address> - ou - DA-start <startIndex>]-length <length>]-detail] [-nofieldsarray object address> |
Examina os elementos de um objeto array.
|
DumpAssembly<endereço do assembly> |
Exibe informações sobre um assembly. O DumpAssembly comando lista vários módulos, se existirem. Você pode obter um endereço de assembly usando o DumpDomain comando. |
DumpClass<EEClass endereço> |
Exibe informações sobre o EEClass estrutura associado com um tipo. O DumpClass comando exibe os valores de campo estático, mas não exibe valores de campo não estático. Use o DumpMT, DumpObj, Name2EE, ou Token2EE comando para obter um EEClass endereço da estrutura. |
DumpDomain<endereço de domínio>] |
Enumera cada Assembly de objeto que é carregado dentro especificado AppDomain endereço do objeto. Quando chamado sem parâmetros, o DumpDomain comando lista todos os AppDomain objetos em um processo. |
DumpHeap-stat] [-strings] [-short] [-min <size>]-max <size>]-thinlock] [-startAtLowerBound] [-mt <MethodTable address>]-type <partial type name>]start end] |
Exibe informações sobre as coleta de lixo heap e coleta estatísticas sobre objetos. O DumpHeap comando exibe um aviso se detectar a fragmentação excessiva na pilha de coletor de lixo.
|
DumpIL<DynamicMethod gerenciado objeto> | <o ponteiro de DynamicMethodDesc> | <o ponteiro de MethodDesc> |
Exibe o Microsoft intermediate language (MSIL) que está associado um método gerenciado. Observe que o MSIL dinâmico é emitida diferente MSIL é carregado a partir de um assembly. MSIL dinâmico refere-se a objetos em uma matriz de objeto gerenciado em vez de tokens de metadados. |
DumpLog-addr <addressOfStressLog>] [<Filename>] |
Grava o conteúdo de um log de estresse de na memória para o arquivo especificado. Se você não especificar um nome, este comando cria um arquivo chamado StressLog.txt no diretório atual. O log de memória stress ajuda a diagnosticar falhas de estresse sem usar bloqueios ou e/S. Para habilitar o log de stress, defina as seguintes chaves de registro em HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework: (DWORD) StressLog = 1 (DWORD) LogFacility = 0xffffffff (DWORD) StressLogSize = 65536 Opcional -addr opção permite que você especificar um log de stress diferente o log do padrão. |
DumpMD<MethodDesc endereço> |
Exibe informações sobre um MethodDesc estrutura no endereço especificado. Você pode usar o IP2MD comando para obter o MethodDesc endereço da estrutura de uma função gerenciada. |
DumpMT-MD] <MethodTable endereço> |
Exibe informações sobre uma tabela de método no endereço especificado. Especificando a -MD opção exibe uma lista de todos os métodos definidos com o objeto. Cada objeto gerenciado contém um ponteiro de tabela de método. |
DumpMethodSig<sigaddr> <moduleaddr> |
Exibe informações sobre um MethodSig estrutura no endereço especificado. |
DumpModule-mt] <endereço do módulo> |
Exibe informações sobre um módulo no endereço especificado. O -mt opção exibe os tipos definidos em um módulo e os tipos referenciados pelo módulo Você pode usar o DumpDomain ou DumpAssembly comando para recuperar o endereço de. um módulo |
DumpObj-nofields] <endereço do objeto> - ou - DO<endereço do objeto> |
Exibe informações sobre um objeto no endereço especificado. O DumpObj comando exibe os campos, o EEClass informações sobre a estrutura, a tabela de método e o tamanho do objeto. Você pode usar o DumpStackObjects comando para recuperar o endereço de. um objeto Observe que você pode executar o DumpObj comando nos campos do tipo CLASS porque eles são objetos também. O -nofields opção impede que os campos do objeto que está sendo exibido, é útil para objetos, como a seqüência de caracteres. |
DumpRuntimeTypes |
Exibe os objetos do tipo de tempo de execução na pilha de coletor de lixo e lista seus nomes de tipos associados e tabelas de método. |
DumpStack-EE] [-n] [top stackbottom stack] |
Exibe um rastreamento de pilha.
Em plataformas x86 e x64, o DumpStack comando cria um rastreamento de pilha verbose. Em plataformas baseadas em IA-64, a DumpStack comando imita o depurador K comando. O top e bottom parâmetros serão ignorados em plataformas baseadas em IA-64. |
DumpSig<sigaddr> <moduleaddr> |
Exibe informações sobre um Sig estrutura 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 todos os objetos assinatura individual. No entanto, se uma assinatura tiver sido corrompida de alguma forma, você pode usar DumpSigElem para ler as partes válidas do paragrafo. |
DumpStackObjects-verify] [top stackbottom stack] - ou - DSO-verify] [top stackbottom stack] |
Exibe todos os objetos gerenciados encontrados dentro dos limites da pilha atual. O -verify opção valida cada non-static CLASS campo de um campo de objeto. Use o DumpStackObject de comando com comandos de rastreamento de pilha, como o K comando e o CLRStack comando para determinar os valores das variáveis locais e parâmetros. |
DumpVC<MethodTable endereço> <endereço> |
Exibe informações sobre os campos de uma classe de valor no endereço especificado. O MethodTable parâmetro permite que o DumpVC comando para interpretar corretamente campos. Classes de valor não tem uma tabela do método como seu primeiro campo. |
EEHeap [-gc] [-loader] |
Exibe informações sobre a memória consumida por estruturas de dados common language runtime internas do processo. O -gc e -loader Opções de limitam a saída desse comando para o coletor de lixo ou estruturas de dados do carregador. As informações para o coletor de lixo listam os intervalos de cada segmento no heap gerenciado. Se o ponteiro cair dentro de um intervalo de segmento dado por -gc, o ponteiro é um ponteiro de objeto. |
EEStack [-short] [-EE] |
Executa o DumpStack comando em todos os segmentos no processo. O -EE opção é passada diretamente para o DumpStack comando. O -short parâmetro limita a saída para os seguintes tipos de segmentos:
|
EEVersion |
Exibe a versão de tempo de execução de linguagem comum. |
EHInfo<MethodDesc endereço>] [<código endereço>] |
Exibe a blocos de um método especificado de manipulação de exceção. Este comando exibe os endereços de código e os deslocamentos para o bloco de cláusula (o try bloco) e o bloco do manipulador (o catch block). |
FAQ |
Exibe perguntas freqüentes. |
FinalizeQueue [-detail] | [-allReady] [-short] |
Exibe todos os objetos registrados para finalização.
|
FindAppDomain<endereço do objeto> |
Determina o domínio de aplicativo de um objeto no endereço especificado. |
FindRoots -gen <N> | -gen any |<endereço do objeto> |
Faz com que o depurador romper o depurado na próxima coleta da geração especificada. O efeito é redefinido como ocorre a quebra. Para interromper a próxima coleta, é necessário que você envie novamente o comando. O < endereço de objeto > o formulário deste comando é usado depois da quebra causada pela -gen ou -gen any ocorreu. Nesse momento, o depurado está no estado correto para FindRoots para identificar as raízes de objetos a partir do atual condemned gerações. |
GCHandles [-perdomain] |
Exibe estatísticas sobre alças do coletor de lixo no processo. O -perdomain opção organiza as estatísticas por domínio de aplicativo. Use o GCHandles o comando localizar vazamentos de memória causados pelo coletor de lixo alça vazamentos. Por exemplo, um vazamento de memória ocorre quando o código mantém um grande array porque um identificador de alta segurança coletor de lixo ainda aponta para ele e o identificador será descartado sem liberando-a. |
GCHandleLeaks |
Pesquisa de memória para quaisquer referências para identificadores do coletor de lixo forte e fixados no processo e exibe os resultados. Se um identificador for encontrado, o GCHandleLeaks comando exibe o endereço de referência. Se um identificador não for encontrado na memória, este comando exibe uma notificação. |
GCInfo<MethodDesc endereço><código endereço> |
Exibe os dados que indica quando registra ou pilha locais contêm objetos gerenciados. Se uma coleta de lixo ocorre, o coletor deve saber os locais das referências a objetos, para que ele pode ser atualizado com novos valores de ponteiro de objeto. |
GCRoot-nostacks] <endereço do objeto> |
Exibe informações sobre referências (ou raízes) para um objeto no endereço especificado. O GCRoot comando examina toda a heap gerenciada e a tabela de identificadores para identificadores dentro de outros objetos e alças na pilha. Cada pilha deve ser procurada ponteiros para objetos e a fila de finalizadores também é pesquisada. Este comando não determina se uma raiz de pilha é válida ou é descartada. Use o CLRStack e U comandos para desmontar o quadro que o valor de local ou argumento pertence a fim de determinar se a raiz de pilha ainda está em uso. O -nostacks opção restringe a pesquisa às alças de coletor de lixo e freachable objetos. |
GCWhere < endereço de objeto > |
Exibe o local e tamanho no heap de coleta de lixo do argumento passado. Quando o argumento se encontra no heap gerenciado, mas não é um endereço válido de objeto, o tamanho é exibido como 0 (zero). |
help<command>]faq] |
Exibe todos os comandos disponíveis quando nenhum parâmetro for especificado ou exibe ajuda informações detalhadas sobre o comando especificado. O faq parâmetro exibe respostas para perguntas freqüentes. |
HeapStat [-inclUnrooted | -iu] |
Exibe os tamanhos de geração para cada pilha e o total de espaço livre em cada geração em cada pilha. Se a opção -inclUnrooted opção for especificada, o relatório inclui informações sobre os objetos gerenciados a partir do heap de coleta de lixo não está enraizada. |
HistClear |
Libera todos os recursos usados pela família de Hist comandos. Geralmente, você não precisa chamar explicitamente HistClear, porque cada HistInit limpa recursos anterior. |
HistInit |
Inicializa as estruturas de SOS do log de stress salvo no elemento a ser depurado. |
HistObj <obj_address> |
Examina todos os registros de realocação de log de estresse e exibe a cadeia de realocações de coleta de lixo pode levaram ao endereço passado como um argumento. |
HisttObjFind <obj_address> |
Exibe todas as entradas de log que fazem referência a um objeto no endereço especificado. |
HistRoot <root> |
Exibe informações relacionadas a realocações da raiz especificada e promoções. O valor de raiz pode ser usado para controlar o movimento de um objeto por meio de coletas de lixo. |
IP2MD<código endereço> |
Exibe o MethodDesc estrutura no endereço especificado no código que foi compilado em JIT. |
ListNearObj(lno) <obj_address> |
Exibe os objetos antes e após o endereço especificado. O comando procura o endereço na pilha 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álido) e o objeto seguindo o endereço do argumento. |
MinidumpMode [0] [1] |
Impede a execução de comandos não seguros ao usar um minidespejo. Passar 0 para desativar esse recurso ou 1 para habilitar esse recurso. Por padrão, o MinidumpMode valor é definido como 0. Minidumps criados com o .dump /m comando ou .dump comando limitaram a dados específicos do CLR e permitem que você execute apenas um subconjunto de comandos de SOS corretamente. Alguns comandos podem falhar com erros inesperados porque necessário áreas da memória não são mapeadas ou apenas parcialmente são mapeadas. Esta opção protege você de executar comandos não seguros contra minidumps. |
Name2EE<nome do módulo> <nome de tipo ou método> - ou - Name2EE<nome do módulo>!<nome de tipo ou método> |
Exibe o MethodTable estrutura e EEClass estrutura para o tipo especificado ou o método no módulo especificado. O módulo especificado deve ser carregado no processo. Para obter o nome do tipo adequado, procure o módulo usando o Ildasm. exe (desmontador MSIL). Você também pode passar * como o nome do módulo parâmetro para pesquisar todos carregado módulos gerenciados. 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 oferece suporte a sintaxe de depurador do Windows do <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 os parâmetros do ObjSize comando exibe o tamanho de todos os objetos encontrados em threads gerenciados, exibe todos os identificadores de coletor de lixo no processo e o tamanho de todos os objetos de totais apontada por essas alças. O ObjSize comando inclui o tamanho de todos os objetos filho e pai. O -aggregate opção pode ser usada em conjunto com o -stat argumento para obter uma visão detalhada dos tipos que ainda como raiz. Usando !dumpheap -stat e !objsize -aggregate -stat, você pode determinar quais objetos não têm raiz e diagnosticar diversos problemas de memória. |
PrintException-nested] [-lines] [<endereço do objeto de exceção>] - ou - PE-nested] [<endereço do objeto de exceção>] |
Exibe e formata campos de qualquer objeto derivado de Exception classe no endereço especificado. Se você não especificar um endereço, o PrintException comando exibe a última exceção acionada no segmento atual.
Você pode usar este comando para formatar e exibir o _stackTrace campo, que é uma matriz binária. |
ProcInfo [-env] [-time] [-mem] |
Exibe as variáveis de ambiente para o processo, o tempo de CPU do kernel e estatísticas de uso de memória. |
RCWCleanupList<RCWCleanupList endereço> |
Exibe a lista de runtime callable wrappers no endereço especificado que estão aguardando a limpeza. |
SaveModule<endereço base> <nome de arquivo> |
Grava uma imagem, que é carregada na memória no endereço especificado, o arquivo especificado. |
SOSFlush |
Libera um cache interno do SOS. |
StopOnException [-derived] [-create | -create2] <exceção> <o número de pseudo-registro> |
Faz com que o depurador para parar quando a exceção especificada é lançada, mas continuar a executar quando outras exceções são lançadas. O -derived opção captura a exceção especificada e todas as exceções que deriva de exceção especificado. |
SyncBlk-all | <o número de syncblk>] |
Exibe o especificado SyncBlock estrutura ou todos os SyncBlock estruturas. Se você não passar argumentos, o SyncBlk comando exibe o SyncBlock estrutura correspondente para objetos que são possuídos por um thread. A SyncBlock estrutura é um recipiente para informações extras que não precisam ser criada para cada objeto. Ele pode armazenar dados de interoperabilidade COM, códigos de hash e informações de bloqueio para operações de thread-safe. |
ThreadPool |
Exibe informações sobre o pool de segmentos gerenciado, incluindo o número de solicitações de trabalho na fila, o número de segmentos de porta de conclusão e o número de timers. |
Token2EE<nome do módulo> <token> |
Transforma os metadados especificados símbolo no módulo especificado em um MethodTable estrutura ou MethodDesc estrutura. Você pode passar * para o parâmetro de nome do módulo encontrar esse token que mapeia cada módulo gerenciado carregado. Você também pode passar o nome do depurador para um módulo, tais como mscorlib ou image00400000. |
Threads [-live] [-special] |
Exibe todos os threads gerenciados no processo. O Threads comando exibe a identificação de forma abreviada do depurador, a common language runtime ID do thread e o thread do sistema operacional ID. Além disso, o Threads comando exibe uma coluna de domínio que indica o domínio de aplicativo no qual um thread está em execução, uma coluna APT que exibe o modo de apartment COM e uma coluna de exceção que exibe a última exceção acionada no segmento.
|
ThreadState <Campo de valor de estado> |
Exibe o estado do segmento. O value parâmetro é o valor da State campo o Threads relatório de saída. Exemplo:
|
TraverseHeap-xml] <filename> |
Grava informações de pilha para o arquivo especificado em um formato entendido pelo profiler CLR. O -xml opção faz com que o TraverseHeap comando para formatar o arquivo como XML. Você pode baixar o Profiler CLR da Centro de Download da Microsoft. |
U-gcinfo] [-ehinfo] [-n] <MethodDesc address> | <código endereço> |
Exibe uma desmontagem com anotações de um método gerenciado especificado por um MethodDesc o ponteiro de estrutura para o método ou por um endereço de código dentro do corpo do método. O U comando exibe todo o método a partir do início ao fim, com as anotações que converter tokens de metadados para nomes.
|
VerifyHeap |
Verifica o heap do coletor de lixo para sinais de corrupção e exibe quaisquer erros encontrados. Corrupção de heap pode ser causadas por plataforma chamar chamadas são construídas incorretamente. |
VerifyObj <endereço do objeto> |
Verifica o objeto que é passado como um argumento para sinais de dano. |
VMMap |
Percorre o espaço de endereço virtual e exibe o tipo de proteção aplicada a cada região. |
VMStat |
Fornece uma exibição de resumo do espaço de endereço virtual, ordenado por cada tipo de proteção aplicada para que a memória (livre, reservada, privada, compromissada mapeada, imagem). A coluna TOTAL exibe o resultado da média coluna multiplicado pela coluna contagem de BLK. |
Comentários
Use a extensão de depuração SOS carregando-o no depurador WinDBG. exe, que também está disponível a partir de site WDK e ferramentas de desenvolvedor, ou em Visual Studio. Você pode executar comandos em WinDgb.exe ou do imediata janela de Visual Studio.
A extensão de depuração SOS permite que você exiba informações sobre o código que está sendo executado o common language runtime. Por exemplo, você pode usar a extensão de depuração SOS para exibir informações sobre o heap gerenciado, procure a corrupção de heap, exibir os tipos de dados internos usados pelo runtime e exibir informações sobre todo o código gerenciado em execução dentro do tempo de execução.
Carregar o SOS a extensão de depuração
Para carregar a extensão de depuração SOS o depurador WinDBG. exe, execute o seguinte comando na ferramenta:
.loadby sos clr
Para carregar o SOS Debugging Extension em Visual Studio, execute o seguinte comando imediata janela durante a depuração:
.load SOS.dll
Se o comando for bem-sucedido, ele retorna a seguinte mensagem de imediata janela:
extension C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\sos.dll loaded
Você deve habilitar a depuração não gerenciada nas configurações do projeto da sua solução antes de carregar a extensão de depuração SOS. Alguns idiomas, depuração não gerenciada é desativado por padrão. Algumas plataformas não permitem a depuração de código gerenciado e ao mesmo tempo.
Observação
Para exibir o imediata janela no Visual Studio, no Debug , aponte para Windowse clique o imediata opção.Você também pode abrir o imediata janela Visual Studio pressionando CTRL + ALT + I.
WinDbg. exe e Visual Studio de usam uma versão do SOS. dll que corresponde à versão do mscorwks. dll em uso no momento. Nas versões 1.1 e 2.0 do.NET Framework, SOS. dll está instalado no mesmo diretório do mscorwks. dll. Por padrão, você deve usar a versão do SOS. dll que corresponde à versão atual do mscorwks. dll.
Para usar um arquivo de despejo criado em outro computador, verifique se o arquivo mscorwks. dll que veio com a instalação está no seu caminho de símbolo e carregar a versão correspondente do SOS. dll.
Para carregar uma versão específica do SOS. dll, digite o seguinte comando no Windows Debugger:
.load <full path to sos.dll>
Exemplos
O comando a seguir exibe o conteúdo de uma matriz no endereço 00ad28d0. A exibição inicia o segundo elemento e continua por cinco elementos.
!dumparray -start 2 -length 5 -detail 00ad28d0
O comando a seguir exibe o conteúdo de um assembly no endereço 1ca248.
!dumpassembly 1ca248
O comando a seguir exibe informações sobre o heap do coletor de lixo.
!dumpheap
O comando a seguir grava o conteúdo do log de estresse de na memória para um arquivo (padrão), chamado StressLog.txt no diretório atual.
!DumpLog
O comando a seguir exibe o MethodDesc estrutura no endereço 902f40.
!dumpmd 902f40
O comando a seguir exibe informações sobre um módulo no endereço 1caa50.
!dumpmodule 1caa50
O comando a seguir exibe informações sobre um objeto no endereço a79d40.
!DumpObj a79d40
O comando a seguir exibe os campos de uma classe de valor no endereço 00a79d9c usando a tabela de método no endereço 0090320c.
!DumpVC 0090320c 00a79d9c
O comando a seguir exibe a memória do processo usada pelo coletor de lixo.
!eeheap -gc
O comando a seguir exibe todos os objetos planejados para finalização.
!finalizequeue
O comando a seguir determina o domínio de aplicativo de um objeto no endereço 00a79d98.
!findappdomain 00a79d98
O comando a seguir exibe todos os identificadores de coletor de lixo no processo atual.
!gcinfo 5b68dbb8
O comando a seguir exibe o MethodTable e EEClass estruturas para o Main método na classe MainClass no módulo unittest.exe.
!name2ee unittest.exe MainClass.Main
O comando a seguir exibe informações sobre o token de metadados no endereço 02000003 no módulo unittest.exe.
!token2ee unittest.exe 02000003
Consulte também
Referência
Prompt de comando Visual Studio