如何在各种驱动程序和子系统中启用详细的调试跟踪

针对 Windows XP 的支持已终止

Microsoft 已于 2014 年 4 月 8 日终止了针对 Windows XP 的支持。该更改已影响到您的软件更新和安全选项。 了解这一措施对于您的含义以及如何继续保持受保护状态。

本文已归档。它按“原样”提供,并且不再更新。
概要
当您调试设备驱动程序时,从驱动程序和相关的子系统接收详细的调试跟踪信息很重要。

Microsoft 提供的多数驱动程序和子系统都使用全局变量和预定义的数值集,来控制发送给调试器的调试跟踪信息的详细程度。

本文讨论以下主题:
  • 如何使用内核调试器和注册表值来启用和控制调试跟踪级别。
  • 对于特定类别的驱动程序,可以使用相应的调试器扩展来启用和控制调试跟踪。
  • 在 Windows 2000 和 Windows XP 中启用调试跟踪的区别。
更多信息
重要说明:本文包含有关运行 .chk 文件以进行开发和测试的信息。Microsoft 产品支持服务 (PSS) 不支持安装有 .chk 文件的生产系统,但 PSS 为隔离问题而通知您安装的 .chk 文件除外。在生产系统上安装 .chk 文件之前,请确保您知道如何在出现问题时还原所替换的文件。

有关 .chk 文件的更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
103659在检查硬件时设置挂起;如何使用 Ntdetect.com
320040 如何使用 Ntdetect.chk 识别 Windows 2000 中的硬件问题
有关如何备份和还原系统的信息,请查看 Windows 2000 帮助和支持。 有关 NTbackup 的更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
240363如何在 Windows 2000 中使用备份程序备份和还原系统状态
您还可以与您的备份产品提供商联系,以获取有关如何使用其产品的信息。

注意:以下调试信息会随时更改,并且只用于驱动程序调试目的。另请注意,调试信息对于任何非开发人员可能不是特别有用。

视频微型端口调试

请注意以下有关视频微型端口调试的信息:
  • 它需要可调试的内部版本视频端口和微型端口驱动程序。
  • 它不使用调试器扩展。
  • 它通过设置一个或多个全局变量来启用调试跟踪。
  • Windows 2000 中的变量名与 Windows XP 中的变量名不同。
  • 在 Windows 2000 中,可以通过注册表或调试器启用调试跟踪,如下所示:
    • 设置注册表中 VideoDebugLevel 的值 (0-3),如下所示:
      HKEY_LOCAL_MACHINE\SYSTEM\CCS\Services\DriverName\DeviceN VideoDebugLevel:REG_DWORD: 2
    • 或通过调试器进行设置,如下所示:
      ed videoprt!VideoDebugLevel 2
  • 基于 Windows XP 的计算机上的视频端口使用新的“DbgPrintEx”函数(请参见本文中的“注意”部分)。

    以下是为视频驱动程序定义的变量:
    Kd_IHVVIDEO_Mask
    Kd_VIDEO_Mask
    Kd_VIDEOPRT_Mask
    若要设置掩码,请执行以下操作:
    • 在注册表中添加所需的掩码。例如:
      HKEY_LOCAL_MACHINE\SYSTEM\CCS\Control\Session Manager\Debug Print Filter “IHVVIDEO”=DWORD: 0xffffffff
    • 或者在调试器中添加掩码,如下所示:
      ed Kd_IHVVIDEO_Mask 0xffffffff

1394 调试

请注意以下有关 1394 调试的信息:
  • 它需要可调试的内部版本系统或可调试的内部版本 1394 模块。
  • 在基于 Windows 2000 和 Windows XP 的系统上,通过调试器来设置相应的全局变量。例如:
    ed ohci1394!ohcidebuglevel 6
    模块名称调试符号范围
    OHCI1394.SYSohcidebuglevel1-6
    SBP2PORT.SYSsbp2debuglevel1-4
    1394BUS.SYSbusdebuglevel1-5
    有关更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
    259855如何在 IEEE 1394 驱动程序中启用调试输出

