vscode界面調(diào)試C++程序(linux)
(注意:由于是界面操作,可能很多操作存在等價替代,各位根據(jù)自己習(xí)慣選用即可。)
(部分詞匯可能是根據(jù)vscode的顯示或者個人瞎叫的,不一定專業(yè),有任何方法上的問題也請指出,我們一起討論進(jìn)步)
(實(shí)操可以參考我的視頻再談vscode界面調(diào)試C++程序(linux))
本文針對linux平臺下的C++代碼調(diào)試,通常情況下使用vscode調(diào)試有以下兩種方案:
直接使用C++插件調(diào)試,此時需要自行編譯。
使用Cmake插件,在配置完成后可以和Clion類似,接管編譯和調(diào)試等全過程。
本文以方案1為主進(jìn)行講解。
一. 前提條件
系統(tǒng)環(huán)境:centos7.8
軟件要求:vscode 1.75.0 、 C++插件 、modern fortran插件(支持fortran斷點(diǎn))
示例代碼包含一個“main.cpp”
二. 界面簡介
vscode文件編輯界面如下:

vscode運(yùn)行和調(diào)試界面如下:

反匯編區(qū)域和二進(jìn)制查看區(qū)域根據(jù)需求打開。
三. 調(diào)試前的配置
3.1. 新建配置文件
點(diǎn)擊左側(cè)邊欄的“運(yùn)行和調(diào)試”按鈕。

點(diǎn)擊“創(chuàng)建 launch.json 文件”,之后根據(jù)提示選擇C++調(diào)試類型或者任選之后手動配置。
配置文件 launch.json 的存放位置為當(dāng)前工作區(qū)的 .vscode 文件夾中。配置文件可以直接拷貝現(xiàn)有工程復(fù)用。
3.2 新建C++調(diào)試的配置
打開配置文件,選擇右下角的新建配置,或者直接在“configurations”中使用vscode的代碼提示添加配置。

正常調(diào)試請選擇 “C/C++:(gdb) 啟動”,如果是附加調(diào)試,請選擇“C/C++:(gdb) 附加” 根據(jù)情況還可以選擇管道相關(guān)的調(diào)試配置項(xiàng)目。
3.3 修改配置
針對本示例程序,我們選擇“C/C++:(gdb) 啟動”,然后根據(jù)自己需求修改配置內(nèi)容,通常鼠標(biāo)光標(biāo)懸停到key上可得知每項(xiàng)含義。

此示例程序已經(jīng)編譯得到debug版本的二進(jìn)制程序在當(dāng)前工作區(qū)的“/build/a.out”
因此只需要修改program的值:
launch.json文件和工程對應(yīng),可存在多個配置,各配置中建議盡可能使用vscode支持的環(huán)境變量,配置文件可復(fù)用。
注意:如果需要在每次調(diào)試啟動前自動編譯,則可以設(shè)置pretask等功能。更多配置設(shè)置請參考配置文件提示。更多詳細(xì)的配置和功能,請參考配置文件中的鏈接提示。
注意:本示例中已經(jīng)包含了配置好的配置文件,可以針對給出的示例代碼進(jìn)行調(diào)試,包含了正常調(diào)試和附加調(diào)試兩個配置,可以直接復(fù)用。
四. 功能點(diǎn)簡介
1.啟動調(diào)試
按F5可直接啟動默認(rèn)配置。另外,可在運(yùn)行和調(diào)試界面選擇你所需的配置啟動。

2.控制程序運(yùn)行

調(diào)試過程中,可以通過調(diào)試控制欄控制程序的運(yùn)行,程序暫停時會高亮?xí)和|c(diǎn)所在行。

2.查看堆棧
程序暫停后直接在調(diào)用堆棧區(qū)域可查看調(diào)用堆棧信息,點(diǎn)擊對應(yīng)的層會跳轉(zhuǎn)到對應(yīng)的代碼(如果有)。根據(jù)需要可以打開反匯編視圖查看匯編代碼執(zhí)行情況。

