通过 USB 3.0 电缆设置内核模式调试

Windows 调试工具支持通过 USB 3.0 电缆进行内核模式调试。 本文介绍如何手动设置 USB 3.0 调试。

运行调试器的计算机称为 主计算机,正在调试的计算机称为 目标计算机

通过 USB 3.0 电缆进行调试需要以下硬件:

  • USB 3.0 调试电缆,这是一条 A-A 交叉电缆,具有两个公头 A 类型插头,且没有 Vbus 连接
  • 在主计算机上,xHCI (USB 3.0) 主控制器
  • 在目标计算机上,xHCI (USB 3.0) 支持调试的主控制器

若要简化故障排除,请直接在目标计算机与主计算机之间连接电缆,避免使用任何集线器或扩展坞。

设置目标计算机

  1. 在目标计算机上,启动 UsbView 工具。 UsbView 工具包含在适用于 Windows 的调试工具中。

  2. 在 UsbView 中,找到所有 xHCI 主控制器。

  3. 在 UsbView 中,展开 xHCI 主机控制器的节点。 查找主机控制器上的端口支持调试的指示。

    [Port1]
    
    Is Port User Connectable:         yes
    Is Port Debug Capable:            yes
    Companion Port Number:            3
    Companion Hub Symbolic Link Name: USB#ROOT_HUB30#5&32bab638&0&0#{...}
    Protocols Supported:
     USB 1.1:                         no
     USB 2.0:                         no
     USB 3.0:                         yes
    
  4. 记下要用于调试的 xHCI 控制器的总线、设备和函数号。 UsbView 显示这些数字。 在以下示例中,总线编号为 48,设备编号为 0,函数编号为 0。

    USB xHCI Compliant Host Controller
    ...
    DriverKey: {36fc9e60-c465-11cf-8056-444553540000}\0020
    ...
    Bus.Device.Function (in decimal): 48.0.0
    
  5. 确定支持调试的 xHCI 控制器后,下一步是查找与 xHCI 控制器上的端口关联的物理 USB 连接器。 若要查找物理连接器,请将任何 USB 3.0 设备插入目标计算机上的任何 USB 连接器。 刷新 UsbView 以查看设备所在的位置。 如果 UsbView 显示设备连接到所选的 xHCI 主机控制器,则表明你找到了可用于 USB 3.0 调试的物理 USB 连接器。

重要

在使用 bcdedit 更改启动信息之前,可能需要在测试电脑上暂时挂起 Windows 安全功能,例如 BitLocker 和安全启动。 测试完成后重新启用这些安全功能,并在禁用安全功能时适当管理测试电脑。

  1. 在目标计算机上,以管理员身份打开命令提示符窗口,然后输入以下命令:

    bcdedit /debug on
    bcdedit /dbgsettings usb targetname:<TargetName>
    

    TargetName 是为目标计算机创建的名称。 请注意, TargetName 不一定是目标计算机的官方名称;只要满足以下限制,它就可以是创建的任何字符串:

    • 字符串不得在 TargetName 中的任何位置包含“debug”,大小写或大写的任意组合。 例如,如果在 targetname 中的任何位置使用“DeBuG”或“DEBUG”,则调试无法正常工作。
    • 字符串中唯一的字符是连字符 ( ) 、下划线 (_) 、数字 0 到 9,以及字母 A 到 Z (大写或小写) 。
    • 字符串的最大长度为 24 个字符。
  2. 在“设备管理器”中,找到要用于调试的 USB 控制器。 在“常规”选项卡上的“位置”下,将显示总线、设备和函数编号。 输入以下命令:

    bcdedit /set "{dbgsettings}" busparams <b.d.f>
    

    Bdf 是 USB 主控制器的总线、设备和功能编号。 总线、设备和功能编号必须采用十进制格式。

    例如:

    bcdedit /set "{dbgsettings}" busparams 48.0.0
    
  3. 重新启动目标计算机。

禁用电源管理

