Debugging Tools for Windows

附加到虚拟机(内核模式)

KD和WinDbg可以对虚拟机进行内核调试。虚拟机可以运行在调试器同一台物理机器上,或者在连接到相同网络的另一台机器上。

在开始调试之前,需要在虚拟机上创建一条命名管道。调试器通过该管道进行连接。关于如何创建管道,查看所使用的虚拟机文档。

注意 如果使用VMWare的功能来重起虚拟机(例如,重起按钮),需要退出WinDbg并重新打开WinDbg来继续调试。

在进行虚拟机调试时,VMWare通常会占用100%的CPU资源。

开启调试器

如果虚拟机和调试器运行于同一台物理计算机,使用下面的命令之一来开始调试会话。

kd [-y SymbolPath-k com:pipe,port=\\.\pipe\PipeName[,resets=0][,reconnect

windbg [-y SymbolPath-k com:pipe,port=\\.\pipe\PipeName[,resets=0][,reconnect

如果虚拟机和调试器运行在不同的计算机上,需要使用下面的命令之一来启动会话。

kd [-y SymbolPath-k com:pipe,port=\\VMHost\pipe\PipeName[,resets=0][,reconnect

windbg [-y SymbolPath-k com:pipe,port=\\VMHost\pipe\PipeName[,resets=0][,reconnect

命令包含以下一些参数:

VMHost
指定运行虚拟机的机器名字。虚拟机文档中通常以virtual machine host 来引用这台计算机。如果虚拟机和内核调试器在同一台主机,则VMHost为一个点号(.)。
PipeName
指定虚拟机创建的命名管道名。
resets=0
指定当主控机和目标机重新同步时,发送给目标机的重置包个数,这个数字没有限制。对于Microsoft Virtual PC和其他丢弃管道中多余数据的虚拟机,使用resets=0 参数。对于VMware 或其他不丢弃管道的多余数据的虚拟机,不要这样使用。
reconnect
指定调试器当管道读/写错误时,自动断开并重连。另外,如果调试器在启动时没有找到指定的管道名,reconnect 参数使得调试器一直等待名为PipeName 的管道出现。对Virtual PC和其他在重起虚拟机时销毁并重建管道的虚拟机使用reconnect 。对于VMWare和其他在重起计算机时保留管道的虚拟机不要使用该参数。

关于其他命令行选项,查看KD命令行选项或者WinDbg命令行选项

开始会话

如果目标机停止响应,可能是因为较早之前的内核调试动作造成的等待,或者使用了-b 命令行选项,调试器立即中断了目标机。

否则,目标及会继续运行,直到调试器的中断。

关于之后的步骤的更多信息,查看调试器配置符号 调试器操作(常规)调试器操作(用户模式)

Build machine: CAPEBUILD