Episódio

Ferramentas de desfragmentação #167 - Depuração de despejos de memória do modo de usuário Redux

Neste episódio de Ferramentas de Desfragmentação, Andrew Richards e Chad Beeder usam as Ferramentas de Depuração para Windows (WinDbg) para determinar a causa raiz de várias falhas de aplicativos que ocorreram no computador de Andrew. Usamos o Sysinternals ProcDump para capturar os despejos.

Durante a depuração, fazemos uma viagem paralela à configuração de cores para arquivos compactados e criptografados no Windows Explorer e usamos o Monitor de Processo Sysinternals para determinar por que o depurador estava recebendo um Acesso Negado ao carregar a Extensão do Depurador PDE.

Fizemos uma investigação semelhante nestes dois episódios:

Abordamos como instalar as Ferramentas de Depuração para Windows neste episódio:

Obtenha as ferramentas do Sysinternals do http://www.sysinternals.com. Nós usamos:

Obter a extensão do depurador PDE do OneDrive das Ferramentas de Desfragmentação

Obtenha seu caminho de símbolo para o Servidor de Símbolos Público da Microsoft:

Para coletar despejos de falhas em seu próprio computador, instale o ProcDump como o depurador Postmortem (AeDebugger):

md c:\dumps
procdump.exe -ma -i c:\dumps

Em qualquer despejo (usuário ou kernel), você pode executar uma análise automatizada para visualizar o problema:

!analyze -v

Folha de dicas de depuração

  • c0000005 é uma violação de acesso - use .ecxr & k
  • c000027b é uma exceção armazenada (aplicativos da loja) - use !pde.dse
  • e0434352 é uma exceção CLR - use !sos.pe
  • e0697282 é uma exceção C++ - use .ecxr & k
  • 80000003 é um ponto de interrupção - use !analyze -v
  • Ao digitar um número decimal, prefixe-o "0n"
  • Ao digitar um número hexadecimal, prefixe-o "0x" (o prefixo padrão)

Comandos comuns do depurador

.exr -1

  • Exibir o código de exceção e os parâmetros de exceção
  • O número que se parece com C0xxxxxx e 80xxxxxx são HRESULTs (códigos de erro)
  • Números parecidos com 7FFFxxxxxxxx geralmente são endereços de código (assembler)

!endereço

  • Exibir as informações de endereço - Comprometido/Reservado/Livre, Imagem/Mapeado/Privado
  • Usado para determinar se um número é código ou dados.

Em

  • Listar o endereço mais próximo
  • Exibe o símbolo no endereço ou próximo a ele
  • Usado para determinar se um número é código ou dados.

.ecxr

  • Altere o contexto de depuração para o ponto da exceção (em vez de estar no contexto do Relatório de Erros do Windows)

r

  • Exiba os registros no contexto atual. (.ecxr produz a mesma saída)

k

  • Exibir a pilha de chamadas

lmvm

  • Visualize o módulo carregado detalhadamente com uma máscara
  • Visualize os detalhes de um módulo, incluindo pasta, carimbo de data/hora, descrição, direitos autorais, versão do produto/arquivo

| (Caractere de barra vertical ou tubulação)

  • Exibir o caminho do executável (por exemplo, c:\windows\notepad.exe)

!ext.erro

  • Obtenha a descrição de um código de erro. Melhor na descrição de códigos de erro do sistema.

!pde.err

  • Obtenha a descrição de um código de erro. Bom em descrever HRESULTs (80xxxxxx e C0xxxxxx)

!pde.dpx

  • Raspe o thread atual em busca de evidências (símbolos, estruturas, strings, etc.)

.Formatos

  • Exibe o número em vários formatos.
  • Maneira fácil de descobrir se um número é realmente um texto ASCII ou uma data/hora

!sos.pe

  • Exiba uma exceção CLR.
  • Se houver uma exceção interna, clique no link para visualizá-la.

.cordll -u & .cordll -l

  • Se o SOS não estiver carregado, tente fazer um descarregamento e carregar o suporte CLR.

!peb

  • Visualize o Bloco de Ambiente do Processo (Módulos, Linha de Comando, Variáveis de Ambiente, etc.)

!Teb

  • Visualize o bloco de ambiente do thread atual (intervalo de pilha, último código de erro, último código de status, etc.)

!Gle

  • Obter último erro
  • Exibir o último código de erro e o último código de status do thread atual

.Cls

  • Limpe a tela.

.reload

  • Force um recarregamento (download) de símbolos para os módulos na pilha atual.

.recarregar /f

  • Force um recarregamento completo (download) de símbolos para os módulos na pilha atual.

Aplicativos da loja

Para exibir os Aplicativos da Loja atualmente instalados e sua versão, use:

Editor do Registro (regedit.exe)

  • HKEY_CURRENT_USER\SOFTWARE\Classes\ActivatableClasses\Package

PowerShell