refs:
主参考: https://www.cnblogs.com/life2refuel/p/5396538.html
大牛文: http://blog.jobbole.com/107759/
gdb初次调试案例 https://blog.csdn.net/paul123456789io/article/details/53228532
gdb调试过程
gcc -g debug.c -o debug
命令编译,增加了 -g 参数,并去掉各种优化 -O2gdb debug
进入debug程序的调试过程- (gdb)
r(un)
启动程序运行 - (gdb)
where
执行查找错误 - (gdb)
b 9/main/add
在第9行/main函数所在行/add所在行 加断点,并再次启动 - (gdb)
set var(iable) xxx=x
程序运行到断点处暂停,修改xxx变量的值 - (gdb)
c(ontinue)
继续运行,直到下一个断点处,重复4-7,直到程序正确运行 - 返回原始文件修改,并重新运行
gdb常用命令
- (gdb)
l
: list 加载源码内容 - (gdb)
p i
: print 打印变量i - (gdb)
n
: next 过程调试,到下一步,不会进入子过程 - (gdb)
s
: step 单步调试,遇到子函数会进入函数内部 - (gdb)
q
: 退出调试 - (gdb)
d 8
: delete 删除8号断点 - (gdb)
clear 16/main/add
: 删除16行/main函数/add函数 的断点 - (gdb)
info break
: 查看断点信息
gdb调试内存堆栈信息
- (gdb)
info args
: 查看当前函数参数值 - (gdb)
info locals
: 查看当前函数栈上的值 - (gdb)
info registers
: 查看寄存器值 - (gdb)
x /nfu ptr
: 从地址 ptr 开始查看 n 个 以 u (b/h/w/g:单/双/四/八) 个字节为一个地址单位的数据,以 f (x/d/u/o/t/a/i/c/f:16进制/10进制/10进制无符号…) 格式显示输出