Sdílet prostřednictvím


DTrace Live Dump

DTrace poskytuje nástroj pro zachycení živého výpisu ze skriptu D pomocí lkd(). Soubory výpisu paměti se používají k ladění složitých problémů v systému Windows pomocí ladicího programu systému Windows. Další informace naleznete v tématu Analýza výpisů paměti po selhání systému pomocí WinDbg. Chcete-li stáhnout ladicí program, přečtěte si téma Stažení a instalace ladicího programu systému Windows WinDbg.

Dynamický výpis paměti DTrace umožňuje aktivovat výpis paměti v přesném okamžiku, kdy došlo k chybě. Může to být například funkce, která vrací chybu. DTrace můžete použít k připojení k této funkci vrácení a aktivaci dynamického výpisu paměti, pokud je vrácená hodnota "error".

Poznámka:

DTrace se podporuje v buildech Insider systému Windows po verzi 18980 a buildu Windows Serveru 18975.

Obecné informace o práci s DTrace ve Windows naleznete v tématu DTrace.

Použití živého výpisu DTrace

Použití: lkd (parametr);

Následující možnosti lze nastavit pro úpravu informací, které jsou součástí živého mini výpisu paměti.

0x0 – úplný výpis stavu jádra (výchozí hodnota)

0x1 – stránky uživatelů a stránky jádra (funguje jenom s připojením KD)

0x2 - Minidump

0x4 – stránky Hyper-V + stránky jádra)

0x5 – stránky uživatele, jádra a hypervisoru

Příklad kódu živého výpisu paměti

#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);
	}
}

Uložte soubor jako livedumpstatuscheck.d.

Otevřete příkazový řádek jako správce a spusťte skript pomocí možnosti -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

Soubor s výpisem paměti, který je vytvořen, je obvykle umístěn v C:\Windows\LiveKernelReports.

Pokud došlo ke změně umístění souboru výpisu paměti, hodnota se uloží v tomto klíči registru: hklm\system\currentcontrolset\control\crashcontrol\livekernelreports

Pomocí WinDbg můžete pracovat se souborem s výpisem paměti, jak je popsáno výše.

Řešení problémů

Otevřete Prohlížeč událostí systému Windows: Přejděte na: Protokoly aplikací a služeb -> Microsoft -> Windows -> Kernel-Livedump -> Operational

Pokud jste nenašli žádné protokoly, povolte analytický kanál z příkazového řádku nebo prohlížeče událostí, jak je popsáno níže.

Povolení analytického kanálu z příkazového řádku

Tento příkaz použijte k povolení analytického kanálu v příkazovém řádku správce.

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

Povolení analytického kanálu pomocí Prohlížeče událostí

  1. Spuštění Prohlížeče událostí systému Windows

  2. Klikněte na Zobrazit a zaškrtněte políčko Zobrazit analytické protokoly a protokoly ladění. Zobrazí se analytický kanál pro livedump.

  3. Klikněte pravým tlačítkem myši a povolte Microsoft-Windows-Kernel-LiveDump/Analytic.

Povolení úplných výpisů paměti za provozu

Níže uvedená nastavení ukazují, jak nastavit maximální počet úplných výpisů paměti, které mohou být kdykoli uloženy na disku, na 10 a ukládat úplné výpisy paměti, nikoli pouze mini výpis.

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

Další informace o těchto nastaveních najdete v tématu Nastavení WER.

Zakázat omezování

Omezování je funkce, která zabraňuje tomu, aby systém výpisů paměti a protokolování ovlivňoval normální používání systému Windows. Tato funkce může kolidovat s vytvářením live výpisů v určitých prostředích s omezenými prostředky.

Zkontrolujte nastavení omezení dynamického výpisu paměti a v případě potřeby akci opakujte zakázáním omezování nastavením systemThrottleThreshold a ComponentThrottleThreshold klíče na nulu, jak je znázorněno zde.

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

Problémy s místem na disku (ID události 202 -Error Text: Rozhraní API pro zápis odložených dat z aktivního výpisu bylo ukončeno. Stav NT: 0xC000007F.)

To znamená, že místo na disku není dostatečné. Aktualizujte níže uvedený klíč registru, aby se změnila cesta pro vytvoření živého výpisu, v tomto příkladu na jednotku d: s dostupným dalším místem úložiště.

reg add hklm\system\currentcontrolset\control\crashcontrol\livekernelreports /v "LiveKernelReportsPath" /t reg_sz /d "\??\d:\livedumps"

Tento příkaz nastaví kořenovou cestu dynamického výpisu paměti na d:\livedumps (jako příklad).

Složku nevytvořujte ručně, protože je spravovaná operačním systémem, a vytvoří se při aktivaci výpisu paměti se správnými oprávněními.

Viz také

DTrace ve Windows

Programování s DTrace pro Windows

Ukázky kódu DTrace Windows