linux vscode通过cmake调试程序

Cmake中要将编译版本改成Debug版本

linux

c_cpp_properties.json文件

ctrl+shift+p弹出搜索框,输入C++会显示C/C++配置UI,点击后会生成c_cpp_properties.json文件
按需修改includePathcompilerPath
主要是为了方面配置工程路径,可以方便进行关键词填充、找到函数定义等

{
    "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} -默认构建任务的名称

参考
Linux环境下使用VScode调试CMake工程

posted @ 2023-04-21 20:54  小小灰迪  阅读(426)  评论(0编辑  收藏  举报