当前位置: 首页 > news >正文

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 构建目录

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

相关文章:

  • huggingface.co 网站无法访问的解决办法
  • TestHubo基础教程-创建项目
  • 如何评估云原生GenAI应用开发中的安全风险(上)
  • 如何优化React应用的性能?
  • Navicat 迁移数据库 传输数据
  • 光伏设计软件分类:无人机、Unity3D引擎齐上阵
  • OpenAI API测试
  • vue3: const一个function怎么写呢?
  • 顺序表SeqList(c语言)(动态顺序表)
  • c++11 for auto不定参数
  • wireshark 网络安全 awd 网络安全
  • 深入理解黄金票据与白银票据攻击
  • 【JavaScript】《JavaScript高级程序设计 (第4版) 》笔记-Chapter12-BOM
  • 利用用个人PC搭建私有大模型(低成本、易实施的私有大模型部署方案,兼顾英语 5G协议学习与实践需求)
  • YOLO11网络结构以及改进1
  • 知识拓展:Python序列化模块pickle 模块详解
  • 牛客面筋学习
  • 鸿蒙开发:了解@Builder装饰器
  • mysql监控--慢查询
  • Baumer工业相机堡盟工业相机如何通过NEOAPI SDK实现一次触发控制三个光源开关分别采集三张图像(C#)
  • 十大券商看后市|A股指数有望进一步缓步推高,淡化短期波动
  • 调查丨永久基本农田沦为垃圾堆场,整改为何成“纸面工程”?
  • 国内规模最大女子赛艇官方赛事在沪启航,中外41支队伍逐浪
  • 陈刚:推动良好政治生态和美好自然生态共生共优相得益彰
  • 中国新闻发言人论坛在京举行,郭嘉昆:让中国声音抢占第一落点
  • 关税互降后的外贸企业:之前暂停的订单加紧发货,后续订单考验沟通谈判能力