Debian上C++代码调试指南
在Debian系统上调试C++代码前,需安装GDB(GNU调试器)和G++编译器(用于编译C++程序)。通过以下命令安装:
sudo apt update
sudo apt install build-essential gdb
build-essential包含了G++、make等基础编译工具,gdb则是命令行调试工具。
调试的核心是符号信息(变量名、行号、函数名等),需在编译时通过-g选项生成。例如,编译main.cpp:
g++ -g -o my_program main.cpp
-g选项会将调试信息嵌入可执行文件,若省略则无法使用GDB查看源代码级别的细节。
通过以下命令启动GDB并加载可执行文件:
gdb ./my_program
启动后进入GDB交互界面,提示符为(gdb)。
break(或b)命令。
main函数处设置断点:break mainbreak main.cpp:10foo)处设置断点:break foorun(或r)命令。若需传递参数(如arg1 arg2),可写为run arg1 arg2。next(或n):执行下一行代码,不进入函数内部(如调用std::cout时直接跳过函数体)。step(或s):执行下一行代码,进入函数内部(如调用自定义函数时会进入函数体)。print 变量名(或p 变量名):打印变量的值(如print x、print my_object->value)。info locals:显示当前作用域的所有局部变量。info args:显示当前函数的参数列表及值。backtrace(或bt)显示函数的调用层级(如main→foo→bar),帮助定位问题发生的函数位置。continue(或c)继续执行程序,直到遇到下一个断点或程序结束。quit(或q)退出调试会话。若偏好图形界面,可选择CLion或Visual Studio Code(VS Code)等IDE,它们提供更直观的调试体验。
launch.json配置文件(点击左侧活动栏的调试图标→创建launch.json),内容示例如下:{
"version": "0.2.0",
"configurations": [
{
"name": "Debug C++",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/my_program",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
]
}
watch 表达式命令设置,当表达式的值发生变化时暂停程序(如watch x,当x的值改变时中断)。break main if x == 10,仅当x等于10时在main函数处暂停。list(或l)命令显示当前执行位置周围的源代码(如list main显示main函数附近的代码)。-O2或-O3优化选项(优化会改变代码执行顺序,导致调试信息与源代码不一致),建议使用-O0(无优化)编译。ulimit -c unlimited开启core dump,生成core文件后用gdb ./my_program core分析崩溃原因。