vc6.0程式除錯技術總結

查志強發表於2014-12-16

【原文:http://blog.csdn.net/changqiang08/article/details/7642387

 vc6.0程式除錯技術總結

學c語言,一直編寫的都是小程式。但是在寫微控制器程式時,會出現一些問題,就需要程式的除錯技術。在圖書館借了一本書《c語言程式設計實驗教程》(西工大出版社),再結合網上一些網友的博文,在這裡對vc6.0的程式除錯技術簡單梳理一下。

       現代程式除錯的方法主要有兩種:單步法、斷點法。

      一、單步法

        a、step  into                 F11                單步除錯

             遇到函式時,會進入到函式內部進行更深入的單步除錯,若是系統庫函式程式碼。則可能進入指令級而非原始碼級的單步除錯。

        b、step  over                F10                單步除錯

            遇到函式時。把函式當做 “一步” 來完成除錯,如遇到已除錯正確的函式,或系統庫函式就可以直接用step  over

        c、step   out                 F11 +  shift     退出

        d、run to cursor           F10 +  ctrl        多步除錯/快步除錯

        step  into和step  over的區別是step  over一直下一步,step  into 在step  over的基礎上,遇到函式會進入到函式內部,以便更深入的單步除錯。

        run to cursor可進行多步除錯,從當前程式除錯執行的程式行執行到游標所在程式行。

       二、斷點法

           基本思想:在程式中,設定若干斷點,在執行過程中程式連續執行下去,遇到斷點程式或斷點條件時停止,在停下來的地方進行單步除錯。

        a、insert  breakpoint                 F9                斷點設定

        b、remove  breakpoint              F9                斷點刪除

        c、location                                                     條件斷點  

            為斷點設定一個條件,條件可為表示式,當表示式發生改變時,除錯結束。

        d、data                                                          資料斷點

             為斷點設定一個表示式(運算子+全域性變數),當表示式的值發生改變時,資料斷點就會到達,除錯結束。

        e、message                                                   訊息斷點   

           windows 程式對windows訊息進行截獲(截獲方式:視窗訊息處理函式和特定資訊中斷),當輸入訊息處理函式的名字,當每次有訊息被這個函式處理時,斷點就會到達。

   

    (1)、條件斷點   

   1、按F9,設定斷點位置。


 2、按快捷鍵“alt+ F9”, 或通過選單“edit/breakpoints”開啟“breakpoints”對話方塊選擇設定的斷點,如下圖

3、條件斷點的表示式:i==0&&j==4


4、單擊OK。現在我們開始除錯程式,按F5, VC會彈出一個提示對話方塊,提示在你設定的條件斷點的中斷位置:




(2)資料斷點

1、第1步和條件斷點一樣

2、

3、




(3)訊息斷點

   略

三、觀察法

通過單步或者斷點,可以使使指定的程式停下來,vc提供多種資料觀察方法來了解程式執行期間的各種資訊,從而判斷錯誤的原因。

(1)檢視(watch)

vc支援檢視變數、表示式和記憶體的值,當斷點到達時,將游標移動到該變數和表示式上時停留片刻,就可以看到變數和表示式的值。

(2)定製檢視(Quick Watch)

vc提供一種被稱為watch的機制,檢視變數、表示式的值,在斷點狀態下,在變數上單擊右鍵,選擇“Quick Watch ”,彈出一個“Quick Watch ”對話方塊,顯示這個變數的值。表示式亦然,但這個表示式不能有副作用,“++”操作符會改變變數的值。

單吉Debug工具條上的“ Watch ”按鈕,就出現一個“ Watch ”檢視,在該檢視中輸入變數和表示式,就可以檢視變數、表示式的值。

(3)記憶體檢視(memory)

由於指標指向的陣列,“ Watch ”只能檢視第一個元素的值,為了顯示其他元素,可以使用memory功能。單吉Debug工具條上的memory ”按鈕,就出現一個memory ”檢視,在該檢視中輸入地址和陣列名,就可以顯示該地址指向的記憶體的內容。

(4)變數檢視(varibles)


(5)暫存器檢視(Registers)

單吉Debug工具條上的“ Registers ”按鈕,就出現一個“ Registers  ”檢視,顯示當前所有暫存器的值。

(6)呼叫堆疊(Call Stack )

呼叫堆疊反映了當前斷點處函式是被哪些函式按照什麼順序呼叫的。單吉Debug工具條上的“ Call Stack ”按鈕,就出現一個Call Stack ”對話方塊,在該對話方塊顯示了一個呼叫序列,最上面的是當前函式,往下依次是呼叫函式的上級函式。單擊對應的函式,就可以跳轉到對應的函式中去。

(7)反彙編檢視(Disassembly)。



另:先下斷點,然後按F5或者點選Debug->Start Debuging程式停在斷點處。
然後點選按鈕 Debug->Windows->DisAssambly

可以找到各個檢視視窗


博文寫完後,發現一篇較好的,留存,以後慢慢看:

http://www.vckbase.com/index.php/wv/683


相關文章