Windows调试工具包中包含的进程服务器称为DbgSrv (dbgsrv.exe)。
DbgSrv支持几种传输协议:命名管道(NPIPE)、TCP、COM端口、安全管道(SPIPE)和安全套接字层(SSL)。
DbgSrv 命令行语法依赖于所使用的协议。有下面一些不同的形式:
dbgsrv -t npipe:pipe=PipeName[,hidden][,password=Password][,IcfEnable] [-x | -pc] [[-sifeo Executable] -c[s] AppCmdLine]
dbgsrv -t tcp:port=Socket[,hidden][,password=Password][,ipversion=6][,IcfEnable] [-x | -pc] [[-sifeo Executable] -c[s] AppCmdLine]
dbgsrv -t tcp:port=Socket,clicon=Client[,password=Password][,ipversion=6] [-x | -pc] [[-sifeo Executable] -c[s] AppCmdLine]
dbgsrv -t com:port=COMPort,baud=BaudRate,channel=COMChannel[,hidden][,password=Password] [-x | -pc] [[-sifeo Executable] -c[s] AppCmdLine]
dbgsrv -t spipe:proto=Protocol,{certuser=Cert|machuser=Cert},pipe=PipeName[,hidden][,password=Password] [-x | -pc] [[-sifeo Executable] -c[s] AppCmdLine]
dbgsrv -t ssl:proto=Protocol,{certuser=Cert|machuser=Cert},port=Socket[,hidden][,password=Password] [-x | -pc] [[-sifeo Executable] -c[s] AppCmdLine]
dbgsrv -t ssl:proto=Protocol,{certuser=Cert|machuser=Cert},port=Socket,clicon=Client[,password=Password] [-x | -pc] [[-sifeo Executable] -c[s] AppCmdLine]
上面命令中的参数有以下这些可能值:
- pipe=PipeName
- 当使用NPIPE或SPIPE协议时,PipeName
是用作管道名的字符串。每个管道名都应该标识一个唯一的进程服务器。如果尝试重复使用管道名,会收到一条错误信息。PipeName
不能包含空格或引号。PipeName 可以包含数字的printf 形式格式化代码,例如%x
或%d。进程服务器会将它替换为DbgSrv的进程ID。第二个这样的代码会被替换为DbgSrv的线程ID。
- port=Socket
- 当使用TCP或SSL时,Socket 是套接字的端口号。也可以用一个冒号来指定端口范围(例如port=2:7)。DbgSrv会检查该范围内的端口是否可用。如果找到了一个空闲端口并且没有出现错误,进程服务器会被创建起来。灵巧客户端需要指定连接到服务器的实际端口号。
(如果使用了clicon参数来进行反向连接,灵巧客户端也可以按这种方式指定端口范围,而进程服务器必须指定实际使用的端口。)
- clicon=Client
- 使用TCP或SSL协议并指定clicon 参数时,会打开反向连接。这意味着进程服务器会试图连接调试客户端,而不是由灵巧客户端来发起连接。这在当防火墙阻止通常方向上的连接时会比较有效。客户端指定灵巧客户端所在的计算机的网络名或IP地址。两个反斜杠(\\)是可选的。
如果使用进程服务器来寻找特定客户端的方式,就不能将多个客户端连接到一个服务器。如果连接被拒绝或丢失,必须重起进程服务器。当使用-QR命令显示所有活动服务器时,反向连接的进程服务器不会被列举出来。
注意 使用clicon时,最好在进程服务器创建之前启动灵巧客户端,但是正常的顺序(服务器在客户端之前)也可以使用。
- port=COMPort
- 使用COM协议时,COMPort 指定使用的COM端口。前缀"COM"是可选的 — 例如,"com2" 和"2"都可以使用。
- baud=BaudRate
- 使用COM协议时,BaudRate 指定连接使用的波特率。硬件所支持的所有波特率都可以使用。
- channel=COMChannel
- 如果使用COM协议,COMChannel
指定和调试客户端通信所使用的COM频道。它可以是0到254之间的任意值(包含0和254)。单个COM端口可以通过使用不同的频道号来支持多个连接。
(这和调试电缆使用COM的情况不同 — 那种情况下COM端口不能使用频道。)
- proto=Protocol
- (Windows 2000 和之后的系统) 如果使用SSL或SPIPE,Protocol
指定安全频道(S-Channel)协议。它可以是tls1、pct1、ssl2或ssl3。
- Cert
- (Windows 2000和之后的系统) 如果使用SSL或SPIPE协议,Cert
用于指定证书。它可以是证书名或证书的特征码(由证书管理机构提供的16进制数字字符串)。如果使用certuser=Cert
形式的语法,调试器会在系统存储中查找证书(默认存储位置)。如果使用machuser=Cert
的语法,调试器在机器存储中查找证书。指定的证书必须支持服务器验证。
- hidden
- 避免该服务器在使用-QR命令行选项显示所有活动服务器时被显示出来。
- password=Password
- 要求灵巧客户端在连接到进程服务器时提供指定的密码。Password 可以是任何字母和数字组成的字符串。
注意 在TCP、NPIPE或COM协议下使用密码仅提供低程度的保护,因为密码不会被加密。当密码和SSL或SPIPE协议一起使用时,会被加密。如果需要安全的远程会话,必须使用SSL或SPIPE协议!
- ipversion=6
-
(仅Debugging Tools for Windows 6.6.07 和更老的版本)
用TCP连接到Internet时强制调试器使用IPV6而不是V4。在Windows Vista和之后版本中,调试器会尝试默认使用IP
v6,所以没有必要使用该选项。
-
- IcfEnable
- (仅Windows XP和之后版本)
使得当Internet连接防火墙启动时,调试器启用TCP或命名管道所需要的端口。默认情况下,Internet连接防火墙会禁止这些协议所使用的端口。TCP连接使用IcfEnable后,调试器会让Windows打开Socket
参数所指定的端口。命名管道连接使用IcfEnable
后,调试器会让Windows打开命名管道所使用的端口(139端口或445端口)。调试器在连接关闭后,不会关闭这些被打开的端口。
- -x
- 忽略后面的命令行。在从一个可能在命令行中添加不需要的文本的程序启动DbgSrv时该选项很有用。
- -sifeo Executable
- 挂起指定映像的映像文件执行选项(Image File Execution Option (IFEO))值。Executable需要包含可执行映像的文件名和扩展名。
-sifeo 选项使得DbgSrv可以设置成为使用--c
选项启动的映像的IFEO调试器,而不会因为IFEO设置造成递归请求。该选项只有使用了-c时才可以使用。
- -c
- 使DbgSrv创建一个新进程。可以用它来创建打算调试的进程。这和从调试器启动新进程类似,但是该进程启动后并不会被调试。要调试它,需要找到PID并在启动灵巧客户端调试该进程时使用-p选项指定。
- s
- 使得新创建的进程被立即挂起。如果使用该选项,建议使用CDB作为灵巧客户端,并且使用-pb和-p PID命令结合来启动灵巧客户端。如果命令行中包含了-pb选项,当调试器附加上去之后,进程会恢复运行;另外,也可以通过~*m命令来恢复运行。
- AppCmdLine
- 指定被创建进程的完整命令行。AppCmdLine 可以是Unicode或ASCII字符串,并且可以包含任何可打印字符。-c[s]参数后的任何文本都会被认为是AppCmdLine字符串的内容。
可以在计算机上启动任意数量的进程服务器。但是通常这是不需要的,因为一个进程服务器就可以被任意数量的灵巧客户端使用(每个都在不同的调试会话中)。
Build machine: CAPEBUILD