vscode+cmake+MinGW-GDB调试配置

我愿意化蝶在你肩上落
守住你不经意间的执着
–《化蝶》

1、背景

VSCode的task.json对于整个工程的编译配置十分不方便,比方说我要调用opencv库,我就得写一堆-L来链接库文件,实际上这些工作cmake早就集成好了。但是我又想在vscode里面调试文件,那么如何结合CMake和gdb来进行调试呢?闲话少说,直接上代码:

2、task.json

{
    
    
    "tasks": [
        {
    
    
            "type": "cmake",
            "label": "CMake: build",
            "command": "build",
            "targets": [
                "ALL_BUILD"
            ],
            "group": "build",
            "problemMatcher": [],
            "detail": "CMake template build task"
        }
    ],
    "version": "2.0.0"
}

这个文件的作用就是,定义一个前置流程CMake: build,只要点击调试调用gdb调试的时候,会先执行这个,也就是文件里面定义的cmake编译。当然啊,你CMake的生成器设置一定要设置成MinGW Makefiles,可不要是vs studio,不然就贻笑大方了,不过想必查这个问题的读者应该不会有这样的错误。
vs输出为:

build task started....
E:\program-tools\cmake\bin\cmake.EXE --build e:/program/c++/txcl-final/build --config Debug --target all -j 18 --
[ 50%] Building CXX object CMakeFiles/test2.dir/matchtemple.cpp.obj
[100%] Linking CXX executable test2.exe
[100%] Built target test2
build finished successfully.

3、launch.json

{
    
    
    "version": "0.2.0",
    "configurations": [
        {
    
    
            "name": "gdb",
            "preLaunchTask": "CMake: build",//调试前执行的任务,就是之前配置的tasks.json中的label字段
            "type": "cppdbg",//配置类型,只能为cppdbg
            "request": "launch",//请求配置类型,可以为launch(启动)或attach(附加)
            "program": "${workspaceFolder}\\build\\test2.exe",//调试程序的路径名称,这个Debugger需要自己创建,为了方便放置生成的exe文件
            "args": [],//调试传递参数
            "stopAtEntry": true, // 设为true时程序将暂停在程序入口处,相当于在main上打断点
            "cwd": "${workspaceFolder}",  // 调试程序时的工作目录,此为工作区文件夹;改成${fileDirname}可变为文件所在目录
            "environment": [
            ],
            "externalConsole": false,//true显示外置的控制台窗口,false显示内置终端
            "MIMode": "gdb",
            "miDebuggerPath": "E:/lib/MinGW/mingw-posix/x86_64-8.1.0-release-posix-sjlj-rt_v6-rev0/mingw64/bin/gdb.exe",// 调试器路径,Windows下后缀不能省略,Linux下则不要
            "setupCommands": [
                {
    
    
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": false
                }
            ]
        }
    ]
}

说明:1、preLaunchTask务必和task.json里的label一样,这个label就像配置的函数名一样,以供调用。
2、program标签就是你可执行文件的路径,这里其实可以换成cmake插件提供的环境变量,但是我忘了,读者有兴趣可以查一下
3、miDebuggerPath是gdb路径,也就是你MinGW的bin路径

我遇到的坑:如果你vscode中gdb调试启动之后窗口红了一下就闪退,并且没有错误提示,使用以下方法:
1、检查环境变量里面有没有其他的MinGW(装conda的时候会自动安装一个MinGW并且添加进环境变量里面,有conda环境的同学可以注意一下),如果有多个MinGW,请保证你编译工程使用的MinGW在环境变量列表中的最上面,否则调用的版本不对会导致无法启动调试,即使你在控制台里面可以启动gdb。
2、如果不是上面的问题,尝试直接在文件资源管理器,也就是文件夹里面双击鼠标执行可执行文件,看看有没有报错,我之前是因为运行找不到dll文件导致启动调试不成功,但是这个问题gdb和vscode是不会弹窗告诉你的,而是直接闪退,这一点真的很垃圾,所以需要你手动双击找到问题所在。

猜你喜欢

转载自blog.csdn.net/m0_51194302/article/details/131057244