Udostępnij przez


DTrace Live Dump

DTrace zapewnia mechanizm do przechwytywania zrzutu pamięci na żywo wewnątrz skryptu D za pomocą lkd(). Pliki zrzutu pamięci są używane do debugowania złożonych problemów w systemie Windows przy użyciu debugera systemu Windows. Aby uzyskać więcej informacji, zobacz Analizowanie plików zrzutu awaryjnego przy użyciu usługi WinDbg. Aby pobrać debuger, zobacz Pobieranie i instalowanie debugera systemu Windows WinDbg.

Zrzut danych na żywo DTrace umożliwia wyzwolenie zrzutu w dokładnym punkcie, w którym wystąpił błąd. Na przykład błąd może być funkcją zwracającą błąd. Możesz użyć DTrace, aby podłączyć się do tej funkcji zwracać i wyzwalać zrzut na żywo, gdy zwracana wartość to "błąd".

Uwaga / Notatka

Narzędzie DTrace jest obsługiwane w kompilacjach niejawnych systemu Windows po wersji 18980 i Windows Server Build 18975.

Aby uzyskać ogólne informacje na temat pracy z funkcją DTrace w systemie Windows, zobacz DTrace.

Użycie funkcji Live Dump w DTrace

Użycie: lkd (parametr);

Następujące opcje można ustawić, aby zmienić informacje zawarte w zrzutie na żywo.

0x0 — pełny zrzut jądra (wartość domyślna)

0x1 — strony użytkownika i strony jądra (działa tylko z dołączaniem KD)

0x2 — Minidump

0x4 — strony Hyper-V i strony jądra)

0x5 — strony użytkownika, jądra i funkcji hypervisor.

Przykładowy kod dla Live Dump

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

Zapisz plik jako livedumpstatuscheck.d.

Otwórz wiersz polecenia jako administrator i uruchom skrypt przy użyciu opcji -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

Utworzony plik zrzutu znajduje się zwykle w folderze C:\Windows\LiveKernelReports.

Jeśli lokalizacja pliku zrzutu została zmieniona, wartość jest przechowywana w tym kluczu rejestru: hklm\system\currentcontrolset\control\crashcontrol\livekernelreports

Użyj narzędzia WinDbg, aby pracować z plikiem zrzutu zgodnie z powyższym opisem.

Rozwiązywanie problemów

Otwórz Podgląd zdarzeń systemu Windows: przejdź do: Dzienniki aplikacji i usług Microsoft-Windows-Kernel-Livedump-Operational>>>>

Jeśli nie znaleziono żadnych dzienników, włącz kanał analityczny z poziomu wiersza polecenia lub podglądu zdarzeń zgodnie z poniższym opisem.

Włączanie kanału analitycznego z poziomu wiersza polecenia

Użyj tego polecenia, aby włączyć kanał analityczny z poziomu wiersza polecenia administratora.

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

Włączanie kanału analitycznego przy użyciu Podglądu zdarzeń

  1. Uruchamianie Podglądu zdarzeń systemu Windows

  2. Kliknij pozycję Wyświetl i zaznacz pozycję "Pokaż dzienniki analityczne i debugowania". Spowoduje to wyświetlenie kanału analitycznego dla livedump.

  3. Kliknij prawym przyciskiem myszy i włącz pozycję Microsoft-Windows-Kernel-LiveDump/Analytic.

Włączanie pełnych zrzutów na żywo

Poniższe przykładowe ustawienia pokazują ustawienie maksymalnej liczby pełnych zrzutów w trybie aktywnym, które mogą znajdować się na dysku w danym momencie, na 10 i co przechowuje pełne zrzuty pamięci, a nie tylko zrzuty o zmniejszonym rozmiarze.

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

Aby uzyskać więcej informacji na temat tych ustawień, zobacz Ustawienia usługi WER.

Wyłączanie ograniczania przepustowości

Ograniczanie to funkcja, która zapobiega temu, by system zrzutów i rejestrowania wpływał na normalne użytkowanie systemu Windows. Ta funkcja może zakłócać tworzenie zrzutów na żywo w środowiskach o ograniczonych zasobach.

Sprawdź ustawienia ograniczania zrzutu na żywo i w razie potrzeby spróbuj ponownie, wyłączając ograniczanie, ustawiając wartość SystemThrottleThreshold i ComponentThrottleThreshold keys na zero, jak pokazano poniżej.

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

Problemy z miejscem na dysku (identyfikator zdarzenia 202 -Error tekst: interfejs API dla odroczonego zapisu danych zrzutu na żywo został zakończony. Stan NT: 0xC000007F.)

Oznacza to, że ilość miejsca na dysku jest niewystarczająca. Zaktualizuj klucz rejestru pokazany poniżej, aby zmienić ścieżkę do tworzenia zrzutów na żywo. W tym przykładzie zmiana dotyczy dysku d:, który ma dostępne dodatkowe miejsce na przechowywanie danych.

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

To polecenie ustawia ścieżkę główną zrzutu na żywo na d:\livedumps (przykładowo).

Nie twórz ręcznie folderu, ponieważ zarządza nim system operacyjny i zostanie utworzony automatycznie, gdy zostanie wyzwolony zrzut z odpowiednimi uprawnieniami.

Zobacz też

DTrace w systemie Windows

DTrace Windows Programming

Przykłady kodu systemu Windows DTrace