前言
搞机器人,C++ 是绕不过去的大山。之前写代码遇到 Bug,我只会疯狂地 cout << "here 111" << endl,效率极低且不优雅。
今天深入学习了 GDB 调试 和 内存模型,终于学会了如何在 VS Code 里开启“上帝视角”,像看慢动作电影一样观察代码的执行。这篇笔记记录了我的环境配置过程和踩过的坑,希望能帮到同样在学 C++ 的你。
一、 理论基础:你的变量存在哪?
1. 栈 (Stack) —— 自动管理的“书桌”
-
特点:快,但空间小。
-
用途:存储局部变量、函数参数。函数结束自动释放。
-
例子:
int a = 10;
2. 堆 (Heap) —— 手动管理的“仓库”
-
特点:空间大,但需要手动申请和释放。
-
用途:存储大型数据(如图像、点云)。
-
风险:内存泄漏 (Memory Leak)。如果你
new了一块内存却忘了delete,这块内存就被“吃”掉了。
二、 实战演练:制造“案发现场”
为了测试 GDB 的威力,我特意写了两段“有毒”的代码。
1. 模拟崩溃 (Crash)
文件名:src/debug_practice.cpp
#include <iostream>
using namespace std;
int main() {
int a = 10;
int b = 0;
cout << "准备进行除法..." << endl;
// 【致命错误】除以 0,程序会在这里直接崩溃 (Segmentation Fault / Floating point exception)
int c = a / b;
cout << "结果是: " << c << endl;
return 0;
}
2. CMake 配置 (开启调试模式)
关键点:必须添加 set(CMAKE_BUILD_TYPE Debug),否则 GDB 无法读取源代码行号。
CMakeLists.txt
cmake_minimum_required(VERSION 3.10)
project(Day6Debug)
# 【关键】开启 Debug 模式,带上调试符号信息
set(CMAKE_BUILD_TYPE Debug)
set(CMAKE_CXX_STANDARD 14)
add_executable(debug_crash src/debug_practice.cpp)
三、 VS Code 可视化调试配置
这是最容易踩坑的地方!很多人点击调试按钮报错,就是因为配置文件没写对。
1. 生成 launch.json
点击左侧调试图标 -> "create a launch.json file" -> 选择 "C++ (GDB/LLDB)"。
2. 配置详情 (避坑版)
重点注意 program 字段:必须指向 CMake 编译生成的可执行文件,而不是你的源代码!
{
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) 启动",
"type": "cppdbg",
"request": "launch",
// 【坑点】这里的路径必须和 CMakeLists.txt 里 add_executable 生成的名字完全一致!
"program": "${workspaceFolder}/build/debug_crash",
"args": [],
"stopAtEntry": false,
"cwd": "${fileDirname}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
]
}
四、 调试效果展示
配置成功后,按下 F5:
-
断点生效:程序乖乖停在了我打红点的那一行(黄色高亮)。
-
变量监视:左侧
Locals窗口直接显示了a=10,b=0。 -
单步执行:我可以点击单步跳过,看着程序一步步走向崩溃的边缘,精准定位 Bug。

55

被折叠的 条评论
为什么被折叠?



