Delen via


Live Lokale foutopsporing

Het is mogelijk om lokale kernelfoutopsporing uit te voeren door het kernelfoutopsporingsprogramma (KD) of WinDbg te starten met de opdrachtregeloptie -kl:

kd [-y SymbolPath] -kl 

of

windbg [-y SymbolPath] -kl 

Voor lokale kernelfoutopsporing in Windows Vista en hoger moet de computer worden opgestart met de optie /debug. Open een opdrachtpromptvenster als administrator en voer bcdedit /debug inin. Start de computer opnieuw op.

Belangrijk

Voordat u BCDEdit gebruikt om opstartgegevens te wijzigen, moet u mogelijk de Windows-beveiligingsfuncties, zoals BitLocker en Beveiligd opstarten, tijdelijk onderbreken op de test-pc. Schakel deze beveiligingsfuncties opnieuw in wanneer het testen is voltooid en de test-pc op de juiste wijze beheert wanneer de beveiligingsfuncties zijn uitgeschakeld.

Voor lokale kernelopsporing in Windows Vista en hoger moet het foutopsporingsprogramma als administrator worden uitgevoerd.

Live debugging op locatie is uiterst nuttig voor het oplossen van problemen die moeilijk te reproduceren zijn wanneer de debugger is gekoppeld; echter, alles wat kennis van tijdgevoelige informatie vereist, inclusief pakket-, IRP- en SRB-gegevens, zal waarschijnlijk niet goed werken, tenzij het probleem een vastloper of een stop is.

Houd rekening met de volgende variabelen bij het uitvoeren van lokale foutopsporing:

  • Algemene staten. Wordt de stream bijvoorbeeld uitgevoerd? Is de stream gepauzeerd?

  • Aantal pakketten. Zijn er IRP's voor de stream in de wachtrij geplaatst?

  • Wijzigingen in aantal pakketten. Beweegt de stream?

  • Wijzigingen in pakketlijsten.

  • Vastgelopen kernelprocessen.

Houd rekening met de laatste van deze.

een vastgelopen thread in LKD onderzoeken

Gebruik eerst de extensie !process 0 0 om het proces met de vastgelopen thread te identificeren. Geef dan opnieuw !proces voor meer informatie over deze thread:

lkd> !process 816a550 7
        THREAD 81705da8  Cid 0b5c.0b60  Teb: 7ffde000 Win32Thread: e1b2d890 WAIT: (Suspended)
        IRP List:
            816c9ad8: (0006,0190) Flags: 00000030  Mdl: 00000000
        Start Address kernel32!BaseProcessStartThunk (0x77e5c650)
        Win32 Start Address 0x0101c9be
        Stack Init f50bf000 Current f50bea74 Base f50bf000 Limit f50b9000 Call 0
        Priority 10 BasePriority 8 PriorityDecrement 0

De threads worden niet weergegeven, maar de stackadressen worden wel weergegeven. Het gebruik van de opdracht dds (of ddq) op het huidige adres op de stack levert een beginpunt op voor nader onderzoek, omdat hiermee wordt aangegeven welk proces wordt aangeroepen.

lkd> dds f50bea74
f50bea74  f50bebc4
f50bea78  00000000
f50bea7c  80805795 nt!KiSwapContext+0x25
f50beab4  8080ece0 nt!KeWaitForSingleObject
f50beabc  f942afda ks!CKsQueue::CancelAllIrps+0x14
f50bead8  f94406c4 ks!CKsQueue::SetDeviceState+0x170
f50beb00  f943f6f1 ks!CKsPipeSection::DistributeDeviceStateChange+0x1d
f50beb24  f943fb1e ks!CKsPipeSection::SetDeviceState+0xb2