快速修復 bug 的技巧?初學者的痛點,教你一招搞定!

前言

       寫 bug 和改 bug 是每個程序員都繞不過的話題,在編寫代碼的過程中,相信大家肯定遇到過這種情況:代碼編譯通過,沒有語法錯誤,但是運行結果卻報錯或和預期不同,反覆檢查了很多遍,仍然無法修復錯誤 。

       那麼,當我們一不小心"小手一抖",又寫出一個 bug 時,如何快速修復 bug 呢?     

       答案必須是調試

       所謂調試,就是控制代碼的執行速度,追蹤程序的運行過程。比如,可以讓程序停在某個地方,查看當前所有變量的值、或者內存中的數據;也可以讓程序繼續執行若干語句,看看程序到底執行了什麼代碼。

       優秀的集成開發環境必然會提供優秀的調試機制,優秀的程序員必然掌握優秀的調試技巧。接下來我就以 VS 爲例,盤點一下常用的調試技巧。

首先,用一張圖快速概括一下調試的基本流程

爲了使大家更容易理解具體的調試步驟,此處先對調試的基本概念做一個梳理:

斷點:所謂斷點(BreakPoint),可以理解爲障礙物,人遇到障礙物不能行走,程序遇到斷點就暫停執行。

逐語句調試:逐語句,就是每次執行一行語句,如果碰到函數調用,它就會進入到函數裏面。

逐過程調試:逐過程,碰到函數時,不進入函數,把函數調用當成一條語句執行。

跳出當前執行過程:跳出,是當你進入到函數內,跳出可以讓你直接執行函數內剩餘的語句,直到返回到該函數被調用時的後面的語句處。

監視窗口:程序執行完某條語句時,使用監視窗口可以查看程序中變量的具體內容、程序中的內存狀態、程序中的寄存器狀態等。

 

下面爲大家演示一下具體的調試步驟:

首先要做的是設置斷點,爲啓動調試作準備。

如果沒有設置斷點直接啓動調試,就會導致調試失敗,因爲程序執行過程中沒有中斷,程序就會依次執行直到執行結束或者報錯返回。

設置斷點和取消斷點的方式非常簡單,直接單擊側邊欄即可新建/取消斷點。

斷點設置成功後,即可開始調試。點擊菜單欄 調試 - 開始調試 。

進入調試狀態後,即可開始對程序的單步調試,這裏強調一下逐語句調試和逐過程調試這兩個相似操作的區別。

程序進入調試狀態後,觀察上面的gif,可以看到,此時指向的語句是第 50 行代碼:

Enigma(plain);  //輸入明文計算出密文。

此時如果使用逐過程調試(F10),則不會顯示 Enigma 函數每一步的執行過程,而是將該函數的執行過程運行完後,直接轉到當前函數的下一條語句,也就是第 51 行語句。

但是如果使用逐語句調試(F11),就會進入 Enigma 函數,執行該函數中的每一條語句,也就是跳轉到第 6 行語句。

此處使用逐語句調試,進入 Enigma 函數內部調試。

使用監視窗口,可以幫助我們更好的觀察程序的運行狀態,下面演示一下如何使用監視窗口觀察程序中的變量變化。

如果沒有監視窗口,首先要做的就是將監視窗口調出來,點擊頂部菜單欄 調試 - 窗口 - 監視。

在代碼中選中想要監視的變量,將其拖拽到自定義的監視窗口中,然後我們就可以一邊單步調試一邊查看變量變化了。

如果想要除監視變量,直接在監視窗口右鍵選擇刪除對某個變量的監視或者全部清除即可。

定位到代碼的bug處後,在頂部菜單欄點擊調試 - 停止調試即可結束調試流程。

以上就是今天的調試技巧盤點,你學會了嗎?

對於熱愛編程的人來說,有一羣一起學習一起解答的小夥伴很重要!這裏有一個C/C++編程學習交流俱樂部~傳送通道:【】,還有編程學習文件(源碼,零基礎教程,項目實戰教學視頻),歡迎初學者和正在進階中的小夥伴們!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章