配置 VSCode C++ 调试时, 常见错误教程

配置 VSCode C++ 调试时, 常见错误教程

  1. 只给出单个 .c/.cpp 的调试, 就认为大功告成。

实际的 C/C++ 工程, 往往是多个文件, 由 CMake 构建, 并派发至 Make/Ninja/MSbuild 等 build tool, 去调度执行真正的构建。

  1. 在 Windows 上, 使用 MinGW 工具链, 没有使用 Visual Studio.

实际的 C/C++ 工程, 在 Windows 平台上绝大多数时候是用 Visual Studio 编译器构建的。 用 MinGW 的话, 您是打算用 pthread 吗?

MinGW 充其量是一个玩具, 或者说能帮你检查你的代码是否有写的不规范的地方。 但是你的依赖库, 比如 OpenCV 预编译库, 显然是 VS 而不是 MinGW 编译的。

  1. 只在 Windows 和 Linux 上调试, 没在 macOS 上调试

在 Windows 和 Linux 上, 你的 C/C++ 工程在 VSCode 里能编译, 能调试, 不代表在 macOS 里也能调试。

macOS 的典型报错是 --interpreter=mi 选项无法识别, 这个报错在 Linux 和 Windows 下并不出现。 拜托请亲自尝试后再说 "不用搞各种配置, 默认就能用"。 默认并不能用!

  1. tasks.json 里写具体的编译选项。

我看到视频,把 g++ -Wall xxx.cpp -fPIC 这样的命令写到 tasks.json 文件中。 这确实能用, 然而这真的是玩具, 只能用于调试单个或少量文件, 实际 C/C++ 工程显然是用 CMakeLists.txt 去设定构建规则, 而不是一个个硬编码的。

  1. 在控制台另行开启 gdb 窗口调试。

这相当于脱离了 VSCode 的 gdb 调试, gdb 那个窗口那么小, 如果要调试多个文件,我实在难以想象, 要如何切换不同的文件: 你是打算在 gdb 窗口执行一句 step into, 然后在 VSCode 里用鼠标找到对应的 C/C++ 代码的对应行吗? 你这个方法要是拿来调试 LLVM 源码, 累不死你。

  1. 用 Cpp Tools 插件启动 GDB/LLDB

显然, 会用 Cpp Tools 插件的 "MIMode": "lldb" 配置, 已经超越了90%的人。

然而这仍然是在 Cpp Tools 插件中, 你想输入原生的 GDB/LLDB 命令, 没门, 你必须每一句命令都增加 -exec 前缀, 比如 -exec p hello 打印变量 hello.

正确姿势: 安装 CodeLLDB 插件, 在 launch.json 和 settings.json 中,分别指定 "type": "lldb"。 为啥是这两个文件? 下一节说。

  1. 区分不清楚两个 Debug 按钮。

VSCode 左侧第四个按钮是 "Run and Debug", 对于 C++ 项目, 点击它之后会提示你创建 launch.json 文件, 创建并配置完毕后,可以调试。

VSCode 底部状态栏的 Debug(虫子)图标,是 CMake Tools 插件提供的, 它的配置是在 settings.json 文件中, 也就是 cmake.debugOptions 选项, 具体的选项很多都是和 launch.json 中写法一致, 原因是它其实是转发到 Cpp Tools 插件执行的。

这两套配置, 对应到两个 Debug 按钮, 各自独立。 什么意思呢? settings.json 里的配置, 只被 CMake Tools 的 Debug 按钮使用, Run and Debug 按钮并不使用它。

这就导致, 对于 macOS 这样的平台, 如果没有任何配置,是无法启动 lldb 的, 就需要分别配置 settings.json 和 launch.json。

相关推荐
寥落半伤感8 分钟前
在Pycharm中一键迅速安装包及查看虚拟环境中包名的方法
ide·python·pycharm
汉克老师20 分钟前
GESP 四级明日冲刺:最后一晚只抓两个大方向
c++·gesp·小学生·学c++编程
一木 之林42 分钟前
第 3 节 在 AI 行业中,C/C++ 编程中的动态库和静态库
c语言·c++·后端
库玛西43 分钟前
深度解构高并发利器:纯事件驱动 Reactor 模式的设计哲学与工程实践
服务器·开发语言·c++·笔记·tcp/ip
进击的炸酱面1 小时前
如何在服务器中使用codex?代理配置一图详解
ide·vscode·ssh
linx2951 小时前
单元五 · 对称认知·下:编译与链接
linux·c语言·开发语言·c++·嵌入式硬件
持敬chijing1 小时前
VSCode 远程开发环境完整搭建指南:汉化、SSH 免密连接与版本更新锁定
ide·vscode·ssh
C++ 老炮儿的技术栈1 小时前
西门子 S7 常用存储区(I/Q/M/T/C/DB/PI/PQ)
linux·开发语言·c++·windows·qt·io
linx2952 小时前
单元七 · 零基础路线图-第 1–3 周·变量、类型与字符串
c语言·开发语言·数据结构·c++·算法
Benny_Tang2 小时前
P7514 [省选联考 2021 A/B 卷] 卡牌游戏 题解
c++·算法