專欄導航
本節文章分別屬于《Win32 學習筆記》和《MFC 學習筆記》兩個專欄,故劃分為兩個專欄導航。讀者可以自行選擇前往哪個專欄。
(一)WIn32 專欄導航
上一篇:編程技能:調試01,調試介紹
回到目錄
下一篇:無
(二)MFC 專欄導航
上一篇:編程技能:調試01,調試介紹
回到目錄
下一篇:無
本節前言
在上一節,我們簡單地介紹了一下調試的概念。
對于調試這一塊,單憑著一點概念,應該還是很難理解其含義的。這一塊,我認為,它是需要你在實踐中,逐漸地來積累經驗與提升技能的。
本專欄所講解的調試知識,是作為一個入門,來教大家幾條基本的調試指令。
本節,我們要教大家的是【開始調試】指令,【繼續】命令和【切換斷點】指令。
標題中,說的不是設置斷點與刪除斷點嗎?沒有講【切換斷點】啊?其實,【切換斷點】在不同的時機,分別等價于設置斷點和刪除斷點。我們在講解具體的知識的時候,大家應該就能理解了。
一.? ? 本節代碼
來看一下本節所用到的代碼。
#include <stdio.h>int calcu01(int x, int y);
int calcu02(int x, int y);
int calcu03(int x, int y);int main(void)
{int a, b, res01, res02, res03;int res;a = 10;b = 20;a++;res01 = calcu01(a, b);res02 = calcu02(a, b);res03 = calcu03(a, b);res = res01;res += res02;res += res03;return 0;
}int calcu01(int x, int y)
{int res;res = x + y;res += x;res *= y;return res;
}int calcu02(int x, int y)
{int res;res = 2 * x;res *= y;res += y;return res;
}int calcu03(int x, int y)
{int res;res = x * x * x;res -= y;res /= y;return res;
}
這就是本節所用到的代碼了。代碼的行數有點多,不過,并不難。相信大家很容易理解其功能。
為了方便查找和使用,我將這樣的代碼放在了 win32 專欄與 mfc 專欄的 Gitee 代碼倉庫里面了。網址如下所示。
Gitee 網址:Win32 教學課件
Gitee 網址:MFC 教學課件
兩個代碼倉庫里面,關于本節所述的調試案例代碼的路徑,都是一樣的。
在正式使用 Gitee 的功能之前,你可能會需要首先注冊賬號,如果還沒有注冊過 Gitee 的賬號的,你可以前往下面的兩個鏈接所示的文章,了解 Gitee 的基本使用方法。
WIn32 筆記:本專欄課件-CSDN博客
MFC筆記:本專欄課件-CSDN博客
在了解了 Gitee 的基本使用方法的前提下,你可以點擊如下所示的兩個鏈接之一。
Gitee 網址:Win32 教學課件
Gitee 網址:MFC 教學課件
點開了鏈接以后,來到如下所示的頁面,在這里,我以 MFC 專欄課件的頁面為例。

在寫作本節文章的時候,我還沒有往代碼倉庫里面傳入多少代碼,所以,圖1中的項目很少。等到你看到本篇文章的時候,很有可能,里面的代碼已經是很多很多了。
我們在網頁中找到紅色框線所示的文件夾,單擊進入這個文件夾,結果如下圖所示。

在我寫作本文的時候,只在【調試案例代碼】文件夾里面傳入了【code1.c】一個源文件。等到你學習本篇內容的時候,有可能,我已經新增了一點源文件。別管新增了多少,你需要找到的,是這個【code1.c】,找到了它以后,單擊它,然后呢,結果如下圖所示。

這是 Gitee 里面展示的部分的調試案例代碼,圖3中的部分代碼,與本節的代碼塊中的代碼是一樣的。
你可以將代碼倉庫給下載回去,并在相應的路徑中,找到【code1.c】。
到了這里,本節所使用的調試案例代碼的獲取方法,我就講完了。我接著往下講。
二.? ? 建立工程
請大家自行建立 C/C++ 項目,最好是使用 VS2019 來建立項目。
如果還不會用 VS2019 來建立 C/C++ 項目的話,請參考如下鏈接所示的文章。
Windows編程:用 VS2019 編寫C語言程序-CSDN博客
在本節,我需要你將第一分節中的代碼塊中的代碼,設置為 C/C++ 項目中的 main.c 中的源代碼。并自行編譯生成。
三.? ? 【開始調試】命令
在 VS2019 的【調試】菜單下面,有一個【開始調試】命令,如下圖所示。

之前,我們在編譯好了項目代碼以后,我們是使用【調試】菜單下面的【開始執行(不調試)】命令,來運行解決方案的。
在這里,我們嘗試著點擊【調試】,【開始調試】命令,來運行一下解決方案。