USB 调试

请注意以下有关通用串行总线 (USB) 调试的信息:
  • 它需要可调试的内部版本系统或可调试的内部版本 USB 模块。
  • 在基于 Windows 2000 的系统上,需要通过调试器来设置相应的全局变量。例如:
    ed USBD!USBD_Debug_Trace_Level 2
    模块名称调试符号范围
    UHCD.SYSUHCD_Debug_Trace_Level0-2
    OPENHCI.SYSOHCI_Debug_Trace_Level0-2
    USBHUB.SYSUSBH_Debug_Trace_Level0-3
    USBD.SYSUSBD_Debug_Trace_Level0-3
  • 在基于 Windows XP 的系统上使用以下参数。
    模块名称调试符号范围
    USBPORT.SYSUSBPORT_Debug_Trace_Level0-4
    USBCCGP.SYSDbgVerbose0 或 1
    USBHUB.SYSUSBH_Debug_Trace_Level0-3
    USBD.SYSUSBD_Debug_Trace_Level0-3
    USBPORT.SYSUSBPORT_CatcTrapEnable0-1
  • 所有 USB 微型端口驱动程序都使用 USBPORT 进行调试输出。

PCI 调试

请注意以下有关外围设备组件互连 (PCI) 调试的信息:
  • 它需要可调试的内部版本系统或可调试的内部版本 PCI.SYS 模块。
  • 在基于 Windows 2000 和 Windows XP 的系统上,通过调试器来设置相应的全局变量。例如(0x3 表示最详细的级别):
    ed PCI!PciDebug 0x3
    模块名称调试符号范围
    PCI.SYSPciDebug 0-3 

PCMCIA 调试

请注意以下有关 PCMCIA 调试的信息:
  • 它需要可调试的内部版本系统或可调试的内部版本 pcmcia 模块。
  • 在基于 Windows 2000 和 Windows XP 的系统上,通过调试器来设置相应的全局变量。例如
    ed PCMCIA!PcmciaDebugMask 0xFFFFFFFF
    其中:
    #define PCMCIA_DEBUG_ALL       0xFFFFFFFF#define PCMCIA_DEBUG_TUPLES    0x00000001#define PCMCIA_DEBUG_ENABLE    0x00000002#define PCMCIA_DEBUG_PARSE     0x00000004#define PCMCIA_DUMP_CONFIG     0x00000008#define PCMCIA_DEBUG_INFO      0x00000010#define PCMCIA_DEBUG_IOCTL     0x00000020#define PCMCIA_DEBUG_DPC       0x00000040#define PCMCIA_DEBUG_ISR       0x00000080#define PCMCIA_DEBUG_CANCEL    0x00000100#define PCMCIA_DUMP_SOCKET     0x00000200#define PCMCIA_READ_TUPLE      0x00000400#define PCMCIA_SEARCH_PCI      0x00000800#define PCMCIA_DEBUG_FAIL      0x00008000#define PCMCIA_PCCARD_READY    0x00010000#define PCMCIA_DEBUG_DETECT    0x00020000#define PCMCIA_COUNTERS        0x00040000#define PCMCIA_DEBUG_OVERRIDES 0x00080000#define PCMCIA_DEBUG_IRQMASK   0x00100000					
    模块名称调试符号范围
    PCMCIA.SYSPcmciaDebugMask0–FFFFFFFF

NDIS 调试

请注意以下有关网络驱动程序接口规范 (NDIS) 调试的信息:

存储驱动程序调试

请注意以下有关存储驱动程序调试的信息:
  • 它需要可调试的内部版本系统或可调试的内部版本存储模块。 有关更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
    296225如何启用 SCSIPORT 调试日志

打印机驱动程序调试

请注意以下有关打印机驱动程序调试的信息。

用户模式

  • 需要可调试的内部版本系统或可调试的内部版本打印机驱动程序组件(unidrv 或 pscript)。
  • 附加到打印应用程序或后台打印程序进程 (spoolsv.exe),具体取决于调试的是用户界面 (UI) 模块还是呈现模块。
  • 对于 Unidrv 调试,请使用以下设置:
    ed unidrv!giDebugLevel 1

