Partilhar via


Arquivos de despejo em modo usuário

Neste artigo, obtenha uma visão geral dos arquivos de despejo em modo usuário e como usá-los para ajudar a resolver bugs e falhas.

Para obter informações sobre como analisar um arquivo de despejo, consulte Analisar um arquivo de despejo em modo usuário.

Tipos de arquivos de despejo em modo usuário

Diversos tipos de arquivos de despejo de memória em modo usuário estão disponíveis. Os diferentes tipos de arquivos de despejo são divididos em duas categorias:

Você pode obter um volume substancial de informações analisando um arquivo de despejo. No entanto, nenhum arquivo de despejo pode fornecer o volume de informações que você obtém da depuração da falha usando um depurador.

Despejos em modo usuário completos

Um modo usuário completo é o arquivo de despejo em modo usuário básico. Um arquivo de despejo em modo usuário completo inclui:

  • Todo o espaço de memória de um processo.
  • A imagem executável do programa.
  • A tabela de identificadores.
  • Outras informações que ajudam o depurador a reconstruir a memória que estava em uso quando o despejo ocorreu.

Você pode reduzir um arquivo de despejo em modo usuário completo em um minidespejo. Para reduzir um arquivo de despejo em modo usuário completo, primeiro carregue o arquivo de despejo no depurador. Em seguida, use o comando .dump (Criar Arquivo de Despejo) para salvar um novo arquivo de despejo em formato de minidespejo.

Apesar dos nomes, o maior arquivo de minidespejo contém mais informações do que o arquivo de despejo em modo usuário completo. Por exemplo, os comandos .dump /mf e .dump /ma criam arquivos maiores e mais completos do que o comando .dump /f.

Em modo usuário, .dump /m[MiniOptions] costuma ser a melhor opção. Os arquivos de despejo criados por você usando essa opção podem variar de um tamanho muito pequeno para muito grande. Ao especificar a opção MiniOptions correta, você pode controlar exatamente quais informações estão incluídas.

Minidespejos

O tamanho e o conteúdo de um arquivo de minidespejo variam de acordo com o programa despejado e com o aplicativo que está fazendo o despejo, além das opções selecionadas. Às vezes, um arquivo de minidespejo é um razoavelmente grande e inclui a memória completa e a tabela de identificadores. Outras vezes, o arquivo de minidespejo é muito menor. Por exemplo, um arquivo de minidespejo só pode conter informações sobre um único thread ou pode conter apenas informações sobre módulos referenciados na pilha.

O termo minidespejo é enganoso porque os maiores arquivos de minidespejo contêm mais informações do que um arquivo de despejo em modo usuário completo. Por exemplo, .dump /mf ou .dump /ma cria um arquivo maior e mais completo do que .dump /f. Por esse motivo, é recomendável usar .dump /m[MiniOptions], em vez de .dump /f, para criar todos os arquivos de despejo em modo usuário.

Se criar um arquivo de minidespejo usando o depurador, você poderá escolher quais informações incluir. O comando .dump /m inclui informações básicas sobre os módulos carregados que constituem o processo de destino, informações de thread e informações de pilha. Você pode modificar o comando básico usando qualquer uma das opções de opção descritas na seguinte tabela:

.dump option Efeito sobre o arquivo de despejo
/ma Cria um minidespejo com todas as adições opcionais. A opção /ma equivale a /mfFhut. Ela adiciona dados de memória completa, dados de manipulação, informações de módulo descarregado, informações de memória básicas e informações de tempo do thread ao minidespejo.
/mf Adiciona dados de memória completa ao minidespejo. Todas as páginas confirmadas acessíveis pertencentes ao aplicativo de destino são incluídas.
/mF Adiciona todas as informações de memória básicas ao minidespejo. Essa opção adiciona um fluxo ao minidespejo que contém todas as informações de memória básicas, e não apenas informações sobre memória válida. O depurador usa as informações para reconstruir o layout da memória virtual completo do processo quando o minidespejo está sendo depurado.
/mh Adiciona dados sobre os identificadores associados ao aplicativo de destino ao minidespejo.
/mu Adiciona informações de módulo descarregado ao minidespejo. Essa opção só está disponível no Windows Server 2003 e versões posteriores do Windows.
/mt Adiciona mais informações de thread ao minidespejo. Entre as informações do thread estão tempos de thread, que podem ser exibidos usando .ttime (Exibir Tempos de Thread) quando você depura o minidespejo.
/mi Adiciona memória secundária ao minidespejo. A memória secundária é qualquer memória referenciada por um ponteiro na pilha ou no repositório de backup, além de uma pequena região em torno desse endereço.
/mp Adiciona dados do bloco de ambiente de processos e bloco de ambiente de thread ao minidespejo. Essas informações poderão ser úteis se você precisar ter acesso às informações do sistema Windows sobre os processos e threads do aplicativo.
/mw Adiciona todas as páginas privadas de leitura/gravação confirmadas ao minidespejo.
/md Adiciona todos os segmentos de dados de leitura/gravação dentro da imagem executável ao minidespejo.
/mc Adiciona seções de código dentro das imagens.
/mr Exclui das partes de minidespejo da pilha e da memória de armazenamento que não sejam usadas para recriar o rastreamento da pilha. Variáveis locais e outros valores do tipo de dados também são excluídos. Essa opção não diminui o minidespejo (as seções de memória não utilizadas são zeradas), mas será útil se você quiser proteger a privacidade de outros aplicativos.
/mR Exclui os caminhos de módulo completos do minidespejo. Somente os nomes de módulo são incluídos. Esta opção será útil se você quiser proteger a privacidade da estrutura de diretórios do usuário.

