使用 WinDbg 进行远程调试

远程调试涉及在两个不同位置运行的两个调试器。 执行调试的调试器称为 调试服务器。 第二个调试器(称为 调试客户端)从远程位置控制调试会话。 若要建立远程会话,必须先设置调试服务器,然后激活调试客户端。

正在调试的代码可以在运行调试服务器的同一台计算机上运行,也可能在单独的计算机上运行。 如果调试服务器正在执行用户模式调试,则正在调试的进程可以在与调试服务器相同的计算机上运行。 如果调试服务器正在执行内核模式调试,则所调试的代码通常会在单独的目标计算机上运行。

下图演示了一个远程会话,在该会话中,在主计算机上运行的调试服务器正在对在单独的目标计算机上运行的代码执行内核模式调试。

说明为内核模式调试而连接的远程计算机、主机计算机和目标计算机的示意图。

有多种传输协议可用于远程调试连接:TCP、NPIPE、SPIPE、SSL 和 COM 端口。 假设你已选择使用 TCP 作为协议,并且已选择使用 WinDbg 作为调试客户端和调试服务器。 可以使用以下过程建立远程内核模式调试会话:

  1. 在主计算机上,打开 WinDbg 并与目标计算机建立内核模式调试会话。 (请参阅使用 WinDbg (经典) .) 进行实时 Kernel-Mode 调试

  2. 通过从“调试”菜单中选择“中断”或按 Ctrl-Break 来中断。

  3. “调试器命令窗口”中,输入以下命令。

    .server tcp:port=5005

    注意 端口号 5005 是任意的。 端口号由你选择。

  4. WinDbg 将使用如下所示的输出进行响应。

    Server started.  Client can connect with any of these command lines
    0: <debugger> -remote tcp:Port=5005,Server=YourHostComputer
    
  5. 在远程计算机上,打开 WinDbg,然后从“文件”菜单中选择“连接到远程会话”。

  6. “连接字符串”下输入以下字符串。

    tcp:Port=5005,Server=YourHostComputer

    其中 ,YourHostComputer 是运行调试服务器的主机的名称。

    选择“确定”。

使用命令行

作为上一部分中给定过程的替代方法,可以在命令行中设置远程调试会话。 假设你设置为通过通道 32 上的 1394 电缆在主计算机和目标计算机之间建立内核模式调试会话。 可以使用以下过程建立远程调试会话:

  1. 在主计算机上,在命令提示符窗口中输入以下命令。

    windbg -server tcp:port=5005 -k 1394:channel=32

  2. 在远程计算机上,在命令提示符窗口中输入以下命令。

    windbg -remote tcp:Port=5005,Server=YourHostComputer

    其中 ,YourHostComputer 是运行调试服务器的主机的名称。

其他信息

除了本主题中所示的方法之外,还有许多方法可以建立远程调试。 有关在 WinDbg 调试器命令窗口中设置调试服务器的完整信息,请参阅 .server (创建调试服务器) 。 有关在命令行中启动 WinDbg (和建立远程调试) 的完整信息,请参阅 WinDbg Command-Line 选项