本文将通过演示一个简单C++代码的编译调试过程,介绍在VSCode中如何使用Linux环境下的GCC C++编译器(g++)和GDB 调试器(gdb)。
关于GCC、g++、gcc、gdb,这里不做详细介绍,如果感兴趣可以参考另一篇文章:详解C/C++代码的预处理、编译、汇编、链接全过程,里面有详细的解释。
看懂这篇文章的内容,只需要知道g++用来编译C++代码,gdb用来调试C++代码即可。
示例代码内容如下:
// hello.cpp
#include
using namespace std;
int main(){
cout << "Hello, VSCode!" << endl;
return 0;
}
如果不考虑VSCode,在Linux环境中编译调试一个简单的C++代码可以只通过命令行实现,具体过程分为两步:
*.cpp
源代码文件通过g++
编译器生成一个可调试的可执行二进制文件:g++ -g hello.cpp -o hello
指令解析:
-g
hello.cpp
:待编译的源文件名-o hello
:指定生成的可执行文件名为 hello
# 运行 hello 的结果:
./hello
Hello, VSCode!
gdb hello
主要参考:
g++ -v
如果能输出版本信息,则已安装。如果没有,通过以下命令安装:
sudo apt-get update
sudo apt-get install build-essential gdb
在VSCode中打开示例代码文件夹,
.vscode
文件夹和 tasks.json
文件,此时的代码文件夹结构如下:tasks.json
的内容如下:{
"version": "2.0.0",
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: g++ 生成活动文件",
"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如何编译程序
在本文中是希望调用g++编译器从cpp源代码创建一个可执行文件,这样就完成了第1节中所说的编译调试第一步。
从tasks.json的"command"
和"args"
可以看出,其实就是执行了以下命令:
/usr/bin/g++ -g ${file} -o ${fileDirname}/${fileBasenameNoExtension}
其中,
${file}
:当前活动文件(就是vscode当前查看的文件),这里是hello.cpp
${fileDirname}/${fileBasenameNoExtension}
:在这里就是当前目录下的hello
在2.2节配置完成 tasks.json 文件后,VSCode就知道应该用g++编译器对cpp文件进行编译,下面执行编译即可:
ctrl+shift+B
或从菜单中选择运行:Terminal -> Run Build Task,即可执行 tasks.json中指定的编译过程hello
。"${file}"
替换“${workspaceFolder}/*.cpp”
来构建多个 C++ 文件; 将“${fileDirname} /${fileBasenameNoExtension}”
替换为硬编码文件名(如“hello.out”
)来修改输出文件名完成上述的编译配置后,就可以对hello.cpp
进行调试了:
按照2.4节的过程,已经可以简单调试一个.cpp
代码,但是在某些情况下,可能希望自定义调试配置,比如指定要在运行时传递给程序的命令参数。这种情况下我们可以在launch.json
中定义自定义调试配置。
下面是配置调试过程的步骤:
launch.json
文件launch.json
文件右下角点击 “添加配置”,选择 “(gbd)启动”,文件内容参考如下:{
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) 启动",
"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": "将反汇编风格设置为 Intel",
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": true
}
],
"miDebuggerPath": "/usr/bin/gdb",
"preLaunchTask": "C/C++: g++ 生成活动文件"
}
]
}
launch.json
的作用就是在 Visual Studio Code 中配置调试器。
如果想要在调试/运行程序时添加参数,只需要把参数添加在"args"
选项中即可。
在VSCode中编译、调试一个简单的.cpp文件,所需要做的就是:
上面的过程已经完成了在VSCode中调试Linux环境下的C++代码的配置,但只适用于当前工作空间。如果想要在其他的工程文件夹下复用这种配置,只需要把tasks.json
和launch.json
文件复制到新文件夹下的.vscode
目录下,然后根据需要改变对应的源文件和可执行文件的名称即可。