Você pode combinar essas opções. Por exemplo, use o comando .dump /mfiu para criar um minidespejo razoavelmente grande que contenha memória secundária e descarregada. Use o comando .dump /mrR para criar um minidespejo que remova algumas das informações de usuário. Para obter detalhes de sintaxe completos, consulte .dump (Criar Arquivo de Despejo).

Ferramentas a serem usadas para criar um arquivo de despejo

Existem diversas ferramentas diferentes que você pode usar para criar um arquivo de despejo em modo usuário:

ProcDump

ProcDump é um utilitário de linha de comando que você pode usar para monitorar um aplicativo em busca de picos de CPU e gerar despejos de memória durante um pico. Um administrador ou desenvolvedor pode usar os arquivos de despejo de memória para determinar a causa do pico. O ProcDump também inclui o monitoramento de janelas suspensas (usando a mesma definição de travamento de janela que o Windows e o Gerenciador de Tarefas usam) e exceções sem tratamento. Você pode usar ProcDump para gerar despejos com base nos valores dos contadores de desempenho do sistema. ProcDump também pode servir como um utilitário de despejo de processo geral que você pode inserir em outros scripts.

Para obter informações sobre como criar um arquivo de despejo em modo usuário usando o utilitário Sysinternals ProcDump, consulte ProcDump.

WinDbg e CDB

Console Debugger (CDB) e Windows Debugger (WinDbg) são ferramentas de depuração incluídas no Software Development Kit do Windows e no Kit de Driver do Windows. Consulte as opções de instalação em Baixar e instalar o depurador do Windows do WinDbg.

Você pode usar o CDB ou o WinDbg para criar arquivos de despejo em modo usuário de várias maneiras:

  • Crie automaticamente um arquivo de despejo.
  • Crie arquivos de despejo ao depurar.
  • Reduza um arquivo de despejo existente.

Para obter mais informações sobre as ferramentas, consulte Introdução à depuração do Windows e Depurar usando CDB.

Crie automaticamente um arquivo de despejo

Quando um erro de aplicativo ocorre, o Windows pode responder de diversas maneiras, dependendo das configurações de depuração post-mortem. Se essas configurações instruírem uma ferramenta de depuração a criar um arquivo de despejo, um arquivo de despejo de memória em modo usuário será criado. Para obter mais informações, consulte Habilitar a depuração post-mortem.

Criar arquivos de despejo durante a depuração

Quando o CDB ou o WinDbg está depurando um aplicativo em modo usuário, você também pode usar o comando .dump (Criar Arquivo de Despejo) para criar um arquivo de despejo.

Esse comando não causa o encerramento do aplicativo de destino. Ao selecionar opções de comando específicas, você pode criar um arquivo de minidespejo que contém exatamente a quantidade de informações desejada.

Reduza um arquivo de despejo existente

Você pode usar CDB ou WinDbg para reduzir um arquivo de despejo. Para reduzir um arquivo de despejo, comece a depurar um arquivo de despejo existente. Em seguida, use o comando .dump para criar um arquivo de despejo de tamanho menor.

Depuração de Viagem no Tempo

Outra opção para depurar aplicativos no modo de usuário é a TTD (Depuração de Viagem no Tempo). TTD é uma ferramenta que você pode usar para registrar o processo enquanto ele é executado. Você pode reproduzir a gravação da sessão do depurador para encontrar o bug. Você pode ir facilmente para diferentes partes da gravação a fim de compreender as condições que acarretaram o bug e como corrigir o problema.

O TTD tem vantagens significativas sobre arquivos de despejo de memória, que normalmente não têm a execução do código que levou à falha. A capacidade de voltar no tempo na execução do código pode ser útil para determinar a causa raiz.

Para obter mais informações, consulte a Visão geral da depuração de viagem no tempo.

Confira também