結果如圖5所示。其實,此刻,【開始調試】和【開始執行(不調試)】的執行效果差不多,都是說,連續運行程序中的所有的代碼行,彈出來一個黑窗口,一口氣執行完畢。
這是因為,此時,我們尚未設置斷點。如果設置了斷點的話,那么,情形就會有所不同了。
請大家關閉圖5 所示的窗口。
接下來,先不要關閉解決方案,我們在下一分節有用。
在進行下一分節之前,請大家記住一件事,那就是,在圖4里面,【開始調試】命令右邊的快捷鍵,F5 。記住它。
四.? ? 設置斷點
請大家點擊一下代碼中的行號為15 的代碼中的某一個位置,讓光標停在 15 行的某一個位置上,如下圖所示。

在圖6 的紅色框線所示的區域里面,包含有文本光標。其實這個東西,在Windows編程里面,它被稱作文本插入符。以后,我們也會講解文本插入符的編程方法。
在將文本光標設置在 15 行以后,大家依次點擊【調試】,【切換斷點】菜單命令,過程如下圖所示。


在圖7里面,【切換斷點】字樣的右邊,給出了這個命令的快捷鍵,F9 。這個快捷鍵,也請大家記住它。當然了,記不住的話,只要你還記得菜單命令的路徑,那么,多看幾次,你也就能記住這個快捷鍵了。
添加斷點的一個方法是,首先點擊想要設置斷點的某一文本行,使得文本光標停在斷點所在的代碼行里面,然后呢,依次點擊【調試】,【切換斷點】命令,然后呢,這一代碼行的左邊就會出現紅色實心圓點了,表明這一行設置了斷點。
添加斷點的另一個方法是,首先點擊想要設置斷點的某一文本行,使得文本光標停在斷點所在的代碼行里面,然后按下功能鍵 F9,也可以在這一代碼行上面設置斷點。
某一代碼行設置了斷點的標志是,這一代嗎行的左邊出現了紅色的圓點。
在圖8 里面,我們看到,在我們執行了【切換斷點】菜單命令以后呢,在行號 15 的左邊,出現了一個圓形的實心紅點。出現了這個東西,就表示說,此時,我們在行號 15 的位置,設置了一個斷點。
當我們在 15 行設置了斷點以后,我們再次執行【調試】,【開始調試菜單命令】,結果如下圖所示。


在圖9里面,它沒說【某某程序已退出】,那就是說,程序并未像圖5那樣子,全部執行完并退出。實際上,此時,程序是停在了代碼中的 15 行的位置。
為啥說,此時,程序停在了15行的位置呢?
我們看一下圖10,在圖10 中,我們看到,在斷點標記的中間,有一個黃色填充的箭頭符號。這個黃色箭頭符號指向的是哪一行,就表示程序停在了哪一行代碼上面。
注意,這里所說的程序停在某一行,它是說,這一行尚未執行,而它之前的代碼已經是執行完了。
在本案例中,它是說,第 15 行上面的代碼,13,14行等等的代碼,均已執行完畢,程序即將執行15行,而尚未執行15行的代碼。
斷點的功能,就是讓程序在連續執行期間,遇到了斷點以后,就停下來。
讓連續運行的程序,停在某一個位置,斷開連續執行的狀態,停下來。那么,這個停下來的站點,就叫做斷點。
在 VS2019 里面,斷點會用紅色的圓點來標記。
程序停在斷點上以后,接下來,它會等候我們的調試指令。此時,我們再來嘗試著去執行【調試】,【開始調試】菜單命令。如下圖所示。

此時,我們在【調試】菜單里面找不到【開始調試】這一子菜單項了,然而,我們可以見到【繼續】這一項。在之前,我們讓大家記過一個知識點,【開始調試】的快捷鍵是 F5,而圖11 中的【繼續】命令的快捷鍵也是 F5 。
個人覺得,其實【開始調試】命令和【繼續】命令是一回事,都是說,讓程序連續運行,直到遇到了斷點,才停下來。
但是呢,在不同的場合,快捷鍵 F5 所對應的名稱卻是不一樣的。當程序尚未啟動調試的時候,那么,【調試】菜單項下面,會顯示著【開始調試】命令。而當我們點擊過【開始調試】,啟動了調試運行的命令以后,假定程序停在了某一個斷點上,那么,這回,【調試】菜單下面,就會顯示有【繼續】命令,而不是顯示【開始調試】命令了。
接下來呢,我們依次點擊【調試】,【繼續】命令。過程如下。



