激活智能客户端
激活 DbgSrv 进程服务器后,可以在另一台计算机上创建智能客户端并开始调试会话。
可通过两种方法启动智能客户端:使用 -premote 命令行选项启动 CDB 或 WinDbg,或者使用 WinDbg 图形界面。
智能客户端的协议必须与进程服务器的协议匹配。 用于启动智能客户端的常规语法取决于使用的协议。 存在以下选项:
Debugger -premote npipe:server=Server,pipe=PipeName[,password=Password] [Options]
Debugger -premote tcp:server=Server,port=Socket[,password=Password][,ipversion=6] [Options]
Debugger -premote tcp:clicon=Server,port=Socket[,password=Password][,ipversion=6] [Options]
Debugger -premote com:port=COMPort,baud=BaudRate,channel=COMChannel[,password=Password] [Options]
Debugger -premote spipe:proto=Protocol,{certuser=Cert|machuser=Cert},server=Server,pipe=PipeName[,password=Password] [Options]
Debugger -premote ssl:proto=Protocol,{certuser=Cert|machuser=Cert},server=Server,port=Socket[,password=Password] [Options]
Debugger -premote ssl:proto=Protocol,{certuser=Cert|machuser=Cert},clicon=Server,port=Socket[,password=Password] [Options]
若要使用图形界面连接到进程服务器,WinDbg 必须处于休眠模式,即必须已在未使用任何命令行参数的情况下启动,或者必须已结束上一个调试会话。 选择文件 |连接到远程存根菜单命令。 出现“连接到存根服务器”对话框时,在连接字符串文本框中输入以下字符串之一:
npipe:server=Server,pipe=PipeName[,password=Password]
tcp:server=Server,port=Socket[,password=Password][,ipversion=6]
tcp:clicon=Server,port=Socket[,password=Password][,ipversion=6]
com:port=COMPort,baud=BaudRate,channel=COMChannel[,password=Password]
spipe:proto=Protocol,{certuser=Cert|machuser=Cert},server=Server,pipe=PipeName[,password=Password]
ssl:proto=Protocol,{certuser=Cert|machuser=Cert},server=Server,port=Socket[,password=Password]
ssl:proto=Protocol,{certuser=Cert|machuser=Cert},clicon=Server,port=Socket[,password=Password]
或者,可以使用浏览按钮找到活动进程服务器。
上述命令中的参数具有以下可能的值:
调试器
这可以是 CDB 或 WinDbg。
服务器
这是在其中创建进程服务器的计算机的网络名称或 IP 地址。 两个初始反斜杠 (\) 在命令行上是可选的,但在 WinDbg 对话框中不允许使用。
pipe= PipeName
如果使用 NPIPE 或 SPIPE 协议,PipeName 是创建进程服务器时赋予管道的名称。
如果未使用有权访问服务器计算机的帐户登录到客户端计算机,则必须提供用户名和密码。 在客户端计算机的命令提示符窗口中输入以下命令。
net use \\Server\ipc$ /user:UserName
其中 Server 是服务器计算机的名称,UserName 是有权访问服务器计算机的帐户的名称。
出现提示时,输入 UserName 的密码。
此命令成功后,可以使用 -premote 命令行选项或使用 WinDbg 图形界面激活调试智能客户端。
注意 可能需要在服务器计算机上启用文件和打印机共享。 在控制面板中,导航到网络和 Internet>网络和共享中心>高级共享设置。 选择启用文件和打印机共享。
port= 插座
如果使用 TCP 或 SSL 协议,Socket 是创建进程服务器时使用的同一套接字端口号。
clicon
指定进程服务器将尝试通过反向连接连接到智能客户端。 当且仅当服务器使用的是 clicon 时,客户端才必须使用 clicon。 在大多数情况下,在使用反向连接时,会在进程服务器之前启动智能客户端。
port= COMPort
如果使用 COM 协议,COMPort 指定要使用的 COM 端口。 前缀“COM”是可选的 -- 例如,“com2”和“2”都可接受。
baud= BaudRate
如果使用 COM 协议,BaudRate 应与创建进程服务器时选择的波特率匹配。
channel= COMChannel
如果使用 COM 协议,COMChannel 应与创建进程服务器时选择的通道号匹配。
proto= 协议
如果使用 SSL 或 SPIPE 协议,Protocol 应与创建进程服务器时使用的安全协议匹配。
Cert
如果使用 SSL 或 SPIPE 协议,则应使用创建进程服务器时使用的相同 certuser=Cert 或 machuser=Cert 参数。
password= 密码
如果在创建进程服务器时使用了密码,则必须提供 Password,以便创建调试智能客户端。 它必须与原始密码匹配。 密码是区分大小写的。 如果提供了错误的密码,错误消息将指定“Error 0x80004005”。
ipversion=6
(仅适用于 Windows 调试工具 6.6.07 及更低版本)使用 TCP 连接到 Internet 时,强制调试器使用 IP 版本 6,而不是版本 4。 在 Windows Vista 和更高版本中,调试器会尝试自动默认为 IP 版本 6,因此不需要此选项。
选项
可以在此处放置任何其他命令行参数。 有关完整列表,请参阅命令行选项。 如果使用 CDB,则必须指定要调试的进程。 如果使用 WinDbg,可以在命令行上或通过图形界面指定进程。
由于进程服务器只充当智能客户端的网关,因此,附加选项将与在目标应用程序相同的计算机上启动用户模式调试器时使用的选项相同。
如果将 -premote 选项与 .attach(附加到进程)或 .create(创建进程),一起使用,则参数与上面列出的参数相同。
故障排除
如果您看到此消息:客户端未使用与服务器相同版本的远程处理协议,这表明尝试连接的 DbgSrv 版本使用的协议版本与 WinDbg 版本不同。
协议更改的情况并不常见。 发生这种情况时,请确保使您使用的是最新可用版本的 DbgSrv 和 WinDbg(经典版)或 WinDbg 的匹配版本。 有关下载最新版本的信息,请参阅 Windows 调试工具。