1. 程式人生 > >跟我一起學windows初高階除錯(1) --你為什麼要學除錯

跟我一起學windows初高階除錯(1) --你為什麼要學除錯

                   跟我一起學windows初高階除錯之你為什麼要學除錯

       本系列文章使用C/C++語言,vs自帶偵錯程式和windbg等其他相關除錯工具,介紹windows下使用者態下的初高階除錯,不涉及核心除錯。

關於我

我不是專家,只是一個熱愛技術的程式猿。

寫本系列博文主要有以下三個目的:

   1.系統的學習相關除錯技術。

   2.記錄學習歷程。

   3.交流除錯技術。

   4.幫助更多初學者。

適合人群:

   1.使用C/C++語言編寫過相關windows程式,希望學習相關除錯技術的童鞋。

   2.熟悉IDE自帶偵錯程式除錯,但對windbg不熟悉,希望使用windbg

提高工作效率的童鞋。

   3.使用過windbg進行除錯,但並未系統的學習過相關除錯理論的童鞋。

     也許很多人會問除錯還分為初級和高階除錯麼?在此我將初級除錯和高階除錯作以下分類:

     初級除錯:使用IDE自帶除錯工具,如vc6.0vs自帶偵錯程式,在開發過程中使用斷點進行簡單的單步跟蹤、單步除錯。

     高階除錯:使用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於浙江杭州

相關推薦

一起windows高階除錯1 --為什麼除錯

                   跟我一起學windows初高階除錯之你為什麼要學除錯       本系列文章使用C/C++語言,vs自帶偵錯程式和windbg等其他相關除錯工具,介紹windows

一起讀Hadoop原始碼——HDFS篇01

寫在前面的話 這裡是跟我一起讀Hadoop原始碼系列的第一篇,主要記錄作者在讀Hadoop原始碼的過程 軟體版本 -Hadoop2.6.0 讀前知識 -瞭解RPC程式設計 -瞭解Java基礎 從NameNode開始 在Hadoop

從零開始一起學習SLAM1為什麼SLAM?

從零開始一起學習SLAM | 為什麼要學SLAM?   計算機視覺的研究目前主要分為兩大方向:基於學習的方法和基於幾何的方法。其中基於學習的方法最火的就是深度學習,而基於幾何方法最火的就是視覺SLAM。   SLAM將成為計算機視覺的下一個風口   在前幾

的微信小程序入門1

app 用戶 註冊 教程 微信公眾平臺 聯網 互聯 一個 .com 作為互聯網行業的一員,我們需要一個可以快速接受新鮮事物的腦袋。很高興的是,我有一半這樣的腦袋。 今年的互聯網行業,出現了一個生猛的新軍,那便是“微信小程序”了。 微信是近幾年最熱門的軟件應用(農藥也是)。而

Hadoop架構的略總結1

安全 use 請求 參考 內存 文件系統 href 獲得 監控 Hadoop架構的初略總結(1) Hadoop是一個開源的分布式系統基礎架構,此架構可以幫助用戶可以在不了解分布式底層細節的情況下開發分布式程序。 首先我們要理清楚幾個問題。 1.我們為什麽需要Hadoop

Revit二次開發高階應用1——利用wcf做簡單的族庫管理

