一、 背景
1. 程序的发布方式有两种,debug模式和release模式
2. Linux gcc/g++出来的二进制程序,默认是release模式
3. 要使用gdb调试,必须在源代码生成二进制程序的时候,加上 -g 选项
如下图:
不加 -g 默认是 release 模式,无法调试,上面那句话是说:(找不到调试符号 )
那么加上 -g 如何?
可以看到文件的大小都变化了,因为 -g 是 Debug 模式。
现在没有向前面那样报错找不到调试符号了,如下图:
二、开始使用
1. gdb 会记录最近一条命令,如果命令无变化,可以直接回车
2. 调试命令:
(1)r或run:开始调试,如果没有设置断点,就直接运行结束。
(2)info break / info b:查看断点(断点的编号)
(3)break(b) 行号:给特定的行号打断点。
(4)delete breakpoints n / d 断点编号:删除编号为 n 的断点
(5)n 或 next:单条执行(和 VS中的 F10 一样 逐过程)
(这里需要打上断点!!!不然 r 直接运行完了)
(6)p 变量:打印变量值。
(7)s :逐语句(VS中的 F11)
因为我这里只写了 printf,没有自己实现,看着效果可能和 n 一样,但是是不一样的!!!
(8)bt : 查看当前的调用堆栈
因为只写了 main 函数,所以只有 main 函数
(9)disable/enable断点的编号 : 使能(关闭和打开)断点
(10)c : 运行至下一个断点处停下来
(11)list/l 行号:显示binFile源代码,接着上次的位置往下列,每次列10行,如下图:
(12)finish : 将当前函数跑完,就停下来display:设置长显示
(13)undisplay : 取消长显示
(14)until : 跳转到指定行(不建议)
(15)set var:修改变量的值
(16)continue(或c):从当前位置开始连续而非单步执行程序
(17)break 函数名:在某个函数开头设置断点
(18)delete breakpoints:删除所有断点
(19)disable breakpoints:禁用断点
(20)enable breakpoints:启用断点
(21)display 变量名:跟踪查看一个变量,每次停下来都显示它的值
(22)breaktrace(或bt):查看各级函数调用及参数
(23)info(i) locals:查看当前栈帧局部变量的值
(24)quit/q: 退出gdb
以上就是 gdb 调试工具的使用。