远程目标
远程调试有两种不同的形式,具体取决于远程客户端或服务器 (计算机) 是主计算机。 主计算机是调试器引擎处于活动状态的计算机。 在其他计算机上,调试器引擎只是充当代理,将命令和数据中继到主机引擎。
所有调试器操作(例如执行命令和 扩展以及符号加载)都由主机引擎执行。 调试器会话也相对于主机引擎。
若要列出计算机上当前运行的调试服务器和进程服务器,请使用 OutputServers。
调试服务器和调试客户端
调试服务器是调试器引擎的实例,充当主机并侦听来自调试客户端的连接。 方法 StartServer 将告知调试器引擎开始侦听来自调试客户端的连接。
调试客户端是充当代理的调试器引擎的实例,将调试器命令和 I/O 发送到调试服务器。 可以使用 DebugConnect 函数连接到调试服务器。
DebugConnect 返回的客户端对象不会自动加入调试服务器上的调试器会话。 ConnectSession 方法可用于联接会话,同步输入和输出。
调试服务器和调试客户端之间的通信主要包括发送到服务器的调试器命令和 RPC 调用,以及发送回客户端的命令输出。
进程服务器、内核连接服务器和智能客户端
进程服务器 和 内核连接服务器 都是调试器引擎的实例,充当代理,侦听来自智能客户端的连接,并按照这些远程客户端的要求执行内存、处理器或操作系统操作。 进程服务器有助于调试在同一台计算机上运行的进程。 内核连接服务器有助于调试连接到运行连接服务器的计算机的 Windows 内核调试目标。 可以使用 StartProcessServer 方法或 DbgSrv 程序启动进程服务器。 WaitForProcessServerEnd 方法将等待使用 StartProcessServer 启动的进程服务器结束。 可以使用 KdSrv 程序激活内核连接服务器。
智能客户端是充当主机引擎并连接到进程服务器的调试器引擎的实例。 ConnectProcessServer 方法将连接到进程服务器。 连接后,可以使用 实时 User-Mode 目标 中所述的方法。
远程客户端完成进程服务器后,可以使用 DisconnectProcessServer 断开连接,也可以使用 EndProcessServer 请求进程服务器关闭。 若要从运行进程服务器的计算机关闭进程服务器,请使用任务管理器结束进程。 如果使用 StartProcessServer 的调试器引擎实例仍在运行,则可以使用 Execute 发出调试器命令 .endsrv 0,这将结束进程服务器 (这是 .endsrv 的常见行为的异常,通常不会影响进程服务器) 。
进程服务器与智能客户端之间的通信通常包括从远程客户端发送到服务器的低级别内存、处理器和操作系统操作以及请求。 然后,其结果将发送回客户端。