本主题提供有关 ACX 音频类扩展的日志记录、跟踪和调试的信息。
ACX 驱动程序日志记录
驱动程序的软件跟踪通常基于 Windows 事件跟踪(ETW),这是一个内核级设施,用于记录内核模式和用户模式进程的跟踪消息。 由于 ACX 驱动程序是 WDF 驱动程序,因此所有 WDF 日志记录和事件功能都可供 ACX 驱动程序开发人员使用。
WPP
由于 ETW 的使用可能有些复杂,因此大多数驱动程序开发人员都使用 Windows 软件跟踪预处理器(WPP),这简化了并增强了检测 ETW 跟踪驱动程序的过程。
ACX 使用 WPP 日志进行跟踪和调试。 有关详细信息,请参阅 在 KMDF 驱动程序中使用 WPP 软件跟踪 并将 WPP 软件跟踪添加到 Windows 驱动程序。
In-Flight 记录器(IFR)
In-Flight 记录器(IFR)受支持,可在可用时通过 WDFKD、RCDRKD 或 ACXKD 调试器扩展查看。 有关使用 IFR 日志的一般信息,请参阅 在 KMDF 和 UMDF 2 驱动程序中使用 Inflight 跟踪记录器(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跟踪和可重用跟踪代码的示例。 有关烤箱示例的详细信息,请参阅 “烤箱示例驱动程序”。
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。