錯誤檢查0x133:DPC_WATCHDOG_VIOLATION
DPC_WATCHDOG_VIOLATION錯誤檢查的值為 0x00000133。 此錯誤檢查表示 DPC 監視程式已執行,可能是因為它偵測到單一長時間執行的延後過程調用 (DPC),或因為系統長時間在中斷要求層級 (IRQL) 上花費了DISPATCH_LEVEL或更新版本。
參數 1 的值表示單一 DPC 超過逾時,還是系統在 IRQL DISPATCH_LEVEL 或更新版本上累計花費了較長的時間。 DPC 的運行時間不應超過 100 毫秒,而 ISR 的運行時間不應超過 25 微秒,但系統上的實際逾時值設定得要高得多。
如需 DPC 的詳細資訊,請參閱 帕維爾·約西夫維奇、Mark E. Russinovich、David A. 所羅門和亞歷克斯·伊內斯庫的 DPC 物件 和 Windows Internals 7 第 1 部分簡介。
重要
本文適用於程式設計人員。 如果您是在使用計算機時收到藍色畫面錯誤碼的客戶,請參閱 針對藍色畫面錯誤進行疑難解答。
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)
如需 Windows DPC 的詳細資訊,請參閱 Windows Internals 7th Edition 第 1 部分,By Pavel Yosifovich、Mark E. Russinovich、David A. 所羅門和 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) 命令,更深入地查看正在執行的程式碼細節。
!pcr 擴充功能會顯示特定處理器上處理器控制區域 (NP) 的目前狀態。 在輸出中將是中國銀行的位址
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 監看員的其他資訊。 針對位址,請使用 !HTTP 輸出中所列的 Prcb:
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 規格取得必要硬體的相關信息。
如需其他一般疑難解答資訊,請參閱 分析錯誤檢查藍屏幕數據。