Debugging Tools for Windows

激活转发器

要激活转发器连接,一般来说要先启动服务器,然后启动转发器,最后启动客户端。

也可以先启动转发器然后再启动服务器。但是除非使用了clicon ,否则客户端总是最后一个启动的。

第一步:启动服务器

服务器可以是一个调试服务器、一个进程服务器或者KD连接服务器。可以按照常规的办法启动,只是通信协议设置为和转发器连接而不是客户端。详细信息查看激活调试服务器激活进程服务器激活KD连接服务器

如果创建服务器时使用了密码,该密码在客户端附加时才需要,而不是转发器创建时。

如果使用了hidden参数,服务器和平常一样也会被隐藏。转发器本身总是被隐藏的。

第二步:启动转发器

Windows调试工具包中包含的转发器称为DbEngPrx (dbengprx.exe)。

DbEngPrx可以使用这些传输协议:命名管道(NPIPe)、TCP和COM端口。

如果客户端和服务器使用安全套接字层(SSL),使用TCP协议来和转发器连接。如果客户端和服务器使用安全管道(SPIPE)协议,使用NPIPE和转发器连接。转发器会直接转发任何收到的数据 — 不会解析、加密或解密任何信息。所有的加解密都会由客户端和服务器来完成。

DbEnPrx 命令行语法如下:

dbengprx [-p-c ClientTransport -s ServerTransport 

上面命令的参数有以下可能值:

-p
使得DbEngPrx 在所有连接丢失之后仍然运行。
ClientTransport
指定和服务器之间的协议设置。该协议需要和服务器创建时指定的一样。协议语法如下:

npipe:pipe=PipeName[,hidden][,password=Password][,IcfEnable
tcp:port=Socket[,hidden][,password=Password][,IcfEnable
tcp:port=Socket,clicon=Client[,password=Password
com:port=COMPort,baud=BaudRate,channel=COMChannel[,hidden][,password=Password

协议参数有以下这些:

Server
这是服务器创建的机器的网络名或IP地址。开头的两个反斜杠(\\)是可选的。
pipe=PipeName
如果使用NPIPE或SPIPE协议,PipeName是服务器创建时指定的管道名。
port=Socket
如果使用TCP或SSL协议,Socket是服务器创建时指定的套接字端口号。
clicon
指定服务器由反向连接来连接到转发器。ClientTransport 当且仅当服务器使用clicon时才能使用clicon。大多数时候,使用反向连接时转发器要比服务器启动。
port=COMPort
使用COM协议时,COMPort 指定使用的COM端口。前缀"COM"是可选的 — 例如, "com2" 和"2"都可以使用。
baud=BaudRate
使用COM协议时,BaudRate 要和服务器创建时指定的波特率匹配。
channel=COMChannel
使用COM协议时,COMChannel 要和服务器创建时指定的频道号匹配。
Password
如果服务器创建时使用了密码,在创建客户端时必须指定 Password。它必须和原始密码匹配。密码是区分大小写的。如果提供了错误的密码,会提示错误信息"Error 0x80004005."
ipversion=6

(仅Debugging Tools for Windows 6.6.07 和更老的版本) 用TCP连接到Internet时强制调试器使用IPV6而不是V4。在Windows Vista和之后版本中,调试器会尝试默认使用IP v6,所以没有必要使用该选项。

ServerTransport
指定客户端连接转发器是使用的协议。可用的协议语法如下:

npipe:pipe=PipeName[,hidden][,password=Password]  
tcp:port=Socket[,hidden][,password=Password] [,IcfEnable
tcp:port=Socket,clicon=Client[,password=Password
com:port=COMPort,baud=BaudRate,channel=COMChannel[,hidden][,password=Password

协议的参数有以下这些:

pipe=PipeName
如果使用NPIPE或SPIPE协议,PipeName 是管道名的字符串。每个管道名都应该标识一个唯一的转发器。如果试图重用管道名,会收到一条错误消息。PipeName 不能包含空格或引号。PipeName 可以包含printf 形式的数字格式化代码,如%x %d。转发器用DbEngPrx 的进程ID来替代它,第二个格式化代码用DbEngPrx 的线程ID替代。
port=Socket
使用TCP或SSL协议时,Socket 是套接字端口号。也可以用一个冒号来指定端口范围(例如port=2:7)。转发器会检查该范围内的端口是否可用。如果找到了一个空闲端口并且没有出现错误,转发器连接服务器会被创建起来。客户端需要指定连接到转发器的实际端口号。 (如果使用了clicon参数来进行反向连接,客户端也可以按这种方式指定端口范围,而转发器连接服务器必须指定实际使用的端口。)
clicon=Client
使用TCP或SSL协议并指定clicon参数时,会打开反向连接。这意味着转发器会试图连接客户端,而不是由客户端来发起连接。这在当防火墙阻止通常方向上的连接时会比较有效。客户端指定客户端所在的计算机的网络名或IP地址。两个反斜杠(\\)是可选的。

因为使用转发器来寻找特定客户端的方式,所以不能将多个客户端连接到一个转发器。如果连接被拒绝或丢失,必须重起转发器。

使用clicon 时,最好在转发器创建之前启动客户端,虽然常规顺序也可以使用(转发器在客户端之前)。

port=COMPort
使用COM协议时,COMPort 指定使用的COM端口。前缀"COM"是可选的 — 例如,"com2" 和"2"都可以使用。在ClientTransportServerTransport 中不能使用相同的COM端口。
baud=BaudRate
使用COM协议时,BaudRate 指定连接使用的波特率。硬件所支持的所有波特率都可以使用。如果在ClientTransportServerTransport 中都使用COM协议,可以指定不同的波特率,但是客户端和服务器之间的连接速度会被较慢的一个限制。
channel=COMChannel
如果使用COM协议,COMChannel 指定和调试客户端通信所使用的COM频道。它可以是0到254之间的任意值(包含0和254)。单个COM端口可以通过使用不同的频道号来支持多个连接。 (这和调试电缆使用COM的情况不同—那种情况下COM端口不能使用频道。)
hidden
避免服务器在有人显示所有活动服务器时被显示出来。
password=Password
要求客户端在连接到调试会话时提供指定的密码。Password 可以是任何字母和数字组成的字符串。
IcfEnable
(Windows XP and later versions only) Causes the debugger to enable the necessary port connections for TCP or named pipe communication when the Internet Connection Firewall is active. By default, the Internet Connection Firewall disables the ports used by these protocols. When IcfEnable is used with a TCP connection, the debugger causes Windows to open the port specified by the Socket parameter. When IcfEnable is used with a named pipe connection, the debugger causes Windows to open the ports used for named pipes (ports 139 and 445). The debugger does not close these ports after the connection terminates.

第三步:启动客户端

客户端可以是一个调试客户端或灵巧客户端——由服务器类型决定。详细信息,查看激活调试客户端激活灵巧客户端激活灵巧客户端(内核模式)

如果服务器拒绝了连接(例如,密码错误),转发器和客户端都会被关闭。需要重起他们才能再次连接服务器。

Build machine: CAPEBUILD