使用windbg調試release程序

簡介:最近常常會碰到客戶那邊出現各類奇怪的問題,因爲日誌不可能徹底記錄運行信息,又或者日誌回滾致使記錄信息丟失等,沒法定位bug出現位置,這時你很是但願本身的可以單步調試。下面是vs2008+windbg研究的結果,可能存在不完善的地方,但願牛人不吝賜教,互相學習。<br/> 補充:通常寫完程序以後,本身會寫一些測試用例來測試本身寫的程序,進行完單元測試以後會交由測試部進行測試,可是不可以保證全部的bug都會被測試出來,多數會由客戶電腦負責的環境致使程序出現一些莫名其妙的問題,廢話很少說了。<br/>windows


調試環境

測試環境:windows 7<br/> 開發工具:vs2008, windbg6.3.9600<br/> ##調試代碼## #include <stdio.h> void TestFunc(int nVar, char *pStr) { printf("juest print nVar:%d, pStr:%s\n", nVar, pStr ? pStr:"null"); }函數

void main()
{
TestFunc(1, "hello world!");
}

##vs2008 release模式設置##工具

  • /Zi 該命令是生成PDB文件中包含變量名和函數名,不會影響到優化選項(生成代碼時vs release版會對代碼進行優化) ![在此輸入圖片描述][1]單元測試

  • /01 優化模式,這個會最大優化生成二進制文件大小學習

![在此輸入圖片描述][2]<br/>開發工具

  • 使用以上設置使用windbg調試,設置PDB的路徑,經過打開File->Symbol File Path

![在此輸入圖片描述][3]<br/> ![在此輸入圖片描述][4]<br/>測試

因爲上傳圖片200kb限制,我只能分紅兩張圖片上傳,圖片中你會發現,堆棧中TextFunc的參數並不是咱們想要看到的參數,那時候由於編譯器對我麼的生成文件作了優化,這時你須要經過Memory來根據參數地址去查看參數的值,若是對於軟件運行速度沒有太大的要求,建議設置下面的一種方式。<br/>還有就是咱們只設置了Symbol符號,並無設置Source符號,可是確顯示能夠看到原文件,那是由於符號文件中有記錄源文件的位置,若是換臺機器,那麼將不會看到源文件,這是你就要設置一下源文件的路徑了。<br/>優化

  • /Od 禁用優化 可能會影響到release版本運行的速度,但對咱們調試是頗有幫助的,不用再去查內存

![在此輸入圖片描述][5]spa

  • 這時咱們再使用windbg調試,那麼將會跟使用vs調試基本同樣

![在此輸入圖片描述][6].net

總結:以上就是學習windbg去調試release發行程序的方法,若是有好的方法咱們能夠一塊兒學習,歡迎前來指導! [1]: http://static.oschina.net/uploads/space/2014/0527/215627_ViHU_1448554.jpg [2]: http://static.oschina.net/uploads/space/2014/0527/222824_JYXc_1448554.jpg [3]: http://static.oschina.net/uploads/space/2014/0527/223622_JnEg_1448554.jpg [4]: http://static.oschina.net/uploads/space/2014/0527/223750_MtXI_1448554.jpg [5]: http://static.oschina.net/uploads/space/2014/0527/224613_STWx_1448554.jpg [6]: http://static.oschina.net/uploads/space/2014/0527/224857_e82c_1448554.jpg

相關文章
相關標籤/搜索