用WinDBG遠端除錯程式

berryz2007發表於2010-12-12
在某些情況下我們需要進行遠端除錯(比如該程式執行需要時候全屏,或者程式在客戶的機器上crash崩潰), 這時候可以使用WinDBG的遠端除錯功能。
WinDBG的遠端除錯由服務端和客戶端組成,和visual studio類似。 被除錯的機器是服務端(server), 我們做除錯的機器是客戶端(client)。 兩臺機器都需要安裝WinDBG。
第一步, 建立WinDBG server 端。
使用 -server 引數可以使WinDBG 以伺服器方式啟動。 WinDBG可以用多種連線協議讓客戶端連線,比如命名管道(named pipe), 安全管道(secure pipe), TCP 協議(socket), SSL 協議, 串列埠/並口(COM port) 等等。
命名管道
WinDBG.exe server npipe:pipe=PipeName[,hidden][,password=Password][,IcfEnable] [noio] [Options] 

TCP 協議
WinDBG.exe server tcp:port=Socket[,hidden][,password=Password][,ipversion=6][,IcfEnable] [noio] [Options] 
WinDBG.exe server tcp:port=Socket,clicon=Client[,password=Password][,ipversion=6] [noio] [Options] 

串列埠/並口
WinDBG.exe server com:port=COMPort,baud=BaudRate,channel=COMChannel[,hidden],password=Password] [noio] [Options] 

安全管道
WinDBG.exe server spipe:proto=Protocol,certuser=Cert|machuser=Cert},pipe=PipeName[,hidden],password=Password] [noio] [Options] 

SSL 協議
WinDBG.exe server ssl:proto=Protocol,certuser=Cert|machuser=Cert},port=Socket[,hidden],password=Password] [noio] [Options]
WinDBG.exe server ssl:proto=Protocol,certuser=Cert|machuser=Cert},port=Socket,clicon=Client[,password=Password] [noio] [Options]
 

示例:
WinDBG.exe server npipe:pipe=DbgPipe winmine.exe (使用命名管道DbgPipe 建立除錯服務,除錯winmine.exe 程式)
WinDBG.exe -server tcp:port=1025 -p 122 (使用TCP協議,在埠1025建立除錯服務, 除錯機器上程式號為122的程式, 或者說Attach 到122程式進行除錯)
第二步, 用WinDBG client 端連線服務端
使用 -remote 引數可以使WinDBG 以客戶端方式啟動去連線服務端, 可以指定不同的連線方式:
命名管道
WinDBG.exe -remote npipe:server=Server,pipe=PipeName[,password=Password]

TCP 協議
WinDBG.exe -remote tcp:server=Server,port=Socket[,password=Password][,ipversion=6]
WinDBG.exe -remote tcp:clicon=Server,port=Socket[,password=Password][,ipversion=6]

串列埠/並口
WinDBG.exe -remote com:port=COMPort,baud=BaudRate,channel=COMChannel[,password=Password]

安全管道
WinDBG.exe -remote spipe:proto=Protocol,{certuser=Cert|machuser=Cert},server=Server,pipe=PipeName[,password=Password]

SSL 協議
WinDBG.exe -remote ssl:proto=Protocol,{certuser=Cert|machuser=Cert},server=Server,port=Socket[,password=Password]
WinDBG.exe -remote ssl:proto=Protocol,{certuser=Cert|machuser=Cert},clicon=Server,port=Socket[,password=Password] 

示例 (假設被除錯的機器名字是dbgPC):


WinDBG.exe-remote npipe:server=dbgPC,pipe=DbgPipe(使用命名管道DbgPipe 建立連線被除錯機器dbgPC)


WinDBG.exe-remote tcp:server=dbgPC,port=1025 (使用TC協議, 連線被除錯機器dbgPC的埠1025)

關於Windows 遠端除錯更多詳細的內容,請參考MSDN http://msdn.microsoft.com/en-us/library/cc266457.aspx 



相關文章