本文將通過演示一個(gè)簡單C++代碼的編譯調(diào)試過程,介紹在VSCode中如何使用Linux環(huán)境下的GCC C++編譯器(g++)和GDB 調(diào)試器(gdb)。
關(guān)于GCC、g++、gcc、gdb,這里不做詳細(xì)介紹,如果感興趣可以參考另一篇文章:詳解C/C++代碼的預(yù)處理、編譯、匯編、鏈接全過程,里面有詳細(xì)的解釋。
看懂這篇文章的內(nèi)容,只需要知道g++用來編譯C++代碼,gdb用來調(diào)試C++代碼即可。
示例代碼內(nèi)容如下:
// hello.cpp
#include <iostream>
using namespace std;
int main(){
cout << "Hello, VSCode!" << endl;
return 0;
}
1. 終端命令行方式編譯、調(diào)試簡單C++代碼
如果不考慮VSCode編輯器,在Linux環(huán)境中編譯調(diào)試一個(gè)簡單的C++代碼可以只通過命令行實(shí)現(xiàn),具體過程分為兩步:
-
第一步:將
*.cpp
源代碼文件通過g++
編譯器生成一個(gè)可調(diào)試的可執(zhí)行二進(jìn)制文件:
g++ -g hello.cpp -o hello
指令解析:
- 為了能夠使用gdb調(diào)試,需要在編譯時(shí)加上
-g
-
hello.cpp
:待編譯的源文件名 -
-o hello
:指定生成的可執(zhí)行文件名為hello
# 運(yùn)行 hello 的結(jié)果:
./hello
Hello, VSCode!
- 第二步:調(diào)用gdb調(diào)試器對可執(zhí)行文件進(jìn)行調(diào)試:
gdb hello
調(diào)試的過程如下:
- 如果希望在VSCode中編譯調(diào)試C++代碼,所要做的就是配置完成上面的兩步。
2. 通過VSCode對C++代碼進(jìn)行編譯、調(diào)試
主要參考:
- VSCode官方教程: Using C++ on Linux in VS Code
- 詳解Linux下使用vscode編譯運(yùn)行和調(diào)試C/C++
2.1 前提條件
- VSCode中的"C/C++插件"已安裝(直接在VSCode擴(kuò)展商店搜索"C++"即可)
- 確保g++編譯器和gdb調(diào)試器已安裝。可以在終端查看g++是否已安裝
g++ -v
如果能輸出版本信息,則已安裝。
gdb通過以下命令安裝:
sudo apt-get update
sudo apt-get install build-essential gdb
2.2 配置tasks.json
在VSCode中打開示例代碼文件夾,
- 在VSCode的主菜單中,選擇 Terminal>Configure Default Build Task
- 出現(xiàn)一個(gè)下拉菜單,顯示 C++ 編譯器的各種預(yù)定義編譯任務(wù)。選擇 C/C++: g++ build active file(如果配置了中文,會顯示 “C/C++: g++ 生成活動(dòng)文件”)
- 選擇后,vscode會自動(dòng)生成一個(gè)
.vscode
文件夾和tasks.json
文件,此時(shí)的代碼文件夾結(jié)構(gòu)如下:tasks.json
的內(nèi)容如下:
{
"version": "2.0.0",
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: g++ 生成活動(dòng)文件",
"command": "/usr/bin/g++",
"args": [
"-g",
"${file}",
"-o",
"${fileDirname}/${fileBasenameNoExtension}"
],
"options": {
"cwd": "${fileDirname}"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "編譯器: /usr/bin/g++"
}
]
}
tasks.json
的作用是告訴VSCode如何編譯程序
在本文中是希望調(diào)用g++編譯器從cpp源代碼創(chuàng)建一個(gè)可執(zhí)行文件,這樣就完成了第1節(jié)中所說的編譯調(diào)試第一步。
從tasks.json的"command"
和"args"
可以看出,其實(shí)就是執(zhí)行了以下命令:
/usr/bin/g++ -g ${file} -o ${fileDirname}/${fileBasenameNoExtension}
其中,
-
${file}
:當(dāng)前活動(dòng)文件(就是vscode當(dāng)前查看的文件),這里是hello.cpp
-
${fileDirname}/${fileBasenameNoExtension}
:在這里就是當(dāng)前目錄下的hello
- 有關(guān)VSCode中的變量名,可以參考:VSCode Variables Reference
2.3 執(zhí)行編譯
在2.2節(jié)配置完成 tasks.json 文件后,VSCode就知道應(yīng)該用g++編譯器對cpp文件進(jìn)行編譯,下面執(zhí)行編譯即可:
- 回到活動(dòng)文件hello.cpp(很重要,不然 ${file} 和 ${fileDirname}這些變量都會錯(cuò))
- 快捷鍵
ctrl+shift+B
或從菜單中選擇運(yùn)行:Terminal -> Run Build Task,即可執(zhí)行 tasks.json中指定的編譯過程 - 編譯任務(wù)完成后,會出現(xiàn)終端提示,對于成功的g++編譯,輸出如下:
這一步完成后,在代碼目錄下就出現(xiàn)了一個(gè)可執(zhí)行文件hello
。 - (可選) 個(gè)性化修改 tasks.json
可以通過修改 tasks.json滿足一些特定需求,比如將"${file}"
替換“${workspaceFolder}/*.cpp”
來構(gòu)建多個(gè) C++ 文件; 將“${fileDirname} /${fileBasenameNoExtension}”
替換為硬編碼文件名(如“hello.out”
)來修改輸出文件名
2.4 調(diào)試hello.cpp
完成上述的編譯配置后,就可以對hello.cpp
進(jìn)行調(diào)試了:
- 回到hello.cpp,確保其是活動(dòng)文件(active file)
- 設(shè)置一個(gè)斷點(diǎn)
- 從右上角的按鈕中,選擇 Debug C/C++ file
- 然后就開啟調(diào)試過程了,可以單步運(yùn)行、添加監(jiān)視等等。
2.5 個(gè)性化配置launch.json
按照2.4節(jié)的過程,已經(jīng)可以簡單調(diào)試一個(gè).cpp
代碼,但是在某些情況下,可能希望自定義調(diào)試配置,比如指定要在運(yùn)行時(shí)傳遞給程序的命令參數(shù)。這種情況下我們可以在launch.json
中定義自定義調(diào)試配置。
下面是配置調(diào)試過程的步驟:
- 從主菜單中,選擇 Run > Add Configuration…,將會生成一個(gè)
launch.json
文件 -
launch.json
文件右下角點(diǎn)擊 “添加配置”,選擇 “(gbd)啟動(dòng)”,文件內(nèi)容參考如下:
{
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) 啟動(dòng)",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}/${fileBasenameNoExtension}",
"args": [],
"stopAtEntry": false,
"cwd": "${fileDirname}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "為 gdb 啟用整齊打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"description": "將反匯編風(fēng)格設(shè)置為 Intel",
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": true
}
],
"miDebuggerPath": "/usr/bin/gdb",
"preLaunchTask": "C/C++: g++ 生成活動(dòng)文件"
}
]
}
這里
launch.json
的作用就是告訴VSCode如何調(diào)用gdb調(diào)試器。
如果想要在調(diào)試/運(yùn)行程序時(shí)添加參數(shù),只需要把參數(shù)添加在"args"
選項(xiàng)中即可。
2.6 總結(jié)
在VSCode中編譯、調(diào)試一個(gè)簡單的.cpp文件,所需要做的就是:文章來源:http://www.zghlxwxcb.cn/news/detail-441961.html
- 在 tasks.json 中調(diào)用 g++ 生成一個(gè)可執(zhí)行二進(jìn)制文件
- 在 launch.json 中調(diào)用 gdb 對生成的可執(zhí)行文件進(jìn)行調(diào)試
2.7 復(fù)用C++配置
上面的過程已經(jīng)完成了在VSCode中調(diào)試Linux環(huán)境下的C++代碼的配置,但只適用于當(dāng)前工作空間。如果想要在其他的工程文件夾下復(fù)用這種配置,只需要把tasks.json
和launch.json
文件復(fù)制到新文件夾下的.vscode
目錄下,然后根據(jù)需要改變對應(yīng)的源文件和可執(zhí)行文件的名稱即可。文章來源地址http://www.zghlxwxcb.cn/news/detail-441961.html
3.參考教程
- 詳解Linux下使用vscode編譯運(yùn)行和調(diào)試C/C++
- VSCode官方教程: Using C++ on Linux in VS Code
- VSCode Variables Reference
到了這里,關(guān)于Linux環(huán)境使用VSCode調(diào)試簡單C++代碼的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!