搭建 Debug 环境

第一步,在 VirtualBox 安装 Windows 10. VirtualBox 是一个虚拟机软件,你也可以用 VMWare 等同类软件。下文简称虚拟机中的 Windows 10 为虚拟机.

第二步,在虚拟机中以管理员模式打开 cmd 或者 powershell. 运行下面的命令:

bcdedit /dbgsettings serial debugport:1 baudrate:115200```

对了,`debugport:1` 表示我们使用 COM1 串口进行调试。和下一步中的 COM1 对应.

然后建议在虚拟机中启用增强功能,具体方法:

![image-20200109164233971.png][1] 

在虚拟机中 "此电脑" 找到新增的盘符里的安装文件安装即可.

为了有 DEBUG 输出,虚拟机中进行如下配置:

打开注册表编辑器 (`regedit`) 定位到 `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager`, 新建项 (Key)(类似文件夹), 命名为 `Debug Print Filter`, 在其下建立值 (REG_DWORD), 名之 `DEFAULT`, 值 `f`. **这里如果设置出错,WINDBG 将不打印调试信息** 注册表的更改只有重启后生效.

第三步,配置 VirtualBox 所需串口.

把虚拟机关机。在虚拟机设置中按下图操作设置:

![image-20200109163711585.png][2] 

对了,`\\.\pipe\myDbg` 这里是我自己的设置。你也可以不取 `myDbg` 这个名.

**注意,取消勾选 Connect to existing pipe/socket**

保存.

第四步,开虚拟机和 WinDbg. WinDbg 可以通过搜索 (Win+S) 找到:

![image-20200109164025127.png][3] 

如果还是找不到,请 [下载并安装 WDK10][4]. 你还可以使用 _Microsoft Store_ 里的 _WinDBG Preview_

第五步,Attach to kernel. 在 WinDbg 里,对于我的软件版本,选择 File / Debug Kernel 就会弹出这样的窗口:

![image-20200109165040535.png][5] 

我们不能直接用 com1, 因为这里的 com1 是真机的 com1, 但我们需要连接虚拟机的 com1, 虚拟机的 com1 在真机下的形式是 `\\.\pipe\myDbg`. 设置如下:

![image-20200109165452854.png][6] 

点击 OK 开始连接。你会看到:

```textMicrosoft (R) Windows Debugger Version 10.0.18362.1 AMD64
Copyright (c) Microsoft Corporation. All rights reserved.

Opened \\.\pipe\myDbg
Waiting to reconnect...

现在我们已经可以调试了。不妨试试,点击暂停:

image-20200109170140352.png

你会发现虚拟机中的 Windows 10 卡住了,点击继续 (Go) 又可以继续运行了.

通过 WinDbg 我们可以拥有全面的调试功能,但是对于开发效率而言,结合 Visual Studio 会更好。配置方法大同小异,请参考 微软的文档.

参考:

  1. Setting Up a Windows 7+ Virtualbox VM for Kernel Mode Debugging
  2. 开始使用 WinDbg (内核模式)
  3. 预配计算机以便进行驱动程序部署和测试 (WDK 10)