C++在Ubuntu上的调试方法
GDB是Ubuntu下最常用的命令行调试工具,适合习惯终端操作的用户。
sudo apt update && sudo apt install gdb安装。g++编译时必须添加-g选项,例如g++ -g -o myprogram myprogram.cpp(-g会保留变量名、行号等调试信息)。gdb ./myprogram,加载可执行文件。break <函数名/行号>:设置断点(如break main在main函数开头断住,break myprogram.cpp:20在第20行断住);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",
"configurations": [
{
"label": "g++ build active file",
"type": "shell",
"command": "g++",
"args": ["-g", "-O0", "${file}", "-o", "${fileDirname}/${fileBasenameNoExtension}"],
"group": {"kind": "build", "isDefault": true}
}
]
}
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", "text": "-enable-pretty-printing", "ignoreFailures": true}],
"preLaunchTask": "g++ build active file"
}
]
}
F5键启动调试,程序会在断点处暂停,通过顶部调试工具栏控制执行(如单步跳过、进入函数、继续运行),下方调试面板可查看变量值、调用栈等信息。valgrind --leak-check=full ./myprogram,会输出内存错误详情(如未释放的内存块)。strace ./myprogram,可查看程序执行的系统调用序列。