Sdílet prostřednictvím


Referenční dokumentace kódu živého výpisu paměti jádra

Tato část obsahuje popis běžných kódů výpisů paměti jádra za provozu, ke kterým může dojít. Živé výpisy paměti neobnovují operační systém, ale umožňují zachycení informací o paměti v neobvyklých situacích, kdy může operační systém pokračovat.

Poznámka:

Toto téma je určené pro programátory. Pokud jste zákazník, jehož systém zobrazil modrou obrazovku s kódem kontroly chyb, přečtěte si téma Řešení chyb s modrou obrazovkou.

Živé výpisy stavu jádra ve srovnání se kontrolou chyb

Při tradiční kontrole chyb se počítač resetuje a práce uživatele se přeruší. Cílem live dumpu jádra je shromáždit data, aby bylo možné vyřešit neobvyklou situaci, ale zároveň umožnit operačnímu systému pokračovat v provozu. Tímto se snižují prostoje v porovnání s kontrolou chyb při selháních s vysokým dopadem a zásekech, které nejsou fatální. Výpisy paměti jádra se používají, když je možné obnovit operační systém do známého dobrého stavu. Například resetování hardwaru subsystému, jako je video/displej, USB3 nebo Wi-Fi může těmto systémům umožnit návrat do známého dobrého stavu s minimálním dopadem na uživatele.

Dynamický výpis paměti jádra vytvoří konzistentní snímek paměti jádra a uloží ho do souboru s výpisem paměti pro budoucí analýzu. Aby se minimalizoval dopad na výkon, používají se techniky kopírování paměti k vytvoření výpisového souboru za krátkou dobu. Kromě toho je kolekce dynamických výpisů paměti omezena, aby byl dopad na uživatele minimalizován.

Výpis živého jádra je efektivní pro kategorii problémů, kdy něco trvá dlouho, a přesto nic technicky neselhává. Časovač sledovacího zařízení lze inicializovat při spuštění operace. Pokud sledovací zařízení vyprší před dokončením operace v očekávaném čase, je možné provést výpis paměti systému za provozu. Výpis paměti se pak dá analyzovat procházením zásobníku volání a souvisejícího řetězce čekání na danou operaci, abyste zjistili, proč se nedokončuje očekávaným časovým rámcem.

Systémové protokoly fungují dobře, když něco selže a vlastník kódu zaznamenal příčinu selhání a může identifikovat příčinu. Živé výpisy paměti, které používají časovače sledovacího systému, se pokoušejí zachytit cesty selhání, které nebyly očekávány a protokolovány. Stejně jako u každého selhání můžou systémové protokoly identifikovat další problémy, které můžou poskytnout vodítka ke konkrétní původní příčině selhání.

Obsah souboru s dynamickým výpisem paměti jádra

Podobně jako běžné soubory s výpisem paměti můžou soubory dynamického výpisu obsahovat minidumps (se sekundárními daty) a úplné výpisy paměti jádra, které můžou obsahovat také paměť uživatelského režimu, podobně jako aktivní výpisy. Obecné informace o obsahu souborů výpisu naleznete v části Odrůdy souborů výpisu Kernel-Mode. Některé výpisy paměti za provozu se pokusí zachytit pouze minivýpisy, protože jsou navržené tak, aby zachytily konkrétní data související s hardwarem, zatímco jiné se mohou pokusit zachytit rozsáhlejší výpis jádra za provozu.

Kvůli výkonu, velikosti souboru a spolehlivosti výpisů nejsou zahrnuty některé informace, jako například stránky ze seznamu čekajících (stand by) položek a mezipaměti souborů.

Živé soubory výpisu paměti obvykle obsahují stránky paměti, například:

  • KdDebuggerBlock
  • Seznam načtených modulů

Pro každý procesor jsou zaznamenány následující informace v výpisech jádra:

  • KiProcessorBlock
  • PRCBs
  • Aktuální technologický stack
  • Aktuální tabulka adresářů stránek
  • KI_USER_SHARED_DATA
  • Obrázek jádra NTOS
  • Obrázek HAL

Další informace o výpisech paměti jádra můžou zahrnovat:

  • Stav vlákna nebo paměti
  • Protokolování v paměti

Některé živé výpisy paměti můžou obsahovat stránky procesu v uživatelském režimu.

Pro některé živé výpisy mohou být zahrnuta další data specifická pro doménu, například data specifická pro USB při selháních USB.

Částečný soubor dynamického výpisu paměti jádra

Částečný soubor dynamického výpisu paměti jádra může být generován v situacích, kdy živé výpisy paměti nemohou spolehlivě zachytit všechny zamýšlené paměťové stránky. Informace zachycené v částečném výpisu jsou filtrovány a upřednostňovány zachycením stránek, které obsahují důležitá data potřebná k vygenerování platného výpisu před jinými stránkami. Například stránky jádra jsou upřednostňovány před uživatelskými stránkami, když dynamický výpis paměti obsahuje uživatelské stránky. V některých situacích není k dispozici dostatek prostředků pro zachycení všech zamýšlených volitelných paměťových stránek, takže v souboru s výpisem paměti nemusí chybět paměť. Soubor výpisu paměti by měl ladicí program WinDbg stále rozpoznat, ale při pokusu o výpis paměti může zobrazit chyby. Pokud ladicí program při pokusu o ukládání paměti na adrese zobrazí chybu, můžete pomocí rozšíření !pte zkontrolovat, jestli je PTE pro adresu platný nebo ne. To může pomoct určit, jestli je adresa paměti opravdu neplatná nebo jestli je stránka platná, ale není dostupná v souboru s výpisem paměti.

