使用 WinDbg 进行远程调试
远程调试涉及两个在两个不同的位置运行的调试器。 执行调试的调试器称为 调试服务器。 第二个调试器称为 调试客户端,控制来自远程位置的调试会话。 若要建立远程会话,必须先设置调试服务器,然后激活调试客户端。
正在调试的代码可以在运行调试服务器的同一台计算机上运行,也可以运行在单独的计算机上。 如果调试服务器正在执行用户模式调试,则正在调试的进程可以在调试服务器所在的同一台计算机上运行。 如果调试服务器正在执行内核模式调试,则调试的代码通常会在单独的目标计算机上运行。
下图演示了一个远程会话,其中调试服务器在主计算机上运行,正在对在单独的目标计算机上运行的代码执行内核模式调试。
有多种传输协议可用于远程调试连接:TCP、NPIPE、SPIPE、SSL 和 COM 端口。 假设已选择使用 TCP 作为协议,并且已选择将 WinDbg 用作调试客户端和调试服务器。 可以使用以下过程建立远程内核模式调试会话:
在主计算机上,打开 WinDbg,并使用目标计算机建立内核模式调试会话。 (请参阅 使用 WinDbg(经典)进行实时内核模式调试。
通过从“调试”菜单中选择“中断”或按 Ctrl-Break 来中断。
在 调试器命令窗口中,输入以下命令。
.server tcp:port=5005
请注意 ,端口号 5005 是任意的。 端口号是你选择的。
WinDbg 将响应如下所示的输出。
Server started. Client can connect with any of these command lines 0: <debugger> -remote tcp:Port=5005,Server=YourHostComputer
在远程计算机上,打开 WinDbg,然后从“文件”菜单中选择“连接到远程会话”。
在“连接字符串”下,输入以下字符串。
tcp:Port=5005,Server=YourHostComputer
其中 ,YourHostComputer 是运行调试服务器的主机的名称。
选择“确定”。
使用命令行
作为上一部分中给出的过程的替代方法,可以在命令行中设置远程调试会话。 假设你设置为在主计算机与目标计算机之间通过通道 32 上的 1394 电缆建立内核模式调试会话。 可以使用以下过程建立远程调试会话:
在主计算机上,在命令提示符窗口中输入以下命令。
windbg -server tcp:port=5005 -k 1394:channel=32
在远程计算机上,在命令提示符窗口中输入以下命令。
windbg -remote tcp:Port=5005,Server=YourHostComputer
其中 ,YourHostComputer 是运行调试服务器的主机的名称。
重要
1394 传输可用于 Windows 10 版本 1607 及更低版本。 它在 Windows 的更高版本中不可用。 应将项目转换为其他传输,例如使用以太网的 KDNET。 有关该传输的详细信息,请参阅自动设置 KDNET 网络内核调试。
其他信息
有多种方法可以建立远程调试,而不是本主题中所示的远程调试。 有关在 WinDbg 调试器命令窗口中设置调试服务器的完整信息,请参阅 .server (创建调试服务器)。 有关在命令行上启动 WinDbg(并建立远程调试)的完整信息,请参阅 WinDbg 命令行选项。