Compartilhar via


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

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

  1. Iniciar o Windows Visualizador de Eventos

  2. Clique em Exibir e marcar "Mostrar logs analíticos e de depuração". Isso mostrará o canal analítico para livedump.

  3. 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.

Consulte Também

DTrace no Windows

Programação do Windows DTrace

Exemplos de código do Windows DTrace