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.
Před nalezením selhalého procesu se ujistěte, že jste v kontextu přijímajícího procesoru. Chcete-li určit přijímající procesor, použijte rozšíření !pcr na každém procesoru a vyhledejte procesor, pro který byla načtena obslužná rutina výjimky. Obslužná rutina výjimky přijímajícího procesoru má jinou adresu než 0xFFFFFFFF.
Například vzhledem k tomu, že adresa NtTib.ExceptionList v tomto procesoru je 0xFFFFFFFF, nejedná se o procesor s neúspěšným procesem:
0: kd> !pcr
PCR Processor 0 @ffdff000
NtTib.ExceptionList: ffffffff
NtTib.StackBase: 80470650
NtTib.StackLimit: 8046d860
NtTib.SubSystemTib: 00000000
NtTib.Version: 00000000
NtTib.UserPointer: 00000000
NtTib.SelfTib: 00000000
SelfPcr: ffdff000
Prcb: ffdff120
Irql: 00000000
IRR: 00000000
IDR: ffffffff
InterruptMode: 00000000
IDT: 80036400
GDT: 80036000
TSS: 80257000
CurrentThread: 8046c610
NextThread: 00000000
IdleThread: 8046c610
DpcQueue:
Výsledky procesoru 1 se ale liší. V tomto případě je hodnota NtTib.ExceptionListf0823cc0, nikoli 0xFFFFFFFF, což znamená, že se jedná o procesor, na kterém došlo k výjimce.
0: kd> ~1
1: kd> !pcr
PCR Processor 1 @81497000
NtTib.ExceptionList: f0823cc0
NtTib.StackBase: f0823df0
NtTib.StackLimit: f0821000
NtTib.SubSystemTib: 00000000
NtTib.Version: 00000000
NtTib.UserPointer: 00000000
NtTib.SelfTib: 00000000
SelfPcr: 81497000
Prcb: 81497120
Irql: 00000000
IRR: 00000000
IDR: ffffffff
InterruptMode: 00000000
IDT: 8149b0e8
GDT: 8149b908
TSS: 81498000
CurrentThread: 81496d28
NextThread: 00000000
IdleThread: 81496d28
DpcQueue:
Pokud jste ve správném kontextu procesoru, !process rozšíření zobrazí aktuálně spuštěný proces.
Nejzajímavějšími částmi výpisu procesu jsou:
Časy (vysoká hodnota označuje, že proces může být příčinou).
Počet popisovačů (číslo uvedené v závorce za ObjectTable v první položce).
Stav vlákna (mnoho procesů má více vláken). Pokud je aktuální proces nečinný, je pravděpodobné, že stroj je skutečně nečinný nebo se zablokoval v důsledku nějakého neobvyklého problému.
Použití rozšíření !process 0 7 je sice nejlepší způsob, jak najít problém na zaseknutém systému, ale někdy poskytuje příliš mnoho informací na filtrování. Místo toho použijte !process 0 0 a poté !process na popisovač procesu pro CSRSS a všechny ostatní podezřelé procesy.
Při použití !process 0 7může být mnoho vláken označeno jako "zásobník jádra nebyl načten", protože tyto zásobníky jsou vystránkované. Pokud jsou tyto stránky stále v mezipaměti, která je v přechodu, můžete získat další podrobnosti pomocí .cache dekódovat před !process 0 7:
kd> .cache decodeptes
kd> !process 0 7
Pokud můžete identifikovat proces, který selhává, použijte !process<>7 k zobrazení zásobníků jádra pro každé vlákno v tomto procesu. Tento výstup může identifikovat problém v režimu jádra a odhalit, co podezřelý proces volá.
Kromě !processvám můžou pomoct následující rozšíření určit příčinu nereagujícího počítače:
| Prodloužení | Účinek |
|---|---|
Identifikuje vlákna, která jsou připravená ke spuštění, v pořadí podle priority. |
|
Identifikuje všechny zámky uložených prostředků v případě, že dojde k zablokování s vypršením časového limitu maloobchodního prodeje. |
|
Zkontroluje využití virtuální paměti. |
|
Určuje, zda je jeden typ alokace fondu nepřiměřeně velký (požadováno označování fondu). |
|
Zkontroluje stav fyzické paměti. |
|
Kontroluje platnost haldy. |
|
Prohledává nestránkovaný fond pro aktivní IRP. |
Pokud zadané informace nenaznačují neobvyklou situaci, zkuste nastavit místo přerušení na ntoskrnl!KiSwapThread, aby bylo možné určit, jestli je procesor zablokovaný v jednom procesu nebo jestli stále plánuje jiné procesy. Pokud není zablokovaný, nastavte zarážky v běžných funkcích, jako je například NtReadFile, abyste určili, zda je počítač zablokovaný v konkrétní cestě kódu.