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