Analýza souborů s dynamickým výpisem paměti

Když dojde k dynamickému výpisu paměti, soubor s výpisem paměti lze analyzovat pomocí stejných technik, které se používají pro jiné soubory s výpisem paměti. K pochopení obsahu paměti během selhání se vyžaduje znalost registrů paměti procesoru a programování sestavení.

Další informace najdete tady:

Používání WinDbg k zobrazení informací o chybovém kódu zastavení v živém souboru výpisu paměti

Pokud se v tomto tématu nezobrazí konkrétní kód dynamického výpisu paměti, použijte rozšíření !analyze v ladicím programu systému Windows (WinDbg) s následující syntaxí (v režimu jádra) a nahraďte <code> kódem dynamického výpisu paměti:

!analyze -show <code>

Zadáním tohoto příkazu způsobí, že WinDbg zobrazí informace o specifikovaném kódu live dumpu. Pokud výchozí základ čísla není 16, přidejte předponu <code> k .

Zadejte parametry kódu dynamického výpisu do příkazu !analyze, aby se zobrazily všechny dostupné informace o parametrech. Pokud chcete například zobrazit informace o kontrole chyb 0x144 BUGCODE_USB3_DRIVER s hodnotou parametru 1 0x3003, použijte !analyze -show 0x144 0x3003 , jak je znázorněno zde.

0: kd> !analyze -show 0x144 0x3003
BUGCODE_USB3_DRIVER (144)
This bugcheck usually happens when the USB3 core stack detects an invalid
operation being performed by a USB client. This bugcheck may also occur
due to hardware failure on a USB Boot Device.
Arguments:
Arg1: 0000000000003003, USB3_WER_BUGCODE_USBHUB3_DEVICE_ENUMERATION_FAILURE
	A USB device failed enumeration.
Arg2: 0000000000000000, USBHUB3_LIVEDUMP_CONTEXT
Arg3: 0000000000000000, 0
Arg4: 0000000000000000, 0

Pokud chcete stáhnout WinDbg, přečtěte si téma Nástroje ladění pro Windows. Další informace o vývojových nástrojích WinDbg najdete v tématu Začínáme s laděním systému Windows.

Umístění souborů dynamického výpisu paměti

Ve výchozím nastavení jsou live dumpy uložené v adresáři C:\WINDOWS\LiveKernelReports.

Úplné výpisy paměti: %systemroot%\LiveKernelReports\*.dmp

Minidumps: %systemroot%\LiveKernelReports\<ComponentName>\*.dmp

Adresářová struktura se používá k ukládání výpisů paměti za provozu pro různé komponenty.

NDIS
PDCRevocation
PoW32kWatchdog
USBHUB3
WATCHDOG

Klíče registru pro aktivní výpis

Další informace o možnostech konfigurace pro sestavy živého jádra generované systémem najdete v tématu Nastavení WER.

Ruční aktivace dynamického výpisu paměti pomocí PowerShellu

  1. Otevřete příkazový řádek PowerShellu jako správce.

  2. Získejte popisný název úložiště pomocí příkazu Get-StorageSubSystem PowerShellu.

 C:\> Get-StorageSubSystem
 FriendlyName                     HealthStatus OperationalStatus
 ------------                     ------------ -----------------
 Windows Storage on 10-2411-PC    Healthy      OK
  1. Pomocí Get-StorageDiagnosticInfo vygenerujte živý výpis pro výše uvedený subsystém (spolu s dalšími diagnostickými logy). Další informace naleznete v tématu Get-StorageDiagnosticInfo.
 C:\> Get-StorageDiagnosticInfo -StorageSubSystemFriendlyName "Windows Storage on 10-2411-PC" -IncludeLiveDump -DestinationPath C:\destinationfolder
  1. Výstup bude indikovat, že se generují požadované informace.
Gathering storage subsystem diagnostic information                                                                         
Running                                                                                                                 
[oooooooooooo                                                                                              ] 
  1. Výpis bude uvnitř [DestinationPath]\localhost.
 C:\> dir C:\destinationfolder\localhost\*.dmp
   Directory: C:\destinationfolder\localhost
 Mode                LastWriteTime         Length Name
 ----                -------------         ------ ----
 -a----         5/5/2016   1:08 PM      867135488 LiveDump.dmp
  1. Použití ladicího programu ke spuštění !analyze v souboru s výpisem paměti bude indikovat, že se jedná o kód dynamického výpisu LIVE_SYSTEM_DUMP (161).

