vscode C/C++ CMake 调试

  • C/C++插件:
    • .vscode
      • c_cpp_properties.json
      • launch.json
      • settings.json
      • tasks.json
  • CMake插件
    • CMakeLists.txt
# CMakeLists.txt

一、CMakeLists.txt 如何支持vscode在线调试?

  • CMake支持调试; C/C++插件也支持调试;二者有区别;
  • C/C++的launch.json task.json只能小规模的;大规模的依赖,还是需要CMake
    • 那么CMake之后的工程,如何在线debug呢?
  1. CMakeLists.txt中添加:
set(CMAKE_BUILD_TYPE Debug)  # 确保是 Debug 模式
set(CMAKE_CXX_FLAGS_DEBUG "-g")  # 添加调试符号
  1. C/C++插件 debug修改:

  2. 修改 .vscode/tasks.json 支持 -g 要修改 .vscode/tasks.json 以支持 debug,需要确保以下几点:

  3. 生成可调试的可执行文件(已包含 -g,符合要求)。

  4. 正确配置 launch.json 以启动调试


修改 tasks.json

当前 tasks.json 已经包含 -g 选项,这是用于调试的信息,因此你只需要确保它编译 .cpp 文件并生成可执行文件。
如果你希望 支持多文件编译,可以改为:

{
    "tasks": [
        {
            "type": "cppbuild",
            "label": "C/C++: g++ 编译(调试)",
            "command": "/bin/g++",
            "args": [
                "-fdiagnostics-color=always",
                "-g",
                "${workspaceFolder}/*.cpp",   // 编译所有 CPP 文件
                "-o",
                "${workspaceFolder}/app"       // 生成 "app" 可执行文件
            ],
            "options": {
                "cwd": "${workspaceFolder}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "用于调试的编译任务"
        }
    ],
    "version": "2.0.0"
}

添加 launch.json(启动 GDB 进行调试)

你还需要在 .vscode/launch.json 添加 GDB 调试支持:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "GDB 调试",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/app",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "启用 Pretty Printing",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "C/C++: g++ 编译(调试)",
            "miDebuggerPath": "/usr/bin/gdb"
        }
    ]
}

使用方法

  1. 编译代码

    • 在 VSCode 任务栏运行 “C/C++: g++ 编译(调试)” 任务
    • 生成 app 可执行文件
  2. 启动调试

    • 打开 Run(运行) -> Start Debugging(开始调试)
    • 选择 “GDB 调试”,会自动调用 GDB 调试 app

额外优化

如果你的程序有多线程或使用 OpenCV,可以添加:

"launch.json":
{
    "environment": [
        { "name": "LD_LIBRARY_PATH", "value": "/usr/local/lib" }
    ]
}

这样可以避免 OpenCV 等动态库找不到。


总结

tasks.json 确保编译支持 -g,并指定 单文件/多文件编译
launch.json 确保 GDB 运行 app,并支持 Pretty Printing
✅ 运行 Ctrl+Shift+B 编译,然后 F5 调试 🚀

报错:“/usr/bin/gdb” --interpreter=mi --tty=${DbgTerm} 0<“/tmp/Microsoft-MIEngine-In-x3btbmiu.21b” 1>“/tmp/Microsoft-MIEngine-Out-ix3okr2v.yh4”

这个错误通常出现在 VSCode 使用 gdb 进行调试时,可能的原因如下:

可能原因及解决方案

1. VSCode 配置错误

检查 .vscode/launch.json 是否正确,尤其是 miDebuggerPathMIMode

"miDebuggerPath": "/usr/bin/gdb",
"MIMode": "gdb"

确保 miDebuggerPath 指向 正确的 GDB 路径。如果 gdb 安装在其他目录,可以使用:

which gdb

然后在 launch.json 中修改 miDebuggerPath


2. GDB 没有安装

尝试在终端运行:

gdb --version

如果 gdb 没有安装,可以通过以下命令安装:

