假设需要对A建筑内的机器进行内核调试,而技术员在建筑C,他/她需要在那里访问符号。但是,两个建筑里面都有防火墙阻止外来的连接。
需要在另一个位置设置一个转发器 — 例如建筑B。然后可以从A连接到B,同时从C连接到B。
这种情况下需要4台计算机:
- 位于建筑A内的目标机。
- 位于建筑A里面的本地主机。该机器会运行KD连接服务器。它使用1394电缆连接到目标机,并且向外连接到转发器。假设它的IP地址是127.0.10.10。
- 位于建筑B内的计算机。他会运行转发器,假设它的IP是127.0.20.20。
- 技术员所在的建筑C。计算机上会运行WinDbg作为灵巧客户端。假设IP为127.0.30.30。
首先,确认目标机已经配置为可以调试并且被本地主机附加上去。本例中使用1394电缆。
然后,在127.0.20.20上启动转发器:
dbengprx -p -s tcp:port=9001 -c tcp:port=9000,clicon=127.0.10.10
第三步,在建筑A中的127.0.10.10机器上启动KD连接服务器:
kdsrv -t tcp:port=9000,clicon=127.0.20.20,password=longjump
最后,在建筑C的127.0.30.30机器上启动灵巧客户端。(这可以在启动建筑A的服务器之前或之后进行。)
windbg -k kdsrv:server=@{tcp:server=127.0.20.20,port=9001,password=longjump},trans=@{1394:channel=9} -y SymbolPath
5台计算机的情况
当符号在建筑C的计算机上,但是技术员在另外一台计算机上时,情况会更加复杂。
和刚才一样,假设127.0.30.30上有符号,并且它的本地名称为\\BOXC。灵巧客户端可以使用上面一样的命令但是增加一条-server
参数。由于没有人会使用这台机器,所以如果使用KD而不是WinDbg可以减少处理时间:
kd -server npipe:pipe=randomname -k kdsrv:server=@{tcp:server=127.0.20.20,port=9001,password=longjump},trans=@{1394:channel=9} -y SymbolPath
然后在建筑内其他地方的技术员可以用下面的命令启动调试客户端:
windbg -remote npipe:server=\\BOXC,pipe=randomname
注意,密码必须由连接链中的第一个非转发器(\\BOXC上的灵巧客户端)提供,而不是链尾的调试器提供。
Build machine: CAPEBUILD