内核模式

  • 运行“gflags”命令,然后对 spoolsv.exe 启用以下标志:
    • Windows 2000:“在页尾放置堆栈分配”
    • Windows XP:“启用页堆栈”
  • 重新启动后台打印程序(网络停止/启动后台打印程序)。
  • 在 Win32K.sys 上运行 verifier.exe 调试打印机驱动程序。

音频驱动程序调试

请注意以下有关音频驱动程序调试的信息:
  • 它需要可调试的内部版本系统或可调试的内部版本音频模块。
  • 在基于 Windows 2000 和 Windows XP 的系统上,通过调试器来设置相应的全局变量。例如:
    ed USBAUDIO!USBAudioDebugLevel 3
    模块名称调试符号范围
    USBAUDIO.SYSUSBAudioDebugLevel0-3
    SYSAUDIO.SYSSYSAUDIOTraceLevel0-100

HID 驱动程序调试

请注意以下有关 HID 驱动程序调试的信息:
  • 它需要可调试的内部版本系统或可调试的内部版本 HID 模块。
  • 在基于 Windows 2000 和 Windows XP 的系统上,通过调试器来设置相应的全局变量。例如:
    ed HIDCLASS!dbgverbose 1
    模块名称调试符号范围
    HIDUSB.SYSHIDUSB_DebugLevel0-1
    HIDCLASS.SYSdbgverbose0-1

串行驱动程序调试

请注意以下有关串行驱动程序调试的信息:
  • 它需要可调试的内部版本系统或可调试的内部版本串行模块。
  • Serial.sys(在基于 Windows 2000 和 Windows XP 的系统上):
    • 设置注册表中的“DebugLevel”值,如下所示:
      HKLM\System\CCS\Services\Serial “DebugLevel”= REG_DWORD:0xFFFFFFFF
      或通过调试器进行设置,如下所示:
      ed Serial!SerialDebugLevel (0x00000000 – 0xFFFFFFFF)
    • 掩码值在以下目录中定义:
      %DDKROOT%\src\kernel\serial\serial.h
  • Serenum.sys(在基于 Windows 2000 和 Windows XP 的系统上):
    • 设置注册表中的“DebugLevel”值,如下所示:
      HKEY_LOCAL_MACHINE\System\CCS\Services\Serenum “DebugLevel”= REG_DWORD:1FF
    • 掩码值在以下目录中定义:
      %DDKROOT%\src\kernel\serenum\serenum.h

调制解调器驱动程序调试

若要在基于 Windows 2000 和 Windows XP 的系统上启用全面的 unimodem 详细调试,需要使用可调试的内部版本,然后执行以下操作:
  1. 对于除 Mdminst.dll 和 Unimdm.tsp 之外的所有文件,添加以下注册表项:
    • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Unimodem "DebugFlags"=dword:0000003f
    • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon "SFCDisable"=dword:00000001
    • HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Modem "DebugFlags"=dword:0000003f
    • HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Modemcsa "DebugFlags"=dword:0000003f
  2. 对于 Mdminst.dll,将 Unimdm.ini 复制到 %windir% 中。下面是一个 Unimdm.ini 文件的示例:
    [ModemUI]; DumpFlags:;    00000001   DCB;    00000002   MODEMSETTINGS;    00000004   DEVCAPSDumpFlags=0x0000000f; TraceFlags:;    00000001   Warnings;    00000002   Errors;    00000004   General ;    00000008   Function traceTraceFlags=0x0000000f; BreakFlags:;    00000001   Break on validate;    00000040   Break on process attach;    00000100   Break on API enterBreakFlags=0x00000000;; --------------------------------------------------------------------[Modem]; DumpFlags:DumpFlags=0x0000000f; TraceFlags:;    00000001   Warnings;    00000002   Errors;    00000004   General ;    00000008   Function trace;    00010000   Detection queries;    00020000   Class installer traceTraceFlags=0x0003000f; BreakFlags:;    00000001   Break on validate;    00000040   Break on process attach;    00000100   Break on API enterBreakFlags=0x00000000;; --------------------------------------------------------------------[SerialUI]; DumpFlags:;    00000001   DCBDumpFlags=0x00000000; TraceFlags:;    00000001   Warnings;    00000002   Errors;    00000004   General ;    00000008   Function traceTraceFlags=0x00000000; BreakFlags:;    00000001   Break on validate;    00000040   Break on process attach;    00000100   Break on API enterBreakFlags=0x00000000;; --------------------------------------------------------------------[Unimdm]; DumpFlags:DumpFlags=0x0000000f; TraceFlags:;    00000001   Warnings;    00000002   Errors;    00000004   General ;    00000008   Function trace;    00010000   dwDeviceID related;    00020000   hdLine related;    00040000   hdCall related;    00080000   pLineDev related;    00100000   pModemInfo relatedTraceFlags=0x001f000f; BreakFlags:;    00000001   Break on validate;    00000040   Break on process attach;    00000080   Break on process detach;    00000100   Break on API enterBreakFlags=0x00000000					
  3. 对于 Unimdm.tsp 调试,添加以下注册表项:
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E96D-E325-11CE-BFC1-08002BE10318}\device instance\Logging

