揚長避短使用Windbg和Visual Studio高效調試調試你的代碼


揚長避短使用WindbgVisual Studio高效調試調試你的代碼

 

經常被問及這樣的問題:

你為什么非要使用Windbg調試你的程序?

記得有一次面試的時候筆者也被問到這樣的問題,我的回答是:不是我非要使用Windbg, 只是在不同的情況下使用不同的工具會更加方便而高效。

 

那么這兩者到底有什么區別?在什么情況下用什么工具會更方便呢?

 

所謂尺有所短,寸有所長,那么筆者就總結一下在什么情況下用什么工具會更方便,可能不是100%的全面,但是應該可以說明一定的問題,希望給初學者以指引。

 

Case 1:

分析.dmp文件的時候,可以使用WindbgVisual Studio,但是windbg更高效,.dmp文件是發生問題時的進程轉儲文件,windbg集成了一系列的基本命令和擴展命令,一句話,只要是.dmp文件里面有的,你都可以很快的得到。

 

Case 2

問題沒有辦法重現,就是說測試人員並不知道問題是怎么跑出來的,或者代碼跑了幾個月,跑出來一個問題,沒有辦法調試,只能抓一個.dmp文件,然后就回到了Case 1.

 

Case 3:

內核調試,包括驅動,系統代碼,他們本身是運行在內核級的,而我們的程序運行在用戶態,如果希望調試這部分代碼,Visual Studio似乎有些力不從心,這個時候就是windbg發揮的時候了。

 

Case 4

調試多線程死鎖問題,用windbg很容易分析出來那個線程占用了那個鎖。

 

Case 5

分布式,RPC調用,利用Visual Studio看那個組件調用哪個組件很不方便,而是用windbg卻是一目了然。

 

Case 6

內存破壞問題,Visual Studio如果想查看內存破壞問題簡直比登天還難,除非破壞完了馬上crash,但是大部分的情況是內存破壞了,但是並不來表現出來,包括對破壞,棧破壞,windbg幾個命令就可以輕松搞定。

 

Case 7

內存泄漏問題,結合umdh, leakdiag這兩個工具,再加上windbg的內存分析,可以說沒有查不出來的內存泄漏。

 

注意:Windbg調試.Net代碼需要SOS擴展..

 

總結

首先需要說明的是本文的目的並不是說Visual StudioWindbg這兩個工具哪個好哪個差,只是說在不同的場合不同的工具可能更加高效,請大家不要誤解。另外Visual Studio絕對是Windows開發的利器, 在大多數Windows代碼開發,調試方面具有不可替代的作用,如果說Visual Studio是利器,那么Windbg絕對是個神器,在一些極端的場合絕對可以獨當一面。本文並沒有羅列所有的cases, 如果大家有什么好的建議可以提出來,如果有必要的話,我會繼續補充更多的cases. 待續..    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM