gdb调试C/C++程序
参考:
http://blog.youkuaiyun.com/liigo/article/details/582231/
http://blog.youkuaiyun.com/haoel/article/details/2879/
https://www.cnblogs.com/mfryf/p/5390442.html
https://segmentfault.com/a/1190000003733061(较好)
调试前提
调试程序的前提是编译debug版的可执行文件。
g++ 下:加command参数-g
CMake生成Debug:SET(CMAKE_BUILD_TYPE "Debug")
例如:g++ main.cpp -o a.out -g
即可生成可调式的程序a.out。
调试常用命令
指令 | 作用 |
---|---|
file xx.cpp | 打开xx.cpp文件 |
r | 运行或重新运行程序 |
l [n] | 列出n周围多行信息,n为空就是当前行周围的多行信息 |
b n 或b x.cpp:n | 在n行处添加断点 |
s | 单步执行,进入函数 |
n | 单步执行,跳过函数 |
p value | 输出value变量的值 |
watch value | 监视某个变量 |
c | 继续 |
q | 退出调试 |
finish | 如果已经进入了某函数,而想退出该函数返回到它的调用函数中,可使用命令finish |
until | 结束当前循环 |
display value | 程序停止时显示变量和表达时 |
pwd | 显示当前工作目录 |
ptype class | 显示一个数据结构(如一个结构或C++类)的内容 |
一般调试的步骤
file 找到相要调试的程序,l,寻址需要加断点的位置,b加断点,r运行,s或n执行,p,输出想看的值,q退出调试。
配合vscode调试
前面文章也有介绍vscode配合g++运行和调试。这里再说一遍:
点击添加配置
,修改"program": "${workspaceFolder}/build/a.out",
配置调试文件的路径。
实例
p *(siftData2.h_data)@1
输出动态数组的元素。
info breakpoints
查看断点位置。
list
,显示当前行后面的源程序。
list -
,显示当前行前面的源程序。