Episódio
Defrag Tools #167 - Depurando Despejos de Falha do Modo de Usuário Redux
Neste episódio de Defrag Tools, Andrew Richards e Chad Beeder usam Debugging Tools for 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 dumps.
Durante a depuração, fazemos uma viagem paralela na configuração de cores para arquivos compactados e criptografados no Windows Explorer e usamos o Sysinternals Process Monitor 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 - Depurando Despejos de Falha do Modo de Usuário Parte 1
- Defrag Tools #136 - Depurando despejos de falha do modo de usuário Parte 2
Abordamos como instalar as Ferramentas de Depuração para Windows neste episódio:
Obtenha as ferramentas Sysinternals de http://www.sysinternals.com. Utilizamos:
Obtenha a extensão do depurador PDE a partir do OneDrive das Ferramentas de Desfragmentação
Obtenha o caminho do símbolo para o servidor de símbolos públicos da Microsoft:
- Via Ambiente Variável
setx /m _NT_SYMBOL_PATH SRV*C:\My\Sym*https://msdl.microsoft.com/download/symbols - No Depurador
.sympath SRV*C:\Meu\Sym*https://msdl.microsoft.com/download/symbols
Para coletar despejos de falhas em sua própria máquina, instale o ProcDump como o depurador Postmortem (AeDebugger):
md c:\dumps
procdump.exe -ma -i c:\dumps
Em qualquer dump (usuário ou kernel), você pode executar a análise automatizada para visualizar o problema:
!analisar -v
Depurando Cheat Sheet
- 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
- Número parecido com C0xxxxxx e 80xxxxxx são HRESULTs (Códigos de erro)
- Número parecido com 7FFFxxxxxxxx são geralmente endereços de código (assembler)
!endereço
- Exibir as informações de endereço - Comprometido/Reservado/Gratuito, Imagem/Mapeado/Privado
- Usado para determinar se um número é código ou dados.
ln
- Lista Endereço mais próximo
- Exibe o símbolo no endereço ou perto dele
- 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
- Veja os registos no contexto atual. (.ecxr produz a mesma saída)
k
- Ver a pilha de chamadas
LMVM
- Ver o módulo carregado detalhadamente com uma máscara
- Ver os detalhes de um módulo, incluindo pasta, carimbo de data/hora, descrição, direitos de autor, versão do produto/ficheiro
| (Barra Vertical ou caractere Pipe)
- Visualize o caminho do executável (por exemplo, c:\windows\notepad.exe)
!ext.error
- 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 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 carregamento do suporte CLR.
!peb
- Visualize o Bloco de Ambiente de 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.
.recarregar
- Força uma recarga (download) de símbolos para os módulos na pilha atual.
.recarregar /f
- Força uma recarga completa (download) de símbolos para os módulos na pilha atual.
Aplicações da Loja
Para ver as Aplicações da Loja atualmente instaladas e a sua versão de utilização:
Editor do Registro (regedit.exe)
- HKEY_CURRENT_USER\SOFTWARE\Classes\ActivatableClasses\Package
PowerShell
Neste episódio de Defrag Tools, Andrew Richards e Chad Beeder usam Debugging Tools for 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 dumps.
Durante a depuração, fazemos uma viagem paralela na configuração de cores para arquivos compactados e criptografados no Windows Explorer e usamos o Sysinternals Process Monitor 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 - Depurando Despejos de Falha do Modo de Usuário Parte 1
- Defrag Tools #136 - Depurando despejos de falha do modo de usuário Parte 2
Abordamos como instalar as Ferramentas de Depuração para Windows neste episódio:
Obtenha as ferramentas Sysinternals de http://www.sysinternals.com. Utilizamos:
Obtenha a extensão do depurador PDE a partir do OneDrive das Ferramentas de Desfragmentação
Obtenha o caminho do símbolo para o servidor de símbolos públicos da Microsoft:
- Via Ambiente Variável
setx /m _NT_SYMBOL_PATH SRV*C:\My\Sym*https://msdl.microsoft.com/download/symbols - No Depurador
.sympath SRV*C:\Meu\Sym*https://msdl.microsoft.com/download/symbols
Para coletar despejos de falhas em sua própria máquina, instale o ProcDump como o depurador Postmortem (AeDebugger):
md c:\dumps
procdump.exe -ma -i c:\dumps
Em qualquer dump (usuário ou kernel), você pode executar a análise automatizada para visualizar o problema:
!analisar -v
Depurando Cheat Sheet
- 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
- Número parecido com C0xxxxxx e 80xxxxxx são HRESULTs (Códigos de erro)
- Número parecido com 7FFFxxxxxxxx são geralmente endereços de código (assembler)
!endereço
- Exibir as informações de endereço - Comprometido/Reservado/Gratuito, Imagem/Mapeado/Privado
- Usado para determinar se um número é código ou dados.
ln
- Lista Endereço mais próximo
- Exibe o símbolo no endereço ou perto dele
- 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
- Veja os registos no contexto atual. (.ecxr produz a mesma saída)
k
- Ver a pilha de chamadas
LMVM
- Ver o módulo carregado detalhadamente com uma máscara
- Ver os detalhes de um módulo, incluindo pasta, carimbo de data/hora, descrição, direitos de autor, versão do produto/ficheiro
| (Barra Vertical ou caractere Pipe)
- Visualize o caminho do executável (por exemplo, c:\windows\notepad.exe)
!ext.error
- 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 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 carregamento do suporte CLR.
!peb
- Visualize o Bloco de Ambiente de 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.
.recarregar
- Força uma recarga (download) de símbolos para os módulos na pilha atual.
.recarregar /f
- Força uma recarga completa (download) de símbolos para os módulos na pilha atual.
Aplicações da Loja
Para ver as Aplicações da Loja atualmente instaladas e a sua versão de utilização:
Editor do Registro (regedit.exe)
- HKEY_CURRENT_USER\SOFTWARE\Classes\ActivatableClasses\Package
PowerShell