Linux C++开发中如何调试代码
Linux下C++调试常用GDB与LLDB命令行调试器,支持设置断点、单步执行及查看变量值;VSCode提供图形化调试界面,操作便捷;Valgrind专门检测内存泄漏与未初始化内存等问题;AddressSanitizer编译时插桩可发现缓冲区溢出、悬空指针等内存错误。
调试这事儿,在Linux下做C++开发时几乎是绕不开的一环。代码写完了,跑起来不对,或者干脆崩了,这时候手头没几把趁手的“兵器”,还真不好办。下面这几样工具和方法,算是业内比较主流的套路,从命令行到IDE,从内存检查到编译期检测,基本覆盖了日常需要。

1. 使用GDB(GNU Debugger)
GDB大概是Linux上最老牌、最通用的调试器,没有之一。它的核心操作其实就那几条命令,上手之后效率很高。比如你想让程序在某个函数入口停下来,可以这样搞:
- 启动GDB:
gdb your_program - 设置断点:
break main - 运行程序:
run - 单步执行(进入函数内部):
step - 单步跳过(跳过函数调用):
next - 查看变量值:
print variable_name - 查看堆栈跟踪(看看程序崩在哪):
backtrace - 继续执行到下一个断点:
continue - 退出:
quit
这些命令配合起来,基本就能搞定大部分定位问题了。
2. 使用LLDB
LLDB是LLVM项目推出的调试器,和GDB风格很像,但语法上有些小差异。如果你用的是Clang编译器,用LLDB会更自然。比如设置断点的写法就不太一样:
- 启动LLDB:
lldb your_program - 设置断点:
breakpoint set --name main - 运行:
run - 单步执行:
step - 单步跳过:
next - 查看变量值:
frame variable variable_name - 查看堆栈跟踪:
thread backtrace - 继续执行:
continue - 退出:
quit
如果你平时用GDB习惯了,切换到LLDB可能需要适应一下,但核心逻辑是一样的。
3. 使用Visual Studio Code
图形化IDE也不是不能用。VS Code配合C++扩展,调试体验相当不错。步骤也很直接:
- 先在扩展市场里搜“C++”扩展并安装。
- 然后在项目根目录的
.vscode文件夹下创建或编辑launch.json,配置好调试器路径和编译任务。举个例子:
{
"version": "0.2.0",
"configurations": [
{
"name": "g++ build and debug active file",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}/${fileBasenameNoExtension}",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"miDebuggerPath": "/usr/bin/gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"preLaunchTask": "g++ build active file",
"internalConsoleOptions": "neverOpen"
}
]
}
- 配置好之后,点击VS Code左侧的调试图标,选好配置,直接启动调试就行。断点、单步、变量查看这些功能都有,比纯命令行直观不少。
4. 使用Valgrind
如果你的程序跑起来不崩溃,但感觉内存越用越多,大概率是内存泄漏。Valgrind就是专门干这个的。安装很简单:
sudo apt-get install valgrind
然后运行:
valgrind --leak-check=full ./your_program
它会详细报告哪些内存没释放,甚至能定位到代码行号。处理内存问题时,Valgrind几乎是标配。
5. 使用AddressSanitizer
除了事后检查,还有一种更“狠”的方式——编译时插桩。AddressSanitizer(简称ASan)是GCC和Clang内置的内存错误检测工具,能发现缓冲区溢出、使用未初始化的内存等问题。用法很简单,编译时加个标志:
g++ -fsanitize=address -g your_program.cpp -o your_program
然后正常运行:
./your_program
一旦触发内存错误,程序会立即输出详细的错误信息并退出。比起Valgrind,ASan的运行速度更快,适合集成到日常开发和CI流程中。
以上这些工具和方法,覆盖了从源码调试到内存分析、从命令行到IDE的常见场景。在实际项目中,根据问题的类型灵活搭配使用,效率会高很多。
Windows 10 是一款微软推出的经典操作系统,拥有硬件兼容性与多任务处理能力。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。
极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。
