Kódy živého výpisu jádra

Následující tabulka obsahuje odkazy na kódy živých výpisů jádra.

Code Název
0x000000AB SESSION_HAS_VALID_POOL_ON_EXIT
0x00000117 VIDEO_TDR_TIMEOUT_DETECTED
0x00000141 VIDEO_ENGINE_TIMEOUT_DETECTED
0x00000142 VIDEO_TDR_APLIKACE_BLOKOVÁNA
0x00000156 WINSOCK_DETECTED_HUNG_CLOSESOCKET_LIVEDUMP
0x0000015C PDC_WATCHDOG_TIMEOUT_LIVEDUMP
0x0000015D SOC_SUBSYSTEM_FAILURE_LIVEDUMP
0x0000015E BUGCODE_NDIS_DRIVER_LIVE_DUMP
0x0000015F CONNECTED_STANDBY_WATCHDOG_TIMEOUT_LIVEDUMP
0x00000161 LIVE_SYSTEM_DUMP
0x00000165 CLUSTER_CSV_STATUS_IO_TIMEOUT_LIVEDUMP
0x00000166 CLUSTER_RESOURCE_CALL_TIMEOUT_LIVEDUMP
0x00000167 CLUSTER_CSV_SNAPSHOT_DEVICE_INFO_TIMEOUT_LIVEDUMP
0x00000168 CLUSTER_CSV_STATE_TRANSITION_TIMEOUT_LIVEDUMP
0x00000169 CLUSTER_CSV_VOLUME_ARRIVAL_LIVEDUMP
0x0000016A CLUSTER_CSV_VOLUME_REMOVAL_LIVEDUMP
0x0000016B CLUSTER_CSV_CLUSTER_WATCHDOG_LIVEDUMP
0x0000016F CLUSTER_CSV_STATE_TRANSITION_INTERVAL_TIMEOUT_LIVEDUMP
0x00000175 PŘEDCHOZÍ_KRITICKÁ_ABNORMÁLNÍ_CHYBA_RESETOVÁNÍ
0x00000179 CLUSTER_CLUSPORT_STATUS_IO_TIMEOUT_LIVEDUMP
0x0000017C PDC_LOCK_WATCHDOG_LIVEDUMP
0x0000017D PDC_UNEXPECTED_REVOCATION_LIVEDUMP
0x00000187 VIDEO_DWMINIT_TIMEOUT_FALLBACK_BDD
0x00000188 CLUSTER_CSVFS_LIVEDUMP
0x00000190 WIN32K_CRITICAL_FAILURE_LIVEDUMP
0x00000193 VIDEO_DXGKRNL_LIVEDUMP
0x00000195 SMB_SERVER_LIVEDUMP
0x00000198 UFX_LIVEDUMP
0x0000019D CLUSTER_SVHDX_LIVEDUMP
0x000001A1 WIN32K_CALLOUT_WATCHDOG_LIVEDUMP
0x000001A3 CALL_HAS_NOT_RETURNED_WATCHDOG_TIMEOUT_LIVEDUMP
0x000001A4 DRIPS_SW_HW_DIVERGENCE_LIVEDUMP
0x000001A5 USB_DRIPS_BLOCKER_SURPRISE_REMOVAL_LIVEDUMP
0x000001A6 BLUETOOTH_ERROR_RECOVERY_LIVEDUMP
0x000001A7 SMB_REDIRECTOR_LIVEDUMP
0x000001A8 VIDEO_DXGKRNL_BLACK_SCREEN_LIVEDUMP
0x000001A9 DIRECTED_FX_TRANSITION_LIVEDUMP
0x000001B0 VIDEO_MINIPORT_FAILED_LIVEDUMP
0x000001B8 VIDEO_MINIPORT_BLACK_SCREEN_LIVEDUMP
0x000001C4 DRIVER_VERIFIER_DETECTED_VIOLATION_LIVEDUMP
0x000001C5 IO_THREADPOOL_DEADLOCK_LIVEDUMP
0x000001C9 USER_MODE_HEALTH_MONITOR_LIVEDUMP
0x000001CC EXRESOURCE_TIMEOUT_LIVEDUMP
0x000001D1 TELEMETRY_ASSERTS_LIVEDUMP
0x000001D4 UCMUCSI_LIVEDUMP
0x000001E1 DEVICE_DIAGNOSTIC_LOG_LIVEDUMP
0x000001F5 APPLICATION_HANG_KERNEL_LIVEDUMP
0x000021C8 MANUALLY_INITIATED_BLACKSCREEN_HOTKEY_LIVE_DUMP

Tyto kódy stop se mohou použít pro výpisy paměti za běhu nebo ke kontrole chyb zařízení.

Code Název
0x00000124 WHEA_UNCORRECTABLE_ERROR
0x00000144 BUGCODE_USB3_DRIVER
0x00000164 WIN32K_CRITICAL_FAILURE

Viz také

Referenční informace ke kódu kontroly chyb

!analyze

Kontroly chyb (modré obrazovky)

Analýza chyb – Kontrola dat na modré obrazovce