dumps do Relatório de Erros do Windows VS procdump.exe

4

Alguém pode esclarecer se os despejos de memória produzidos pelo WER são os mesmos que os produzidos pelo procdump.exe? Duas dessas ferramentas podem entrar em conflito quando usadas simultaneamente? Qual seria a abordagem correta se meu objetivo fosse solucionar o tipo de evento "serviço encerrado inesperadamente" para um serviço (em uma plataforma Server 2012 R2)?

    
por Mikhail 25.12.2016 / 18:45

1 resposta

3

Tanto o procdump quanto o WER são bons para capturar despejos de memória do modo de usuário quando um aplicativo falha.

A regra geral é que quanto mais abrangente o despejo, mais útil ele pode ser, porque os mini-dumps, os dumps híbridos e os dumps personalizados omitem bits de dados que podem ter sido úteis em uma investigação de causa raiz para para economizar espaço em disco.

O WER captura mini-dumps por padrão, mas pode ser configurado para capturar despejos completos.

(Quando eu digo "despejo completo" neste contexto, quero dizer o espaço de endereço do processo de usuário completo do processo em questão - qualquer coisa do modo kernel está fora do escopo.)

procdump.exe, por outro lado, é uma ferramenta da Sysinternals (Mark Russinovich, Andrew Richards, e outros), que é projetada para ser muito mais flexível que o WER. Se WER era uma faca de manteiga, então procdump é um canivete suíço. Por exemplo, o procdump.exe pode ser configurado para capturar automaticamente um dump (ou uma série de dumps) quando um processo permanece > 90% de uso da CPU por 10 segundos ou > 500MB de uso de memória, etc. etc. O procdump também pode ser configurado como seu depurador post-mortem permanente do AeDebug, que basicamente faz dele um substituto para o WER naquele ponto.

O WER funciona bem o suficiente (especialmente quando configurado para capturar despejos de processo completos) e tanto o WER quanto o procdump capturam o mesmo tipo de despejo, mas você só precisa de um ou outro. Não há realmente nenhum sentido em tentar usar os dois.

procdump -ma -i C:\Dumps configura o procdump.exe para executar automaticamente um despejo de memória de processo completo sempre que um processo em modo de usuário falha na máquina e o coloca no diretório C: \ Dumps.

Isso também trará um serviço do Windows com falha, a menos que o desenvolvedor do serviço tenha escrito especificamente o serviço para fazer seu próprio tratamento de exceção e evitar ser pego pelos depuradores, o que é bastante raro. (E, mesmo assim, o procdump pode ser configurado para despejar exceções de primeira chance também.)

PS: Você pode ver a mensagem "serviço encerrado inesperadamente" se o serviço realmente travou, mas você também pode ver a mesma mensagem se o serviço pareceu precisar sair sem cooperar com o Service Manager como deveria. Nesse caso, o desenvolvedor do serviço era apenas um desenvolvedor ruim e, como não houve nenhuma falha real, nem o WER nem o procdump o ajudarão.

    
por 25.12.2016 / 21:16