Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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
Otevřete příkazový řádek PowerShellu jako správce.
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
- 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
- Výstup bude indikovat, že se generují požadované informace.
Gathering storage subsystem diagnostic information
Running
[oooooooooooo ]
- 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
- 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.
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