3.變量
程序暫停后可直接在變量顯示區(qū)域查看當(dāng)前作用域的所有變量,調(diào)用棧層級變化后變量區(qū)域會自動更新,此區(qū)域也支持變量直接修改。復(fù)雜數(shù)據(jù)類型可以依次展開,根據(jù)需求還可以查看其二進(jìn)制數(shù)據(jù)。
對于部分需要重點(diǎn)監(jiān)視的變量,可以將其加入監(jiān)視區(qū),監(jiān)視區(qū)的顯示邏輯和變量區(qū)類似,同樣可以對其進(jìn)行修改。

4.斷點(diǎn)設(shè)置
4.1 斷點(diǎn)窗口簡介

所有的斷點(diǎn)均可以可視化的在斷點(diǎn)窗口可以被看到,在斷點(diǎn)窗口可以針對每一個斷點(diǎn)進(jìn)行修改,包括刪除和新建(函數(shù)斷點(diǎn)),激活和取消激活。點(diǎn)擊對應(yīng)斷點(diǎn)后會在代碼的對應(yīng)區(qū)域高亮顯示。
4.2 位置斷點(diǎn)
最普通的斷點(diǎn)一般是設(shè)定在程序的某一行,在運(yùn)行到此行時暫停,這種斷點(diǎn)叫做位置斷點(diǎn)。在vscode中和通常的IDE類似可以直接在對應(yīng)的代碼行前面設(shè)置即可。

4.3 條件斷點(diǎn)
和普通的斷點(diǎn)不同的是,條件斷點(diǎn)具有觸發(fā)條件,在需要設(shè)置的代碼行的左側(cè)右鍵選擇添加條件斷點(diǎn),然后輸入自己所需的條件表達(dá)式。

4.4 數(shù)據(jù)斷點(diǎn)
數(shù)據(jù)斷點(diǎn),即檢測某變量,在其更改時停止。通??梢栽谧兞繀^(qū)右鍵所需變量,選擇“值更改時中斷”即可。添加的斷點(diǎn)可以在斷點(diǎn)窗口中刪除。

4.5 記錄點(diǎn)
在vscode中還可以添加記錄點(diǎn),和添加斷點(diǎn)類似,在對應(yīng)行左側(cè)右鍵選擇添加記錄點(diǎn)即可,可以在運(yùn)行到此行時在gdb調(diào)試窗口輸出你所設(shè)置的消息。(注意輸出在調(diào)試窗口或者說時gdb中,不是代碼中的標(biāo)準(zhǔn)輸出流)。
5. 跟蹤進(jìn)程 attach
attach功能主要針對未知死循環(huán)程序和多進(jìn)程情況下的調(diào)試,可以附加在已經(jīng)運(yùn)行的程序上進(jìn)行調(diào)試操作。
死循環(huán)為例,將示例代碼修改如下并正確編譯:
要附加調(diào)試,首先需要啟動此程序,將其運(yùn)行起來。然后選擇配置好的“C/C++:(gdb) 附加”,在彈出的窗口中選擇進(jìn)程號。

選定之后即可開始調(diào)試,此時程序控制欄會出現(xiàn)一定的變化,原來的繼續(xù)按鈕變?yōu)闀和?,停止按鈕則為斷開(此時vscode不控制程序結(jié)束)。

此時,你可以選擇暫停程序,則可以看到出現(xiàn)死循環(huán)的地方,之后可以和普通調(diào)試類似操作即可。
如果你已經(jīng)對程序有一定的預(yù)判,也可以根據(jù)自己的認(rèn)知添加斷點(diǎn),程序?qū)⒃谀闾砑拥臄帱c(diǎn)處停止(如果可以)。
最后附上launch.json的代碼,正常情況下你一定可以自己生成,沒學(xué)會的也可以自己拷貝下去存成launch.json(所以你當(dāng)我是在湊字?jǐn)?shù)也沒問題。。。)