GDB是Ubuntu下调试C++的核心命令行工具,需配合编译时的-g选项(生成调试信息)使用。
sudo apt update && sudo apt install gdb
-g选项,例如:g++ -g main.cpp -o my_program
gdb ./my_program
break <函数名/文件名:行号>:设置断点(如break main、break main.cpp:10);run(或r):启动程序,遇断点暂停;next(或n):单步执行(不进入函数);step(或s):单步执行(进入函数);print <变量名>(或p):打印变量值(如print x);backtrace(或bt):显示调用堆栈(排查函数调用流程);continue(或c):继续执行至下一个断点;quit(或q):退出GDB。VS Code通过扩展支持C++调试,适合偏好图形界面的用户。
.vscode文件夹;tasks.json(配置编译任务):{
"version": "2.0.0",
"tasks": [
{
"label": "build",
"type": "shell",
"command": "g++",
"args": ["-g", "${file}", "-o", "${fileDirname}/${fileBasenameNoExtension}"],
"group": {"kind": "build", "isDefault": true}
}
]
}
launch.json(配置调试任务):{
"version": "0.2.0",
"configurations": [
{
"name": "g++ Debug",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}/${fileBasenameNoExtension}",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [{"text": "-enable-pretty-printing", "ignoreFailures": true}],
"preLaunchTask": "build",
"miDebuggerPath": "/usr/bin/gdb"
}
]
}
F5或点击侧边栏调试图标,选择“g++ Debug”即可启动调试会话。Valgrind用于检测内存泄漏、非法访问等问题,是C++项目内存调试的利器。
sudo apt install valgrind
./my_program为可执行文件路径):valgrind --leak-check=full ./my_program
输出结果会显示内存泄漏的位置(如“definitely lost”表示明确泄漏)。-fsanitize=address选项:g++ -g -fsanitize=address -o my_program main.cpp
运行程序后,ASan会直接报出内存错误(如越界访问、use-after-free)。strace ./my_program
-g选项,否则调试工具无法获取变量、行号等信息;-O0(无优化),避免编译器优化导致变量值异常或断点失效;break <文件名:行号>精准定位断点,如break main.cpp:15。