跟我一起學windows初進階調試之你為什麼要學調試
本系列文章使用C/C++語言,vs內建調試器和windbg等其他相關調試工具,介紹windows下使用者態下的初進階調試,不涉及核心調試。
關於我
我不是專家,只是一個熱愛技術的程式猿。
寫本系列博文主要有以下三個目的:
1.系統的學習相關調試技術。
2.記錄學習曆程。
3.交流調試技術。
4.協助更多初學者。
適合人群:
1.使用C/C++語言編寫過相關windows程式,希望學習相關調試技術的童鞋。
2.熟悉IDE內建調試器調試,但對windbg不熟悉,希望使用windbg提高工作效率的童鞋。
3.使用過windbg進行調試,但並未系統的學習過相關調試理論的童鞋。
也許很多人會問調試還分為初級和進階調試嗎?在此我將初級調試和進階調試作以下分類:
初級調試:使用IDE內建調試工具,如vc6.0或vs內建調試器,在開發過程中使用斷點進行簡單的單步跟蹤、單步調試。
進階調試:使用windbg定位修複程式出現的各種複雜問題。如棧溢出,堆破壞、死結、資源流失等。
之所以這樣區分並不是因為vs內建調試器不如windbg。而是因為二者有各自的適用範圍 。
你為什麼要學調試
有過一段時間編程經驗的程式員都明白,程式不可能一遍寫成。需要經過多次的修改、運行、再修改再運行...經過若干次的迭代之後才會交付或發布。而發布也並不意味著結束,因為在運行中也會發現各種bug,然後就是改bug->測試->引入新bug->再測試等等這一系列的迭代過程。對於工期緊張的軟體項目,後期常常由於現有bug無法被修複,而導致延期交付,客戶有意見,領導不滿意,損害了公司的聲譽。而擁有了軟體調試的相關技術後,各種bug再也不在難以攻克了。
每每談起調試,聽到的更多的都是我使用vs內建的調試器已經足夠,為什麼還要學習什麼windbg?
不得不承認vs內建調試器的可操作性要比windbg好的多。在代碼編寫階段,vs是不二選擇。相比之下windbg卻擁有眾多晦澀難懂的命令,介面也相對醜陋,可操作性差,而且使用前需要配置。但是對於事後調試(以後會介紹)和定位類似死結、資源流失、堆破壞等複雜問題,Windbg就大有用武之地。Windbg基於命令列,靈活且功能強大。尺有所短寸有所長,二者適用範圍不一樣。後面我們會遇到同時使用二者進行問題定位與分析的情況。
學習調試技術的好處:
1. 將多方面知識融會貫通。
軟體調試涉及作業系統、cpu、編譯原理等各個方面的知識,是電腦各個模組複雜互動的過程,學習調試不僅可以提高我們的調試技能,還能夠加深對電腦系統的理解,將各個學科的知識融會貫通。
2. 應用到平時開發工作中去,提高軟體的可調試性。
在軟體開發過程中有目的的添加一些方便調試的代碼,方便了以後的調試。提高了調試效率同時也方便以後的維護。
3. 快速熟悉陌生代碼和系統底層。
運用調試手段觀察、跟蹤和理解代碼的執行過程,加深對軟體執行流程和系統底層的理解。
4. 提高工作效率。
很多軟體項目的延期是跟無法定位與解決存在的bug有關。掌握了基本的調試方法和調試工具後,可以提高工作效率。原本需要很長時間才能定位、發現的問題,可以很快的解決。你當然不需要加班加點,軟體項目也可按期交付,提高客戶滿意度和公司競爭力。
5. 提高個人核心競爭力,有利於個人長遠發展。
由於軟體調試技術廣泛的關聯性,增加了學習軟體調試技術的難度,准入門檻高,同時該技術在短時間內難以發展和升級。軟體調試技術具有很好的穩定性,一朝學會終生受用。
接觸過很多優秀的程式員,發現他們都很看中軟體調試。他們編寫的軟體在提交測試之前已經通過調試修複。對於測試發現的問題也能夠及時的發現問題的所在。因此在公司擁有很好的口碑。
初步計劃本系列文章分為初級篇、進階篇和進階篇。
接下來的初級篇的幾篇文章將包括以下幾個方面的內容:
1.介紹vs內建調試器的使用,並進行簡單調試。
2.初次接觸windbg,簡要介紹windbg使用。
3.使用windbg進行簡單的調試。
初級篇和進階篇均面向實用,一切以可以應用到實際使用為出發點。不注重講解各種長篇大論的調試理論。隨著認識的不斷深入,進階篇將會對各種理論進行系統闡述。
學習軟體調試是枯燥的,你必須一遍又一遍的去研讀調試理論。同時也是快樂的,我們享受攻克一個有一個難關後的欣喜。 在這個浮躁的時代,我們總是抱怨工資太少,房子太小,車子不好。可是抱怨之後情況仍不會有所改觀。改變現狀最好的辦法就是改變我們自己。靜下心去好好鑽研一些東西,提高自己的含金量。誰也不會虧待一個有真才實學的人。當然並不一定必須去鑽研調試技術,任何其他技術也一樣。
2014.2.9於浙江杭州