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

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

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


http://www.kler.cn/a/545441.html

相关文章:

  • DeepSeek 本地部署(电脑安装)
  • “PEP 8: W292 no newline at end of file“报错 IntelliJ IDEA自动添加空行问题
  • 读取本地excel并生成map,key为第一列,value为第二列
  • CSS实现与文字长度相同的下划线
  • CSS实现自上层放大动画
  • ANI-AGI-ASI
  • Postman配置环境变量(超详细的)
  • 分享 UniApp 中超好看的卡片阴影样式
  • 分布式环境下的锁机制:Redis与Redisson的应用探讨
  • js 正则规则 和 常用正则表达式
  • PyQT项目如何在Linux中自启显示界面
  • k8s启空容器用于排查问题
  • Git命令摘录
  • 从递归到动态规划(一维)
  • js实现点击音频实现播放功能
  • redis RDB AOP区别,文件格式及内容
  • Java开发中的连接池技术介绍
  • 【设计模式】【行为型模式】迭代器模式(Iterator)
  • 探索ELK 的魅力
  • C#的async异步方法里如果使用了await,那么它跟同步方法有什么区别?