Despejo dinâmico do DTrace
O DTrace fornece uma instalação para capturar despejo ao vivo de dentro do script D usando lkd(). Os arquivos de despejo de memória são usados para depurar problemas complexos no Windows usando o Depurador do Windows. Para obter mais informações, consulte Analisar arquivos de despejo de memória usando o WinDbg. Para baixar o depurador, consulte Baixar e instalar o depurador do Windows WinDbg.
O despejo ao vivo do DTrace fornece a capacidade de disparar o despejo no ponto exato em que o erro ocorreu. Por exemplo, o erro pode ser uma função que retorna um erro. Você pode usar o DTrace para conectar-se a essa função e disparar um despejo dinâmico quando o valor retornado for "error".
Observação
O DTrace tem suporte nas compilações do Insider do Windows após a versão 18980 e o Windows Server Build 18975.
Para obter informações gerais sobre como trabalhar com o DTrace no Windows, consulte DTrace.
Uso de despejo ao vivo do DTrace
Uso: lkd (parâmetro);
As opções a seguir podem ser definidas para alterar quais informações estão incluídas no mini despejo dinâmico.
0x0 – despejo de kernel completo (valor padrão)
0x1 – Páginas de usuário + páginas do kernel (funciona apenas com anexação de KD)
0x2 - Minidump
0x4 – Páginas do Hyper-V + páginas do Kernel)
0x5 – páginas de usuário, kernel e hipervisor.
Código de exemplo de despejo dinâmico
#pragma D option destructive
inline uint32_t STATUS_UNSUCCESSFUL = 0xc0000001UL;
syscall:::return
{
this->status = (uint32_t)arg0;
if (this->status == STATUS_UNSUCCESSFUL)
{
printf ("Return value arg0:%x \n", this->status);
printf ("Triggering LiveDump \n");
lkd(0);
exit(0);
}
}
Salve o arquivo como livedumpstatuscheck.d.
Abra um prompt de comando como administrador e execute o script usando a opção -s.
C:\Windows\System32>dtrace -s livedumpstatuscheck.d
dtrace: script 'livedumpstatuscheck.d' matched 1881 probes
dtrace: allowing destructive actions
CPU ID FUNCTION:NAME
0 93 NtAlpcSendWaitReceivePort:return Return value arg0:c0000001
Triggering LiveDump
O arquivo de despejo que é criado normalmente está localizado em C:\Windows\LiveKernelReports
.
Se o local do arquivo de despejo tiver sido alterado, o valor será armazenado nesta chave do Registro: hklm\system\currentcontrolset\control\crashcontrol\livekernelreports
Use o WinDbg para trabalhar com um arquivo de despejo, conforme descrito acima.
Solução de problemas
Exibindo eventos relacionados ao despejo ao vivo
Abra o windows Visualizador de Eventos: vá para: Logs de aplicativos e serviços-Microsoft-Windows-Kernel-Livedump-Operational>>>>
Se você não encontrou nenhum log, habilite o canal analítico no prompt de comando ou no visualizador de eventos, conforme descrito abaixo.
Habilitar o canal analítico do prompt de comando
Use este comando para habilitar o canal analítico e o prompt de comando do administrador.
wevtutil sl Microsoft-Windows-Kernel-LiveDump/Analytic /e:true
Habilitar o canal analítico usando Visualizador de Eventos
Iniciar o Windows Visualizador de Eventos
Clique em Exibir e marcar "Mostrar logs analíticos e de depuração". Isso mostrará o canal analítico para livedump.
Clique com o botão direito do mouse em e habilite Microsoft-Windows-Kernel-LiveDump/Analytic.
Habilitando despejos ao vivo completos
Estas configurações de exemplo abaixo mostram a configuração do número máximo de despejos dinâmicos completos que podem estar em disco a qualquer momento para 10 e armazena os despejos de memória completos, não apenas um mini despejo.
reg add "HKLM\System\CurrentControlSet\Control\CrashControl\FullLiveKernelReports" /f /t REG_DWORD /v FullLiveReportsMax /d 10
reg add "HKLM\System\CurrentControlSet\Control\CrashControl" /f /t REG_DWORD /v AlwaysKeepMemoryDump /d 1
Para obter mais informações sobre essas configurações, consulte Configurações de WER.
Desabilitar a limitação
A limitação é um recurso que impede que os despejos e o sistema de registro em log afetem o uso normal do Windows. Esse recurso pode interferir na criação de despejos dinâmicos em determinados ambientes restritos a recursos.
Verifique as configurações de limitação de despejo dinâmico e, se necessário, tente novamente desabilitando a limitação definindo SystemThrottleThreshold e ComponentThrottleThreshold como zero, conforme mostrado aqui.
reg add "HKLM\System\CurrentControlSet\Control\CrashControl\FullLiveKernelReports" /f /t REG_DWORD /v SystemThrottleThreshold /d 0
reg add "HKLM\System\CurrentControlSet\Control\CrashControl\FullLiveKernelReports" /f /t REG_DWORD /v ComponentThrottleThreshold /d 0
Problemas de espaço em disco (ID do evento 202 -Texto do erro: API de dados de despejo adiados de gravação de despejo de despejo ao vivo encerrada. Status NT: 0xC000007F.)
Isso significa que o espaço em disco é insuficiente. Atualize a chave do Registro mostrada abaixo para alterar o caminho para a criação de despejo dinâmico, neste exemplo, para uma unidade d: que tem espaço de armazenamento adicional disponível.
reg add hklm\system\currentcontrolset\control\crashcontrol\livekernelreports /v "LiveKernelReportsPath" /t reg_sz /d "\??\d:\livedumps"
Esse comando define o caminho d:\livedumps
raiz de despejo dinâmico como (por exemplo).
Não crie manualmente a pasta, pois ela é gerenciada pelo sistema operacional e será criada quando o despejo for disparado com as permissões adequadas.