Debugging Tools for Windows

Hyper-V调试疑难解答

本节讨论了一些Hyper-V调试时可能遇到的问题。

电缆和配置问题

如果根分区启动时没有连接字符串,通常是由于电缆或者设置问题造成的。例如,可能会显示下面这样的输出:

Waiting to reconnect...
Connected to Windows 6001 x64 target, ptr64 TRUE
Kernel Debugger connection established.
Symbol search path is: c:\mysymbols\
Executable search path is:
Loading symbols for fffff800`01602000     ntkrnlmp.exe ->   ntkrnlmp.exe
ModLoad: fffff800`01602000 fffff800`01b17000   ntkrnlmp.exe
Windows Kernel Version 6001 MP (1 procs) Free x64

要定位该问题,可以通过在命令提示符键入bcdedit来查看根分区的配置,并且确认它们是否正确。

Vmdemux问题

如果在开始调试Windows hypervisor之后重新启动vmdemux (虚拟机分离器(virtual machine demultiplexer)),必须包含-channel 0参数来重新创建hypervisor信道。这一般可以由Windows hypervisor自动完成,但是因为这时它已经被调试了,所以不能自给完成。

可以在命令提示符输入vmdemux -?来查看完整的VMDemux命令行选项。

未修改分区的问题

如果已经设置了通过null-modem电缆的Hyper-V调试,并且已经将Kdhvcom.dll复制到了根分区,之后从另一个未安装该文件的分区启动目标机时,调试器可能会冻结。这时可以重起vmdemux。这个问题是由于未修改的分区不能处理多路交换(multiplexed traffic)。一般来说vmdemux 会在干净的关闭(clean shutdown)时关闭所有管道。但是,例如硬重起这样的不干净关闭(non-clean shutdown)是没有办法检测到的。

Build machine: CAPEBUILD