錯誤檢查0x133:DPC_WATCHDOG_VIOLATION

DPC_WATCHDOG_VIOLATION錯誤檢查的值為 0x00000133。 這個錯誤檢查表示執行 DPC 監視程式,可能是因為偵測到單一長時間執行的延後程序呼叫 (DPC) ,或因為系統長時間在中斷要求層級 (IRQL) DISPATCH_LEVEL DISPATCH_LEVEL或更新版本。

參數 1 的值會指出單一 DPC 是否超過逾時,或系統是否在 IRQL DISPATCH_LEVEL 或更新版本累計花費一段時間。 DPC 不應執行超過 100 微秒,而 ISR 不應執行超過 25 微秒,不過系統上的實際逾時值會設定得更高。

如需 DPC 的詳細資訊,請參閱 DPC 物件Windows Internals 7 第 1 版第 1 部分,作者:Foundationl Yosifovich、Mark E. Russinovich、David A. Guy 和 Alex Ionescu。

重要

本文適用于程式設計人員。 如果您是在使用電腦時收到藍色螢幕錯誤碼的客戶,請參閱 針對藍色畫面錯誤進行疑難排解

DPC_WATCHDOG_VIOLATION參數

參數 1 表示違規類型。 其他參數的意義取決於 參數 1的值。

參數 1 參數 2 參數 3 參數 4 錯誤原因
0 DPC 時間計數 (刻度) DPC 時間批註 (刻度) 。 轉換成 nt!DPC_WATCHDOG_GLOBAL_TRIAGE_BLOCK,其中包含此單一 DPC 逾時的其他資訊 單一 DPC 或 ISR 超過其時間配置。 違規元件通常可以使用堆疊追蹤來識別。
1 監視程式期間 轉換成 nt!DPC_WATCHDOG_GLOBAL_TRIAGE_BLOCK,其中包含此單一 DPC 逾時的其他資訊 保留 系統在 IRQL DISPATCH_LEVEL 或更新版本上累積花費了一段較長的時間。 違規元件通常可以使用堆疊追蹤來識別。

原因

若要判斷原因,需要 Windows 偵錯工具、程式設計體驗,以及錯誤模組原始程式碼的存取權。

如需詳細資訊,請參閱下列主題:

使用 Windows 偵錯工具進行損毀傾印分析 (WinDbg)

使用 WinDbg 分析 Kernel-Mode 傾印檔案

使用 !analyze 延伸模組!analyze

如需 Windows DPC 的詳細資訊,請參閱 Windows Internals 7th Edition 第 1 部分,作者:Foundationl Yosifovich、Mark E. Russinovich、David A.Guy 和 Alex Ionescu。

範例 1

!analyze偵錯延伸模組會顯示錯誤檢查的相關資訊,有助於判斷根本原因。

參數 1 = 0

在此範例中,501 的刻度計數超過 500 的 DPC 時間配置。 映射名稱表示當錯誤檢查發生時,此程式碼正在執行。

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
...

使用下列偵錯工具命令,使用參數 0 收集失敗的詳細資訊:

k (顯示堆疊回溯) ,以查看停止程式碼發生時執行的程式碼。

您可能想要使用 u、ub、uu (Unassemble) 命令來深入探討執行的程式碼細節。

!pc延伸模組會顯示特定處理器上的處理器控制區域 (PC) 的目前狀態。 在輸出中,將會是中國文的位址

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

您可以使用 dt (Display Type) 命令來顯示 DPC 和 DPC 監看程式的其他資訊。 針對位址,請使用 !pc 輸出中所列的中國b:

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

範例 2

參數 1 = 1

針對 1 的參數,程式碼可能不會在程式碼的違規區域中停止。 在此案例中,有一種方法是使用事件追蹤來嘗試追蹤哪個驅動程式超過其正常執行持續時間。

使用 !analyze 偵錯延伸模組來顯示錯誤檢查的相關資訊。

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

轉換 nt 的位址!DPC_WATCHDOG_GLOBAL_TRIAGE_BLOCK以顯示其相關資訊。

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

使用 !dpcs 命令來顯示已排入佇列的 DPC。

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

解決方案

若要判斷特定原因並建立程式碼修正,則需要程式設計體驗和存取錯誤模組的原始程式碼。

備註

一般而言,此停止程式碼是由在特定情況下的錯誤驅動程式程式碼所造成,不會在分配的時間範圍內完成其工作。

如果您不熟悉此問題的 Windows 偵錯工具,您應該使用一些基本的疑難排解技術。

  • 如果在錯誤檢查訊息中識別驅動程式,若要隔離問題,請停用驅動程式。 請洽詢製造商以取得驅動程式更新。

  • 檢查系統登入事件檢視器是否有其他錯誤訊息,以協助識別造成錯誤檢查的裝置或驅動程式0x133。

  • 確認已安裝的任何新硬體都與已安裝的 Windows 版本相容。 例如,Windows 10,您可以在Windows 10規格取得必要硬體的相關資訊。

  • 如需其他一般疑難排解資訊,請參閱 藍色螢幕資料

另請參閱

使用 Windows 偵錯工具進行損毀傾印分析 (WinDbg)

使用 WinDbg 分析 Kernel-Mode 傾印檔案

錯誤檢查代碼參考