设备安装调试

若要从 Windows XP 和更高版本上的内核和用户模式 PNP 管理器中接收详细跟踪,必须获取可调试的内部版本,然后运行以下代码:
ed NT!Kd_NTOSPNP_Mask 0xFFFFFFFF ed NT!Kd_PNPMGR_Mask 0xFFFFFFFF
在 Windows 2000 上,您可以在内核调试器中将全局变量“PnpEnumDebugLevel”设置为“1”或“2”,如下所示:
ed nt!PnpEnumDebugLevel 2

注意

在基于 Windows XP 的系统上,某些驱动程序和子系统使用新的“DbgPrintEx”函数:
ULONG DbgPrintEx(IN ULONG ComponentID,                 IN ULONG Level, IN PCHAR Format, . . . .                 [arguments]);				
Microsoft 定义了大约 95 个不同的组件 ID(请在 Ntddk.h 文件中查找“DPFLTR_TYPE”)。对于每个组件筛选器 ID,都有一个全局掩码变量,例如:
NT! Kd_IHVVIDEO_Mask, NT!Kd_IHVAUDIO_Mask
可以通过注册表设置掩码的值,如下所示:
HKEY_LOCAL_MACHINE\SYSTEM\CCS\Control\Session Manager\Debug Print Filter

““IHV_AUDIO”=REG_DWORD:0xFFFFFFFF”,也可以使用调试器进行设置,例如:
ed NT!Kd_IHVAUDIO_Mask 0xffffffff
筛选调试输出时基于全局掩码 (Kd_Win2000_Mask) 和组件级别掩码。Windbg 帮助文件记录了如何在筛选输出中使用掩码和级别值的有关信息。

若要启用调试跟踪,请使用以下代码从 Ntddk.h 文件或调试器中找到您的组件 ID:
x NT!Kd_*_Mask				
然后将值设置为详细输出的最大值 (0xffffffff)。目前,只有少数几类驱动程序(在本文的“更多信息”部分进行了描述)使用这个新函数。
属性

文章 ID:314743 - 上次审阅时间:12/07/2015 08:24:25 - 修订版本: 5.0

Microsoft Windows XP 驱动程序开发工具包, 适用于 Windows 2000 的 Microsoft Win32 设备驱动程序工具包, Microsoft Windows 2000 Professional Edition, Microsoft Windows 2000 Server, Microsoft Windows 2000 Datacenter Server, Microsoft Windows 2000 Advanced Server, Microsoft Windows XP Home Edition, Microsoft Windows XP Professional Edition

  • kbnosurvey kbarchive kbhowto kbinfo kbbug kbkmode kbwdm kbplugplay kbinput kbndis kbfile kbdebug kbserial kbusb kbdisplay KB314743
反馈