sudo apt update && sudo apt install gdb  # Ubuntu/Debian
sudo yum install gdb  # CentOS
sudo pacman -S gdb  # Arch Linux
brew install gdb  # macOS(Homebrew)

3. 终端权限问题

VSCode 调试器可能无法正确访问 GDB 终端,尝试:

sudo chmod +x /usr/bin/gdb

或者以 管理员权限 运行 VSCode:

sudo code .

4. 关闭 GDB 的 tty 相关设置

可以尝试在 launch.json 中添加:

"setupCommands": [
    {
        "text": "set new-console off",
        "description": "禁用 GDB 新终端",
        "ignoreFailures": true
    }
]

5. 直接在终端运行 GDB

如果 VSCode 仍然报错,尝试手动运行:

gdb build/app

看看是否能正常启动调试,如果手动运行没有问题,则 VSCode 配置可能有问题。


6. 可能的 VSCode 插件 Bug

如果 之前调试是正常的,但突然无法使用,可能是 VSCode 更新导致插件问题:

  • 试试 回退到旧版本的 VSCode,或者
  • 重装 C/C++ 插件
    1. 删除 VSCode C++ 插件
    2. 重启 VSCode
    3. 重新安装 C/C++ 扩展(ms-vscode.cpptools)
    4. 尝试重新调试

7. 重新生成 CMake 构建目录

如果调试文件损坏,尝试:

rm -rf build
cmake -B build -DCMAKE_BUILD_TYPE=Debug
cmake --build build

然后重新尝试 F5 调试。


总结

检查 launch.jsonmiDebuggerPath 是否正确
确认 gdb 是否已安装,并可以手动运行
尝试 set new-console off 关闭 tty 相关设置
可能是 VSCode 插件 Bug,尝试重装 C/C++ 插件
重新生成 CMake 构建目录

试试这些方法,看能否解决你的问题!🚀

### 配置 VSCode 使用 C/C++CMake #### 扩展安装 为了在 Visual Studio Code (VSCode) 中高效地进行 C/C++ 开发,需先安装必要的扩展包。点击左侧活动栏中的扩展图标,搜索并安装 `C/C++ Extension Pack`[^1]。此扩展包内含多个有助于编写和调试 C/C++ 代码的工具。 #### 创建工作区 建议为项目创建专门的工作目录以便管理源文件和其他资源。可以在目标位置新建文件夹,并通过命令行进入该路径后执行 `code .` 来启动编辑器实例[^3]。 #### 设置编译环境 确保本地已正确设置好支持 C/C++ 的编译链路。对于 Linux 用户来说,默认情况下 `/usr/bin/g++` 应可用作 G++ 编译器;Windows 用户则可以考虑安装 MinGW 并将其加入 PATH 变量中以方便调用;MacOS 上通常预装有 Clang/LLVM 工具集,可通过终端指令确认其存在与否以及版本信息[^4]。 #### 构建系统集成-CMake 当准备就绪之后,可以通过两种方式指定构建输出的位置:一是采用绝对路径形式如 `/home/user/project/build` 或者利用 `${workspaceFolder}` 占位符来表示当前项目的根目录加上相对子路径的形式[^5]。接着,在 `.vscode/settings.json` 文件里定义如下配置项: ```json { "cmake.configureOnOpen": true, "cmake.buildDirectory": "${workspaceFolder}/build" } ``` 上述 JSON 片段指示每次打开项目时自动配置 CMake,并指定了一个相对于工作空间的构建输出文件夹。 #### 测试编译过程 完成以上步骤后,尝试编译简单的测试程序验证整个流程是否顺畅运作。例如,假设有一个名为 `main.cpp` 的入口点及其依赖模块位于 `src/swap.cpp` 下面,那么可以直接在内置终端里面运行类似于这样的命令来进行链接操作[^2]: ```bash g++ main.cpp src/swap.cpp -Iinclude -o main && ./main ``` 这会生成可执行文件 `main` 同时立即执行它查看效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值