Debugging Tools for Windows

通过Null-modem电缆连接调试Hyper-V

要使用null-modem电缆连接来调试根分区或者Windows hypervisor,可以按照下面的步骤。

  1. 确认主控机上安装了适当版本的Windows调试工具。如果不清楚所使用的版本,查看选择32位或64位调试器包。要通过null-modem调试Hyper-V,必须使用x64软件包。如果目标机要求使用其他版本,可以使用1394电缆来调试Hyper-V。
  2. 将Windows调试工具包中的Kdhvcom.dll复制到目标机根分区的Windows\system32目录中。
  3. 在目标机上,使用BCDEdit工具来配置需要的调试选项。如果想调试根分区,可以使用如下命令:

    bcdedit /set dbgtransport kdhvcom.dll 
    bcdedit /dbgsettings serial DEBUGPORT:Port BAUDRATE:Baud 
    bcdedit /debug on 

    如果要调试Windows hypervisor,使用如下命令

    bcdedit /hypervisorsettings serial DEBUGPORT:Port BAUDRATE:Baud 
    bcdedit /set hypervisordebug on 
    bcdedit /set hypervisorlaunchtype auto 

    这些命令中,Port指定要使用的COM端口,Baud指定连接的速率。例如,如果使用COM1,波特率为115,200,那么Port1Baud115200。关于BCDEdit使用的更多信息,查看编辑引导选项

    如果想同时开启对根分区和Window hypervisor的调试,可以同时使用上面步骤中的BCDEdit命令集合。

    执行完BCDEdit命令后重起计算机。

  4. 将主控机和目标机通过null-modem电缆连接COM端口。这和标准的内核调试完全一样;详细信息查看设置Null-Modem电缆连接
  5. 在主控机上打开命令提示符窗口,将当前目录切换到Windows调试工具包的安装目录。使用下面的命令行运行vmdemux工具 (虚拟机分离器(virtual machine demultiplexer)):

    vmdemux -src com:port=Port,baud=Baud 

    命令中,Port是所使用的COM端口号(包含"com"前缀),Baud是连接的波特率。例如,使用COM1,波特率为115,200,那么Port1Baud115200。如果已经开始调试Windows hypervisor了,还可以包含-channel 0参数来重起vmdemux。

    Vmdemux会通过COM连接创建多个命名管道会话:一个信道用于调试Windows hypervisor,另一个用于调试根分区。对每个信道,vmdemux 都会显示一个用于从内核调试器连接到该信道的连接字符串。

  6. 实际的调试会话通过使用远程工具(Remote.exe)启动KD来开始。用下面的命令来调试跟分区:

    remote.exe /s "DbgPath\kd –k RPConnectionString -y SymPath" HyperV_ROOT 

    用下面的命令调试Windows hypervisor:

    remote.exe /s "DbgPath\kd -k HVConnectionString -y SymPath" HyperV_HV 

    这些命令中,RPConnectionStringHVConnectionString分别表示前面步骤中vmdemux显示出来的根分区和Windows hypervisor的连接字符串。DbgPath表示Windows调试工具的安装目录,SymPath是符号路径。也可以包含其他KD选项。如果想从其他机器(使用WinDbg或者另一个KD实例)远程连接到KD上,可以在-server参数之后再加上所有传输选项。-server必须作为第一个参数使用。

    例如,调试根分区的命令类似这样:

    remote.exe /s "\debuggers\kd –k com:port=\\.\pipe\Vm1,pipe,resets=0,reconnect -y srv*c:\localstore*http://msdl.microsoft.com/download/symbols" HyperV_ROOT 

    调试Windows hypervisor的命令类似这样:

    remote.exe /s "c:\debuggers\kd -k com:port=\\.\pipe\Vm0,pipe,resets=0,reconnect -y srv*c:\localstore*http://msdl.microsoft.com/download/symbols" HyperV_HV 

这时,已经可以正常调试目标机了。可用命令的参考,查看调试器操作调试器操作(内核模式)

Build machine: CAPEBUILD