因為對應用場景不是特別明確,暫時就用wcf做一個可以上傳和下載的功能來管理族庫。 1、用WCF做服務端的上傳下載管理 首先新增上傳下載的介面: [ServiceContract] public interface IFileService { //上傳

Windows網路程式設計基礎1---郵槽

/* 2018-9-6 12:21:04 郵槽的使用 */ 預備知識:CreateFile,ReadFile的使用 關鍵的函式 CreateMailslot 如果建立失敗 返回一個無效的控制代碼值INVILID_HANDLE_VALUE 用一個有效的控制代碼建立了郵槽之後,便可開始資料的實際讀取

JAVA高階基礎1---集合框架的認識

集合 集合的由來 通常,我們的程式需要根據程式執行時才知道建立多少個物件。但若非程式執行,程式開發階段,我們根本不知道到底需要多少個數量的物件,甚至不知道它的準確模型。為了滿足這些常規的程式設計需要,我們要求能在任何時候,任何地點建立任意數量的物件,而這些物件用什麼來容納呢?我們首先想到

Windows下使用Redis1安裝和使用

一、redis是什麼 redis是一款根據bsd開源協議發行的高效能key-value儲存系統。他通常被稱為資料結構伺服器,因為值可以是字串,雜湊,列表,集合,有序集合和點陣圖等型別。 最好的地方就是提供資料持久化功能,定時把記憶體寫入檔案,從而不至於造成資料丟失,相對於

微信公眾號實現關注使用者進行訊息的互動功能1封裝基本類

微信公眾號實現跟關注使用者進行訊息的互動功能,我們可以簡單的理解: (1)首先,使用者向微信伺服器傳送訊息; (2)微信伺服器接收到使用者的訊息處理之後,通過開發者配置的URL和Token 來找到第三方伺服器,並以XML形式向第三方伺服器傳送訊息。 (3)第三方伺服

gdb除錯1:單步執行和跟蹤函式呼叫

轉發自:http://songjinshan.com/akabook/zh/gdb.html#id1看下面的程式: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18#include <stdio.h> in

windows深度學習入門1在windows10上安裝TensorFlow

主要步驟:首先安裝python和pip,再通過pip安裝tensorflow,如果是安裝CPU版本的非常簡單,如果安裝GPU版本的話,還需要再安裝CUDA和CuDNN。 1.安裝python與pip,由於我之前的python是python 3.6,然而pyth

Windows驅動開發WDM 1

驅動物件(DRIVER_OBJECT)每個驅動程式會有唯一的驅動物件與之對應,並且這個驅動物件是在驅動載入的時候,被核心中的物件管理程式所建立的。說明一下其中的一個成員:DeviceObject。MSDN上面是這麼定義:PDEVICE_OBJECT DeviceObjectP

Boost---在Windows上的入門1

準備好了嗎? 我們走吧! 在 Windows 上入門 Cygwin和MinGW使用者注意 如果您計劃使用您從 Windows 命令提示符的工具,你在正確的地方。如果你打算建立從Cygwin bash shell,你實際上跑步在 POSIX 的平臺上,應該按照入門對 Unix 變體。其他命令外殼, M

程式設計與演算法第十週 c++新特性和c++高階主題 1

#include <iostream> using namespace std; class A{}; A operator+(int n, const A& a) { return a; } template<class T1, class

的日常報錯學習記錄1

專案中遇到此錯誤,極其簡單,但還是找了很久不知道怎麼解決,搜查結果都是說是bean配置等錯,無法解決我的錯誤,現貼出錯誤程式碼如下: 1 org.springframework.beans.factory.BeanCreationException: Error creating b

requests的高階用法1

1.會話物件 1)會話物件能夠跨請求保持某些引數,會在同一個session例項發出的所有請求之間保持cookie;(Cookies是伺服器在本地機器上儲存的小段文字並隨每一個請求傳送至同一伺服器,是在客戶端保持狀態的方案;session是儲存在伺服器上的資訊。) >

基於MFC的計算機圖形之基本圖形生成1

基於MFC的計算機圖形學之基本圖形生成(1) 1.DDA中點畫線 下面的程式碼是在doc.cpp中加的,在view裡面還要新增相應的選單響應函式和滑鼠移動函式 int x,x0,y0,x1,y1,flag; float m,y; DCPoint->SetROP2(R2_CO

UNIX環境高階程式設計1:UNIX基礎知識1

本系列文章是學習被譽為UNIX程式設計聖經的《UNIX環境高階程式設計》的讀書筆記。《UNIX環境高階程式設計》的英文全稱為《Advanced Programming in the UNIX Envi

Python高階特性1:Iterators、Generators和itertools

【譯註】:作為一門動態指令碼語言,Python對程式設計初學者而言很友好,豐富的第三方庫能夠給使用者帶來很大的便利。而Python同時也能夠提供一些高階的特性方便使用者使用更為複雜的資料結構。本系列文章共有三篇,本文是系列的第一篇,將會介紹迭代器、生成器以及iter