Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Es posible realizar la depuración de kernel local iniciando el depurador de kernel (KD) o WinDbg con la opción de línea de comandos -kl:
kd [-y SymbolPath] -kl
o
windbg [-y SymbolPath] -kl
En Windows Vista y versiones posteriores, la depuración del kernel local requiere que el equipo se inicie con la opción /debug. Abra una ventana del símbolo del sistema como administrador y escriba bcdedit /debug en. Reinicie el equipo.
Importante
Antes de usar BCDEdit para cambiar la información de arranque, es posible que deba suspender temporalmente las características de seguridad de Windows, como BitLocker y Arranque seguro en el equipo de prueba. Vuelva a habilitar estas características de seguridad cuando se completen las pruebas y administren correctamente el equipo de prueba cuando se deshabilitan las características de seguridad.
En Windows Vista y versiones posteriores, la depuración del kernel local requiere que el depurador se ejecute como administrador.
La depuración local en vivo es extremadamente útil para depurar problemas difíciles de reproducir cuando se adjunta el depurador; sin embargo, es poco probable que todo lo que requiera conocimiento de la información crítica del tiempo, incluidos los datos de paquetes, IRP y SRB, funcione a menos que el problema sea un bloqueo o una detención.
Al realizar la depuración local, tenga en cuenta las siguientes variables:
Estados generales. Por ejemplo, ¿se está ejecutando la transmisión? ¿La transmisión está en pausa?
Recuento de paquetes. Por ejemplo, ¿hay IRPs en cola en la transmisión?
Cambios en los recuentos de paquetes. ¿La corriente se está moviendo?
Cambios en listas de paquetes.
Subprocesos de kernel bloqueados.
Tenga en cuenta la última de estas opciones.
Examinar un Hilo Bloqueado en LKD
En primer lugar, use la extensión !process 0 0 para identificar el proceso que contiene el subproceso bloqueado. A continuación, ejecute !process nuevamente para más información sobre ese hilo:
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
Los subprocesos no se muestran, pero las direcciones de pila sí se muestran. El uso del comando dds (o ddq) en la dirección actual de la pila produce un punto de partida para una investigación posterior, ya que especifica qué proceso llama.
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