Compartir a través de


Comprobación de errores 0x133: DPC_WATCHDOG_VIOLATION

La comprobación de errores DPC_WATCHDOG_VIOLATION tiene un valor de 0x00000133. Esta comprobación de errores indica que el guardián de DPC se ejecutó, ya sea porque detectó una única llamada de procedimiento diferido de larga duración (DPC) o porque el sistema pasó un tiempo prolongado en un nivel de solicitud de interrupción (IRQL) de DISPATCH_LEVEL o superior.

El valor del parámetro 1 indica si un único DPC superó un tiempo de espera o si el sistema pasó un período prolongado de tiempo en IRQL DISPATCH_LEVEL o superior. Los DPC no deben ejecutar más de 100 microsegundos e ISR no deben ejecutarse más de 25 microsegundos, pero los valores de tiempo de espera reales en el sistema se establecen mucho más altos.

Para obtener más información sobre los DPC, consulte Introduction to DPC Objects y Windows Internals 7th Edition Part 1 de Pavel Yosifovich, Mark E. Russinovich, David A. Solomon y Alex Ionescu.

Importante

Este artículo va dirigido a programadores. Si es un cliente que ha recibido un código de error de pantalla azul mientras usa el equipo, consulte Solución de errores de pantalla azul.

Parámetros de DPC_WATCHDOG_VIOLATION

El parámetro 1 indica el tipo de infracción. El significado de los demás parámetros depende del valor del Parámetro 1.

Parámetro 1 Parámetro 2 Parámetro 3 Parámetro 4 Causa del error
0 Recuento de tiempo de DPC (en tics) Asignación de tiempo DPC (en tics). conversión a nt! DPC_WATCHDOG_GLOBAL_TRIAGE_BLOCK, que contiene información adicional sobre este único tiempo de espera de DPC Un único DPC o ISR superó su asignación de tiempo. Normalmente, el componente infractor se puede identificar con un seguimiento de pila.
1 El período de guardián conversión a nt! DPC_WATCHDOG_GLOBAL_TRIAGE_BLOCK, que contiene información adicional sobre este único tiempo de espera de DPC Reserved El sistema pasó de forma acumulativa un período prolongado de tiempo en IRQL DISPATCH_LEVEL o superior. Normalmente, el componente infractor se puede identificar con un seguimiento de pila.

Causa

Para determinar la causa se requiere el depurador de Windows, experiencia en programación y acceso al código fuente del módulo que falla.

Para obtener más información, consulte los siguientes temas:

Análisis de volcado de memoria mediante los depuradores de Windows (WinDbg)

Análisis de un archivo de volcado en modo kernel con WinDbg

Uso de la extensión !analyze y !analyze

Para obtener más información sobre Windows DPC, consulte Windows Internals 7th Edition Part 1 de Pavel Yosifovich, Mark E. Russinovich, David A. Solomon y Alex Ionescu.

Ejemplo 1

La extensión de depuración !analyze indica información sobre la comprobación de errores y puede resultar útil para determinar la causa principal.

Parámetro 1 = 0

En este ejemplo, el recuento de tics de 501 supera la asignación de tiempo de DPC de 500. El nombre de la imagen indica que este código se estaba ejecutando cuando se produjo la comprobación de errores.

0: kd> !analyze -v
*******************************************************************************
*                                                                             *
*                        Bugcheck Analysis                                    *
*                                                                             *
*******************************************************************************

DPC_WATCHDOG_VIOLATION (133)
The DPC watchdog detected a prolonged run time at an IRQL of DISPATCH_LEVEL
or above.
Arguments:
Arg1: 0000000000000000, A single DPC or ISR exceeded its time allotment. The offending
    component can usually be identified with a stack trace.
Arg2: 0000000000000501, The DPC time count (in ticks).
Arg3: 0000000000000500, The DPC time allotment (in ticks).
Arg4: 0000000000000000

...

IMAGE_NAME:  BthA2DP.sys
...

Use los siguientes comandos del depurador para recopilar más información sobre los errores con un parámetro 0:

k (Mostrar seguimiento de pila) para ver qué código se estaba ejecutando cuando se produjo el código de detención.

Es posible que quiera usar el comando u, ub, uu (Desensamblar) para profundizar en los detalles del código que se estaba ejecutando.

La extensión !pcr muestra el estado actual de la región de control del procesador (PCR) en un procesador específico. En la salida será la dirección del Prcb.

