vscode配置cpp调试环境
vscode配置cpp调试环境
写在前面
虽然平日几乎用不到cpp,但还是想用cpp刷刷题。打算在vscode中配置cpp的调试环境。这篇文章说的是Mac
的相关配置,如果是windows
的可以参考其他文档。废话不多说,开始我们的cpp调试环境配置吧。
准备工作
基本的工作可以参考vscode的官方文档,里面有详细的配置,这里简述一下。
- 安装C/C++插件
- 添加c_cpp_properties.json配置文件
- 添加tasks.json配置文件
- 添加launch.json配置文件
安装C/C++插件
打开插件页面,搜索输入C/C++
搜索C/C++插件。
安装该插件后,使用vscode打开包含cpp文件的文件夹时,vscode会添加.vscode子文件夹到目录中。
添加c_cpp_properties.json配置
通过快捷键⇧⌘P运行C/Cpp: Edit configurations
,添加缺失的c_cpp_properties.json
文件。默认的添加的文件如下:
{
"configurations": [
{
"name": "Mac",
"includePath": [
"${workspaceFolder}/**"
],
"defines": [],
"macFrameworkPath": [
"/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/Frameworks"
],
"compilerPath": "/usr/bin/clang",
"cStandard": "c11",
"cppStandard": "c++17",
"intelliSenseMode": "clang-x64"
}
],
"version": 4
}
这个部分没有做什么调整。采用的是默认添加的文件。
添加tasks.json配置文件
通过快捷键⇧⌘P选择执行的命令,选择Task: Configure Task命令,选择Create tasks.json from templates,选择Others来创建一个外部命令。根据自己的编译器更换commnd选项。
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "cpp",
"type": "shell",
"command": "g++",
"args": [
"-g",
"${file}",
"-o",
"a.out"
],
"group": {
"kind": "build",
"isDefault": true
}
}
]
}
这里需要说一点,希望对当前标签页的代码进行编译执行,因此args
参数中用的是${file}
。另外需要说的一点是,如果不指定输出的编译文件,会影响调试。可以参考github上的一个issue。所以这里用的命令等于是(假设当前的文件是question.cpp):
>> g++ -g question.cpp -o a.out
当然也可以把args中的a.out
替换为${file}
保持和文件名的对应。
添加launch.json配置文件
在调试界面点击运行,会提示添加launch.json配置文件。其定义了启动调试文件的相关属性。
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(lldb) Launch",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/a.out",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "lldb",
"preLaunchTask": "cpp"
}
]
}
这里需要说明的有三个参数:
-
program
参数,这里的文件名要和之前的保持对应,如果前面用的a.out,这里也应该是a.out。 -
externalConsole
参数,悬停在上面会有说道,如果是linux等系统,将其置为false
时,将会在vscode集成内输出打印内容。如果是true
的话,会在外部的终端输出。为了在vscode看输出,这里设置其为false
.另一个需要留意的是参数externalConsole
,悬停在上面会有说道,如果是linux等系统,将其置为false
时,将会在vscode集成内输出打印内容。如果是true
的话,会在外部的终端输出。为了在vscode看输出,这里设置其为false
. -
preLaunchTask
参数,因为每次调试都需要预先对代码进行编译,这里可以通过preLaunchTask
参数指定编译任务。这里将其指定为之前的任务:cpp
. 即之前task的label中的内容。
运行效果
如下是打断点调试的示例图:
可以看到输出:
写在最后
其实来来回回配置了好几次vscode的cpp调试环境(每换一个工作目录就要重新配置一次),基本上都是到处搜索博客。现在自己记录下来,也省的再乱搜了。