圖13 和圖14 的紅色框線標記的位置,都顯示了【已退出】字樣,表明程序執行完畢,已退出。
請大家關閉圖14 所示的黑窗口。
程序在停在了 15 行上的斷點以后,我們點擊了【調試】,【繼續】命令以后,程序會執行到退出,這是因為,此時,我們在程序中,僅僅設置了 15 行這一個斷點而已。如果,我們再多設置幾個斷點,程序就不會那么快地退出了。
這回呢,我們添加幾個斷點,讓程序慢點退出。
我們在程序的第17行和第21行分別設置斷點,如下圖所示。

這回呢,我們來執行【調試】,【開始調試】菜單命令,預計,程序會停在15行的位置,程序的執行情況如下所示。

果然啊,第15行的斷點上,出現了黃色箭頭。
接下來,我們執行一次【繼續】命令。不過,這一次,我們不采用菜單命令的方式,而是采用快捷鍵的方式。【調試->繼續】命令的快捷鍵是 F5,我們按下 F5,觀察執行效果,結果如下。

看到了沒?這回,黃色小箭頭停在了 17 行的位置了。這表明,此時,程序停在了第17行上面,第17行尚未執行。
我們再按一次 F5,結果如下。

如圖18 所示,黃色小箭頭出現在了第 21 行的斷點上面。這是本程序的執行流程中的最后一個斷點了。
既然是最后一個斷點,那么,再次按下 F5 鍵,那么,程序就該退出了。我們按一下 F5,結果如下。


如圖19 和圖20 所示,程序果然是退出了,并且呢,程序代碼中,不存在黃色小箭頭了。
我們關閉程序執行用的黑窗口。
到了這里,【開始調試】,【繼續】,F5,這幾個命令,我就算是講完了。
接下來,我們來看一看,如何刪除斷點。
五.? ? 刪除斷點
如何來刪除斷點呢?
請大家來跟我一起操作。首先呢,我們點擊一下代碼區域的第 15 行的某一個地方,使得文本光標停在第 15 行里面,如下圖所示。

接下來呢,請大家依次點選【調試】,【切換斷點】菜單命令,結果如下。

看到了沒?圖21 里面,15行的左邊還有斷點標記的,而到了圖22 里面,斷點標記就沒有了。
當某一行原本已經設置了斷點的情況下,我們先將文本光標定位在這一斷點所在行上面,然后執行【調試->切換斷點】命令,就會刪除這一行的斷點。
我們再來試著用另一種方法刪除斷點。
首先呢,點擊 17 行的某一個位置,使得文本光標定位在 17 行,如下圖所示。

然后呢,請大家按下 F9,結果如下。

,如圖24所示,17 行上的斷點標記被刪除了。
我們之前讓大家記憶過,【調試->切換斷點】的快捷鍵是 F9 。這一次,我們正是用快捷鍵 F9,取代了【調試->切換斷點】菜單命令。
這樣一來,設置斷點和刪除斷點的方法,我就都講完了。
六.? ? 切換斷點的簡易方法
我再來講解一下切換斷點的簡易方法。
此時,在程序中,還剩下21行一個斷點了。
在代碼行號的左邊,有一個豎著的,很窄灰色的區域,如下圖所示。

當我們點擊這一區域時,鼠標點擊的位置的水平方向上,位于哪一個代碼,哪一個代碼行就會相當于執行了一次【調試->切換斷點】菜單命令。
我們點擊一下 21 行左邊的窄灰色區域,結果如下圖所示。

我們再來點擊一下 20 行左邊的窄灰色區域,結果如下圖所示。

這樣一來,20行就設置了斷點。
切換斷點命令,它的效果是,如果某一代碼行原本沒有斷點,則執行這一命令,會設置斷點。如果某一代碼行原本是有斷點的,則執行這一命令會刪除該行斷點。
我們再來設置幾個斷點,如下圖所示。

如圖 28 所示,我設置了 4 個斷點。在實際項目中,我們可能會設置更多的斷點。
假定我們想要刪除所有的斷點。該怎么辦呢?
我們當然可以一個一個地刪除斷點。然而,我們還可以采用更省事的方法。
請大家跟我做,依次點擊【調試】,【刪除所有斷點】菜單項,過程如下圖所示。


在圖30 里面,我們點擊 【是】,結果如下圖所示。

如圖31 所示,這回呢,我們所設置的 4 個斷點,就被一次性地清除了。
結束語
本節知識,應該是不難的。只是,篇幅大了一點。
希望大家能夠學好本節知識。
專欄導航
本節文章分別屬于《Win32 學習筆記》和《MFC 學習筆記》兩個專欄,故劃分為兩個專欄導航。讀者可以自行選擇前往哪個專欄。
(一)WIn32 專欄導航
上一篇:編程技能:調試01,調試介紹
回到目錄
下一篇:無
(二)MFC 專欄導航
上一篇:編程技能:調試01,調試介紹
回到目錄
下一篇:無