Compartilhar via


Despejo ao vivo do DTrace

O DTrace fornece um recurso para capturar um despejo ao vivo no interior do D-Script usando lkd(). 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 erros 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 nos builds 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 geração de despejo em tempo real do DTrace

Uso: lkd (parâmetro);

As seguintes opções podem ser configuradas para alterar as informações incluídas no mini dump ao vivo.

0x0 – Despejo de kernel completo (valor padrão)

0x1 – Páginas de usuário + páginas do Kernel (funciona somente com anexação KD)

0x2 – Minidump

0x4 - Hyper-V páginas + páginas do Núcleo)

0x5 – páginas de usuário, kernel e hipervisor.

Código de exemplo de despejo ao vivo

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

Resolução de problemas

Abra o Visualizador de Eventos do Windows: 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 a partir de um prompt de comando do administrador.

wevtutil sl Microsoft-Windows-Kernel-LiveDump/Analytic /e:true

Habilitar o canal analítico usando o Visualizador de Eventos

  1. Iniciar o Visualizador de Eventos do Windows

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

  3. Clique com o botão direito do mouse 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 no 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

O limitador é um recurso que impede que os despejos de memória 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 dump ao vivo e, se necessário, tente novamente desativando a limitação, definindo as chaves 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 -Error Texto: API de despejo ao vivo, gravação adiada, 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 raiz do despejo ao vivo para d:\livedumps (como exemplo).

Não crie manualmente a pasta como 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