在某些情况下,电源转换可能会干扰通过 USB 3.0 进行调试。 若要避免这些问题,请对用于调试的 xHCI 主机控制器及其根中心禁用选择性挂起。

  1. 在“设备管理器”中,导航到 xHCI 主控制器的节点。 右键单击节点,然后选择“属性”。 如果有 “电源管理 ”选项卡,请打开该选项卡,然后清除 “允许计算机关闭此设备以节省电源 ”复选框。

  2. 在设备管理器中,导航到 xHCI 主控制器根中心的节点。 右键单击该节点,然后选择“属性”。 如果有“电源管理”选项卡,请打开选项卡,并清除“允许计算机关闭此设备以节省电源检查框。

使用完 xHCI 主控制器进行调试后,重新为 xHCI 主控制器启用选择性挂起。

首次启动调试会话

  1. 将 USB 3.0 调试电缆连接到选择在主机和目标计算机上调试的 USB 3.0 端口。
  2. 确定在主计算机上运行的 Windows (32 位或 64 位) 位。
  3. 在主计算机上,以管理员) 身份打开 WinDbg (版本,该版本与在主计算机上运行的 Windows 的位数相匹配。 例如,如果主计算机运行的是 64 位版本的 Windows,请以管理员身份打开 64 位版本的 WinDbg。
  4. 在“ 文件 ”菜单上,选择“ 内核调试”。 在“内核调试”对话框中,打开 “USB ”选项卡。输入在设置目标计算机时创建的目标名称。 单击 “确定”

此时,USB 调试驱动程序安装在主计算机上,这就是为什么将 WinDbg 的位数与 Windows 的位数相匹配非常重要的原因。 安装 USB 调试驱动程序后,可以使用 32 位或 64 位版本的 WinDbg 进行后续调试会话。

启动调试会话

使用 WinDbg

在主计算机上,打开 WinDbg。 在“ 文件 ”菜单上,选择“ 内核调试”。 在“内核调试”对话框中,打开 “USB ”选项卡。输入在设置目标计算机时创建的目标名称。 选择“确定” 。

还可以通过在命令提示符窗口中输入以下命令来启动 WinDbg 会话,其中 TargetName 是设置目标计算机时创建的目标名称:

windbg /k usb:targetname=<TargetName>

使用 KD

在主计算机上,打开命令提示符窗口并输入以下命令,其中 TargetName 是设置目标计算机时创建的目标名称:

kd /k usb:targetname=<TargetName>

重新启动目标计算机

连接调试器后,重新启动目标计算机。 重启电脑的一种方法是使用 shutdown -r -t 0 管理员的命令提示符中的 命令。

目标电脑重启后,调试器应会自动连接。

故障排除

无法识别 USB 设备

如果在插入调试电缆时,主机上出现一条 Windows 通知,其中显示文本 USB 设备无法识别 ,则可能是已知 USB 3.1 到 3.1 兼容性问题被命中。 当调试电缆连接到主机上的 USB 3.1 控制器和目标上的 Intel (Ice Lake 或 Tiger Lake) 3.1 USB 控制器时,此问题会影响调试配置。

有关详细信息和处理器模型列表,请参阅 Ice Lake (微处理器) 和 或 Tiger Lake (微处理器) 。 若要查找目标计算机的处理器型号,请打开“设置”应用,然后依次转到“ 系统 ”和“ 关于”。 处理器 列在 “设备规范”下。

若要验证此问题,请打开设备管理器并在通用串行总线控制器下查找 USB 调试连接设备。 如果找不到此设备,请在“其他设备”下为“未知设备”检查。 右键单击设备以打开其属性页。 设备状态文本框将显示 Windows 已停止此设备的文本,因为它报告了问题 (Code 43) ,USB 设备返回了无效的 USB BOS 描述符

若要解决此问题,请从管理员命令提示符运行以下命令,以对注册表进行更改:

reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\usbflags\349500E00000 /v SkipBOSDescriptorQuery /t REG_DWORD /d 1 /f
reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\usbflags\045E06560000 /v SkipBOSDescriptorQuery /t REG_DWORD /d 1 /f

然后,拔下并重新插入调试电缆。

另请参阅

手动设置内核模式调试