以下內(nèi)容均針對(duì) Linux 操作系統(tǒng)(包括Windows的Linux子系統(tǒng)WSL2)。
本文是對(duì)Linux系統(tǒng)中使用VSCode編譯調(diào)試C++代碼的系列文章的總結(jié),前面三篇文章如下:
- 詳解C/C++代碼的預(yù)處理、編譯、匯編、鏈接全過程
- Linux環(huán)境使用VSCode調(diào)試簡(jiǎn)單C++代碼
- Linux環(huán)境使用VSCode調(diào)試CMake工程
1. 根本邏輯
在VSCode中編譯調(diào)試C++代碼的本質(zhì)邏輯:
-
tasks.json
指定如何生成二進(jìn)制可執(zhí)行文件- 可以直接通過g++編譯器生成
- 可以通過CMake生成
- 可以通過腳本
.sh
生成
-
launch.json
負(fù)責(zé)配置gdb調(diào)試器,包括:指定可執(zhí)行文件名、命令行參數(shù),以及預(yù)執(zhí)行任務(wù)(prelaunchTask)
2. 方案一:直接調(diào)用g++編譯器生成可執(zhí)行文件
具體過程在這篇文章中詳細(xì)解釋:Linux環(huán)境使用VSCode調(diào)試簡(jiǎn)單C++代碼
這里簡(jiǎn)要概括重點(diǎn)內(nèi)容。
-
第一步:將
*.cpp
源代碼文件通過g++
編譯器生成一個(gè)可調(diào)試的可執(zhí)行二進(jìn)制文件
如果不在VSCode中運(yùn)行,而是在終端中運(yùn)行,需要運(yùn)行下面的指令:
g++ -g hello.cpp -o hello
那么將這一步配置在VSCode的tasks.json
中,tasks.json
中的內(nèi)容應(yīng)該如下(具體過程可以參考上面的鏈接):
{
"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++"
}
]
}
- 第二步:調(diào)用gdb調(diào)試器對(duì)可執(zhí)行文件進(jìn)行調(diào)試
如果不在VSCode中運(yùn)行,而是在終端中運(yùn)行,需要運(yùn)行下面的指令:
gdb hello
將這一步配置在VSCode的launch.json
中,則launch.json
中的內(nèi)容應(yīng)該如下(詳細(xì)過程和解釋同樣可以參考上面鏈接):
{
"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)文件"
}
]
}
3. 方案二:CMake生成可執(zhí)行文件
具體過程在這篇文章中詳細(xì)解釋:Linux環(huán)境下使用VScode調(diào)試CMake工程
對(duì)于CMake工程,如果不使用VSCode,而是使用終端命令行方式進(jìn)行編譯的話,標(biāo)準(zhǔn)做法是:
cd build
cmake ..
make
那么將這個(gè)過程配置在VSCode的tasks.json
中,其內(nèi)容應(yīng)該如下(詳細(xì)過程見參考鏈接):
{
"version": "2.0.0",
"tasks": [
{
"label": "cmake",
"type": "shell",
"command": "cmake",
"args": [
"../"
],
"options": {
"cwd": "${fileDirname}/build"
},
},
{
"label": "make",
"type": "shell",
"command": "make",
"args": [],
"options": {
"cwd": "${fileDirname}/build"
},
},
{
"label": "build",
"dependsOn":["cmake", "make"]
},
],
}
通過VSCode完成CMake編譯過程后,將會(huì)在 build 目錄下生成一個(gè)可執(zhí)行文件。
調(diào)用gdb對(duì)生成的可執(zhí)行文件進(jìn)行調(diào)試,需要配置launch.json
文件如下:
{
"version": "0.2.0",
"configurations": [
{
"name": "g++ - Build and debug active file",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}/build/${fileBasenameNoExtension}",
"args": ["para1", "para2"],
"stopAtEntry": false,
"cwd": "${fileDirname}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"preLaunchTask": "build",
"miDebuggerPath": "/usr/bin/gdb"
}
]
}
4. 方案三:shell腳本生成可執(zhí)行文件
腳本文件build_executable.sh
的內(nèi)容如下:文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-629342.html
echo "Configuring and building ORB_SLAM3..."
mkdir build
cd build
# cmake .. -DCMAKE_BUILD_TYPE=Debug
cmake .. -Wno-dev
make -j8
該方案與方案二類似,即把cd build + cmake + make的過程寫到shell腳本文件里,那么只需要把方案二中的cmake + make過程替換為執(zhí)行.sh
腳本文件即可,直接列出來(lái)參考的 tasks.json
和launch.json
文件,可以發(fā)現(xiàn),launch.json
的內(nèi)容基本沒有變:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-629342.html
tasks.json
{
"version": "2.0.0",
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: g++ build active file",
"command": "sh",
"args": [
"build_executable.sh"
],
"options": {
"cwd": "${workspaceFolder}"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "compiler: /usr/bin/g++"
}
]
}
launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "g++ - debug active file",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}/${fileBasenameNoExtension}",
"args": [],
"stopAtEntry": false,
"cwd": "${fileDirname}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"preLaunchTask": "C/C++: g++ build active file",
"miDebuggerPath": "/usr/bin/gdb"
}
]
}
到了這里,關(guān)于VSCode調(diào)試C++代碼的多種方案的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!