linux vscode通过cmake调试程序
Cmake中要将编译版本改成Debug版本
linux
c_cpp_properties.json
文件
ctrl+shift+p
弹出搜索框,输入C++
会显示C/C++配置UI
,点击后会生成c_cpp_properties.json
文件
按需修改includePath
及compilerPath
主要是为了方面配置工程路径,可以方便进行关键词填充、找到函数定义等
{
"configurations": [
{
"name": "Linux",
"includePath": [
"${workspaceFolder}/**"
],
"defines": [],
"compilerPath": "/usr/bin/c++",
"cStandard": "c17",
"cppStandard": "c++14",
"intelliSenseMode": "linux-clang-x64"
}
],
"version": 4
}
编译Cmake工程tasks.json
生成tasks.json
文件
- 在VSCode的主菜单中,选择 Terminal>Configure Default Build Task,
- 选择 “CMake: build”
- 将生成一个 tasks.json文件,将其中的内容替换为以下内容即可:
{
"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"]
},
],
}
上面的 tasks.json 文件主要包含三个命令:
label为cmake的任务:执行shell类型的cmake命令,其参数为 ../
,执行时所在的目录为${fileDirname}/build
。这个命令等价于在build目录下执行cmake ../
label为make的任务:执行shell类型的make命令,没有参数,执行时所在的目录为${fileDirname}/build
。这个命令等价于在build目录下执行make
label为build的任务:该任务由cmake和make任务组成,也就是将上面两条命令执行的过程组合成一个build任务。
所以执行build任务,相当于在build目录下执行了 cmake ../
和 make
两条命令,完成了 CMake的编译过程
运行任务
在VSCode的主菜单中,选择 Terminal>Run Task…,然后选择 build ,再选择 “continue without scanning the task output”,可以在编辑器下方的终端显示界面中看到,VSCode执行完成了cmake和make两个任务.
调试生成的可执行文件launch.json
在VSCode的上方菜单中,选择 Run -> Add Configuration,会生成一个空白的launch.json文件:
我们要做的就是在该文件中告诉VSCode:用gdb调试前面生成的可执行文件,在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"
}
]
}
其中,
"program":用于指定要调试的可执行文件,这里用变量名指代,其值就是helloCMake
"args":执行代码时,需要添加的命令行参数
prelaunchTask:在执行gdb调试前,预先需要执行的任务,这里设置为"build",就是指定第3节中配置完成的build任务,即在gdb调试前,先执行cmake和make
vscode常用的文件变量
${workspaceFolder}
-在VS Code中打开的文件夹的路径
${workspaceFolderBasename}
-在VS Code中打开的文件夹名称,不带任何斜杠(/)
${file}
-当前打开的文件
${relativeFile}
-当前相对于打开的文件workspaceFolder
${relativeFileDirname}
-当前打开的文件相对于的目录名workspaceFolder
${fileBasename}
-当前打开的文件的基本名称
${fileBasenameNoExtension}
-当前打开的文件的基本名称,没有文件扩展名
${fileDirname}
-当前打开的文件的目录名
${fileExtname}
-当前打开的文件的扩展名
${cwd}
-启动时任务运行器的当前工作目录
${lineNumber}
-活动文件中当前选择的行号
${selectedText}
-活动文件中的当前选定文本
${execPath}
-正在运行的VS Code可执行文件的路径
${defaultBuildTask}
-默认构建任务的名称