天天看點

使用PowerDbg自動化Windbg調試過程

PowerDbg是一個PowerShell腳本,使用這個腳本可以連接配接到windbg上面,遠端控制windbg,可以通過程式設計的方式分析windbg輸出;加之PowerDbg強大的程式設計能力,友善我們編寫一些強大的調試腳本。

PowerDbg的工作原理是,在Windbg裡設定一個遠端調試伺服器,啟動另一個調試器—通常是指令行的調試器(例如cdb.exe)作為用戶端。然後PowerDbg使用程序重定向的功能将調試指令輸入到cdb.exe,再由cdb.exe再輸入到windbg遠端調試伺服器上遠端執行。接着将windbg的指令重定向到PowerShell腳本,當然啦輸出結果會被PowerShell處理以後再顯示出來。

簡單介紹一下用法:

1.       在Windbg這一邊,打開一個要調試的程式,接着打開遠端調試伺服器功能,通過下面這個指令可以做到:

.server tcp:port=12345

2.       将下載下傳下來的PowerDbg源代碼解壓後,把檔案夾Module裡面的WinDbg拷貝到C:\Windows\System32\WindowsPowerShell\v1.0\Modules\。這裡假定你的系統盤是C槽。

3.       啟動PowerShell,需要以管理者的權限啟動(Vista以上需要以提升後的管理者權限啟動)。

4.       在PowerShell裡輸入(Win 7裡,PowerShell在附件菜單下面):

set-executionpolicy unrestricted

5.       接着輸入下面的指令導入PowerDbg子產品

import-module WinDbg

6.       輸入下面的PowerDbg指令連接配接到遠端Windbg伺服器上(如果你的windbg.exe不是安裝在C:\Debuggers目錄下,那麼你需要手工修改一下檔案C:\Windows\System32\WindowsPowerShell\v1.0\Modules\WinDbg\WinDbg.psm1裡的$cdbPath變量的值):

Connect-Windbg "tcp:Port=12345,Server=機器名"

7.       這下就可以執行Windbg指令了,使用Send-PowerDbgCommand來發送指令(指令的參數就是你要發送的指令):

Send-PowerDbgCommand "g"

8.       在Windbg觸發到斷點以後,你就可以執行一些操作,并且讀取格式化過後的輸出了。例如下面兩個指令:

Send-PowerDbgCommand ".loadby sos mscorwks"

Analyze-PowerDbgThreads

下面就是輸出,你可以看到PowerDbg将各個線程的狀态都用文字的形式描述出來了,而不象原來sos!Threads隻是列印一些莫名其妙的數字:

如果要取消與Windbg的連接配接,使用下面的指令就可以做到了:

Disconnect-Windbg

本文轉自 donjuan 部落格園部落格,原文連結: http://www.cnblogs.com/killmyday/archive/2010/05/24/1743097.html  ,如需轉載請自行聯系原作者

繼續閱讀