扬长避短使用Windbg和Visual Studio高效调试调试你的代码
揚長避短使用Windbg和Visual Studio高效調(diào)試調(diào)試你的代碼
?
經(jīng)常被問及這樣的問題:
你為什么非要使用Windbg調(diào)試你的程序?
記得有一次面試的時候筆者也被問到這樣的問題,我的回答是:不是我非要使用Windbg, 只是在不同的情況下使用不同的工具會更加方便而高效。
?
那么這兩者到底有什么區(qū)別?在什么情況下用什么工具會更方便呢?
?
所謂尺有所短,寸有所長,那么筆者就總結(jié)一下在什么情況下用什么工具會更方便,可能不是100%的全面,但是應該可以說明一定的問題,希望給初學者以指引。
?
Case 1:
分析.dmp文件的時候,可以使用Windbg和Visual Studio,但是windbg更高效,.dmp文件是發(fā)生問題時的進程轉(zhuǎn)儲文件,windbg集成了一系列的基本命令和擴展命令,一句話,只要是.dmp文件里面有的,你都可以很快的得到。
?
Case 2:
問題沒有辦法重現(xiàn),就是說測試人員并不知道問題是怎么跑出來的,或者代碼跑了幾個月,跑出來一個問題,沒有辦法調(diào)試,只能抓一個.dmp文件,然后就回到了Case 1.
?
Case 3:
內(nèi)核調(diào)試,包括驅(qū)動,系統(tǒng)代碼,他們本身是運行在內(nèi)核級的,而我們的程序運行在用戶態(tài),如果希望調(diào)試這部分代碼,Visual Studio似乎有些力不從心,這個時候就是windbg發(fā)揮的時候了。
?
Case 4:
調(diào)試多線程死鎖問題,用windbg很容易分析出來那個線程占用了那個鎖。
?
Case 5:
分布式,RPC調(diào)用,利用Visual Studio看那個組件調(diào)用哪個組件很不方便,而是用windbg卻是一目了然。
?
Case 6:
內(nèi)存破壞問題,Visual Studio如果想查看內(nèi)存破壞問題簡直比登天還難,除非破壞完了馬上crash,但是大部分的情況是內(nèi)存破壞了,但是并不來表現(xiàn)出來,包括對破壞,棧破壞,windbg幾個命令就可以輕松搞定。
?
Case 7:
內(nèi)存泄漏問題,結(jié)合umdh, leakdiag這兩個工具,再加上windbg的內(nèi)存分析,可以說沒有查不出來的內(nèi)存泄漏。
?
注意:Windbg調(diào)試.Net代碼需要SOS擴展..
?
總結(jié)
首先需要說明的是本文的目的并不是說Visual Studio和Windbg這兩個工具哪個好哪個差,只是說在不同的場合不同的工具可能更加高效,請大家不要誤解。另外Visual Studio絕對是Windows開發(fā)的利器, 在大多數(shù)Windows代碼開發(fā),調(diào)試方面具有不可替代的作用,如果說Visual Studio是利器,那么Windbg絕對是個神器,在一些極端的場合絕對可以獨當一面。本文并沒有羅列所有的cases, 如果大家有什么好的建議可以提出來,如果有必要的話,我會繼續(xù)補充更多的cases. 待續(xù).. ? ?
轉(zhuǎn)載于:https://www.cnblogs.com/pugang/archive/2012/06/24/2559697.html
總結(jié)
以上是生活随笔為你收集整理的扬长避短使用Windbg和Visual Studio高效调试调试你的代码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 小强升职记要点
- 下一篇: 从FLC中学习的设计模式系列-创建型模式