0: kd> !pcr
KPCR for Processor 0 at fffff8035f5a4000:
    Major 1 Minor 1
	NtTib.ExceptionList: fffff80368e77fb0
	    NtTib.StackBase: fffff80368e76000
	   NtTib.StackLimit: 0000000000000000
	 NtTib.SubSystemTib: fffff8035f5a4000
	      NtTib.Version: 000000005f5a4180
	  NtTib.UserPointer: fffff8035f5a4870
	      NtTib.SelfTib: 000000b6d3086000

	            SelfPcr: 0000000000000000
	               Prcb: fffff8035f5a4180
	               Irql: 0000000000000000
	                IRR: 0000000000000000
	                IDR: 0000000000000000
	      InterruptMode: 0000000000000000
	                IDT: 0000000000000000
	                GDT: 0000000000000000
	                TSS: 0000000000000000

	      CurrentThread: fffff80364926a00
	         NextThread: ffffe40b77c12040
	         IdleThread: fffff80364926a00

Puede usar el comando dt (Tipo de visualización) para mostrar información adicional sobre los DPC y el guardián de DPC. Para la dirección, use el Prcb enumerado en la salida !pcr:

dt nt!_KPRCB fffff80309974180 Dpc* 
0: kd> dt nt!DPC_WATCHDOG_GLOBAL_TRIAGE_BLOCK fffff803648fa320
   +0x000 Signature        : 0xaebecede
   +0x004 Revision         : 1
   +0x006 Size             : 0x10
   +0x008 DpcWatchdogProfileOffset : 0x84a8
   +0x00c DpcWatchdogProfileLength : 0x8200

Ejemplo 2

Parámetro 1 = 1

Para el parámetro 1, es posible que el código no se detenga en el área del código infractor. En este caso, un enfoque consiste en usar el seguimiento de eventos para intentar realizar un seguimiento del controlador que supera la duración normal de la ejecución.

Use la extensión de depuración !analyze para mostrar información sobre la comprobación de errores.

0: kd> !analyze -v
*******************************************************************************
*                                                                             *
*                        Bugcheck Analysis                                    *
*                                                                             *
*******************************************************************************

DPC_WATCHDOG_VIOLATION (133)
The DPC watchdog detected a prolonged run time at an IRQL of DISPATCH_LEVEL
or above.
Arguments:
Arg1: 0000000000000001, The system cumulatively spent an extended period of time at
	DISPATCH_LEVEL or above. The offending component can usually be
	identified with a stack trace.
Arg2: 0000000000001e00, The watchdog period.
Arg3: fffff803648fa320, cast to nt!DPC_WATCHDOG_GLOBAL_TRIAGE_BLOCK, which contains
	additional information regarding the cumulative timeout
Arg4: 0000000000000000

Convierta la dirección de nt! DPC_WATCHDOG_GLOBAL_TRIAGE_BLOCK para mostrar información sobre ella.

0: kd> dt nt!DPC_WATCHDOG_GLOBAL_TRIAGE_BLOCK fffff803648fa320
   +0x000 Signature        : 0xaebecede
   +0x004 Revision         : 1
   +0x006 Size             : 0x10
   +0x008 DpcWatchdogProfileOffset : 0x84a8
   +0x00c DpcWatchdogProfileLength : 0x8200

Use el comando !dpcs para mostrar los DPC en cola.

3: kd> !dpcs
CPU Type      KDPC       Function
 0: Normal  : 0xfffff8035f5ac290 0xfffff80363e15630 nt!PpmPerfAction
Failed to read DPC at 0xffffe40b77190dd8
 0: Threaded: 0xfffff8035f5ac3d8 0xfffff80363f27d70 nt!KiDpcWatchdog

Solución

Para determinar la causa específica y crear una corrección de código, se requiere experiencia en programación y acceso al código fuente del módulo que falla.

Comentarios

En general, este código de detención se debe al código de controlador defectuoso que, en determinadas condiciones, no completa su trabajo dentro del período de tiempo asignado.

Si no está equipado para usar el depurador de Windows para este problema, debe usar algunas técnicas básicas de solución de problemas.

  • Si se identifica un controlador en el mensaje de comprobación de errores, para aislar el problema, deshabilite el controlador. Consulte con el fabricante las actualizaciones de controladores.

  • Consulte el registro del sistema en el Visor de eventos para ver otros mensajes de error que puedan ayudarle a identificar el dispositivo o controlador que provoca la comprobaciones de errores 0x133.

  • Confirme que todo el hardware nuevo que se instale sea compatible con la versión instalada de Windows. Por ejemplo, para Windows 10, puede obtener información sobre el hardware necesario en Especificaciones de Windows 10.

  • Para obtener información adicional sobre la solución de problemas generales, consulte Análisis de los datos de la comprobación de errores de la pantalla azul.

Consulte también

Análisis de volcado de memoria mediante los depuradores de Windows (WinDbg)

Análisis de un archivo de volcado en modo kernel con WinDbg

Bug Check Code Reference (Referencia de código de comprobación de errores)