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:
- Ferramentas de Desfragmentação #135 – Depuração de despejos de memória do modo de usuário Parte 1
- Ferramentas de Desfragmentação #136 – Depuração de despejos de memória do modo de usuário Parte 2
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:
- Via variável de ambiente
setx /m _NT_SYMBOL_PATH SRV*C:\Meu\Sym*https://msdl.microsoft.com/download/symbols - No depurador
.sympath SRV*C:\My\Sym*https://msdl.microsoft.com/download/symbols
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
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:
- Ferramentas de Desfragmentação #135 – Depuração de despejos de memória do modo de usuário Parte 1
- Ferramentas de Desfragmentação #136 – Depuração de despejos de memória do modo de usuário Parte 2
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:
- Via variável de ambiente
setx /m _NT_SYMBOL_PATH SRV*C:\Meu\Sym*https://msdl.microsoft.com/download/symbols - No depurador
.sympath SRV*C:\My\Sym*https://msdl.microsoft.com/download/symbols
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
Tem comentários? Envie um problema aqui.