本主題提供 ACX 音訊類別延伸模組記錄、追蹤和偵錯的相關資訊。
ACX 驅動程式記錄
驅動程式的軟體追蹤通常是以 Windows 事件追蹤為基礎(ETW),這是一個核心層級的設施,可記錄內核模式和使用者模式進程的追蹤訊息。 由於 ACX 驅動程式是 WDF 驅動程式,因此 ACX 驅動程式開發人員可以使用所有 WDF 記錄和事件功能。
WPP
由於 ETW 可能有些複雜,因此大多數驅動程式開發人員都會使用 Windows 軟體追蹤預處理器(WPP),此工具可以簡化並增強將驅動程式設置為 ETW 追蹤的過程。
ACX 會使用 WPP 記錄進行追蹤和偵錯。 如需詳細資訊,請參閱 在 KMDF 驅動程式中使用 WPP 軟體追蹤 和 將 WPP 軟體追蹤新增至 Windows 驅動程式。
In-Flight 記錄儀 (IFR)
支援 In-Flight 記錄器 (IFR),而且可以透過 WDFKD、RCDRKD 或使用 ACXKD 偵錯工具延伸模組 (如果可用) 來檢視。 如需使用 IFR 記錄的一般資訊,請參閱 在 KMDF 和 UMDF 2 驅動程式中使用進行中追蹤記錄器 (IFR) 和 影片:在沒有偵錯工具的情況下存取驅動程式 IFR 記錄
ACX 會使用其他 ETW 提供者記錄重要事件,以簡化這些特殊事件的視覺效果。
將記錄新增至驅動程式
誠摯建議第三方驅動程式也採用 WPP 和 ETW 事件。
此範例程式碼顯示檢查傳回值並記錄適當的錯誤。
//
// The driver uses this DDI to delete the circuits from the current device.
//
status = AcxDeviceRemoveCircuit(Device, devCtx->Speaker);
if (!NT_SUCCESS(status)) { DrvLogError(g_AudioDspLog, FLAG_INIT, L"Failed to remove speaker circuit, continuing with ReleaseHardware, %!STATUS!", status); }
status = AcxDeviceRemoveCircuit(Device, devCtx->MicArray);
if (!NT_SUCCESS(status)) { DrvLogError(g_AudioDspLog, FLAG_INIT, L"Failed to remove micarray circuit, continuing with ReleaseHardware, %!STATUS!", status); }
status = AcxDeviceRemoveCircuit(Device, devCtx->SpeakerHp);
if (!NT_SUCCESS(status)) { DrvLogError(g_AudioDspLog, FLAG_INIT, L"Failed to remove speakerHp circuit, continuing with ReleaseHardware, %!STATUS!", status); }
status = AcxDeviceRemoveCircuit(Device, devCtx->MicrophoneHp);
if (!NT_SUCCESS(status)) { DrvLogError(g_AudioDspLog, FLAG_INIT, L"Failed to remove microphoneHp circuit, continuing with ReleaseHardware, %!STATUS!", status); }
status = AcxDeviceRemoveCircuit(Device, devCtx->HDMI);
if (!NT_SUCCESS(status)) { DrvLogError(g_AudioDspLog, FLAG_INIT, L"Failed to remove HDMI circuit, continuing with ReleaseHardware, %!STATUS!", status); }
Toaster 驅動程式範例程式碼的精選版本提供 WMI 追蹤的範例,以及可重複使用的追蹤程式碼。 如需 Toaster 範例的詳細資訊,請參閱 Toaster 範例驅動程式。
ACX 驅動程式記錄的建議
若要改善 ACX 驅動程式的可靠性,請考慮下列記錄行為。
- 來自資料流緩衝 IO 或其他一般訊號處理作業的非預期傳回值。
- 非預期的電源狀態或電源狀態轉換。
- 與更新或重新安裝期間進行的呼叫相關的錯誤。
- 其他可能導致「無音訊」的行為可以考慮列入記錄。
使用 WMI 追蹤偵錯工具延伸模組
若要檢視偵錯工具中的追蹤事件,請使用 WMI 延伸模組 Wmitrace.dll。 它包含一個函數庫,旨在控制和查看 WMI 事件追蹤。 如需詳細資訊,請參閱 WMI 追蹤延伸模組 (Wmitrace.dll)。
ACX 驅動程式偵錯
ACX 驅動程式是 WDF 驅動程式,因此針對 WDF 驅動程式描述的偵錯技術會套用至 ACX 驅動程式。 如需偵錯 WDF 驅動程式的相關資訊,請參閱下列主題。
偵錯工具的一般資訊
適用於 Windows 的偵錯工具(WinDbg、KD、CDB、NTSD)
KMDF 偵錯
本逐步解說會使用傳統的 Sysvad 音訊驅動程式,但說明一些可能有助於 ACX 驅動程式的技術。 除錯驅動程式 - 逐步實驗(Sysvad 核心模式)
影片操作指南
ACX 核心偵錯工具擴充功能庫 (AcxKd.dll)
為了協助偵錯,ACX 有隨附的核心偵錯工具擴充功能庫 (AcxKd.dll) 。 該庫可幫助開發人員跟踪單堆棧和多堆棧音頻路徑上的問題。 kd 延伸模組可讓開發人員查看 ACX 結構內部。
如需偵錯 ACX 驅動程式和使用 AcxKd.dll 偵錯工具延伸模組的詳細資訊,請參閱 !acxkd。