1、背景
- 程序的发布方式有两种,debug模式和release模式
- Linux gcc/g++编译出来的二进制程序,默认是release模式
- 要使用gdb调试,必须在源代码生成二进制程序的时候,加上-g选项
例如gcc test.c -o mybin -g
2、命令功能
gdb binFile(开始使用),ctrl+d或quit(退出)
测试代码:
调试命令:
GDB中可以直接回车键重复上一次的命令,用pgUp键可以查看历史命令。
(1)list/l 行号
功能:功能显示binFile源代码,每次显示周围10行。
l指令默认从main函数开始显示:
l 1 显示第一行周围的代码,再用l或者直接回车键键,可以继续查看下面10行代码:
(2)list/l 函数名
功能:显示出某个函数的源代码。
l mian ,显示出main函数的周围10行的源代码:
l mul:
(3)break/b 行号
功能:在某一行设置断点。
在25行打上断点:
(4)break/b 函数名
功能:在某个函数开头设置断点。
在Add函数开头设置断点:
也可以用b 函数名:行数,在函数的第任意行打断点,在main函数的第3行打断点:
在多文件时,也可以b 文件名:函数名:行数打断点,在test.c文件里的Add函数里的第二行打断点:
(5)info break/i b
功能:查看断点的信息。
会把打的断点的信息显示出来,Num是断点编号,Type是断点的类型,Disp是断点配置,Enb是是否启用断点,Address是断点的地址,What是断点在代码中的位置:
(6)delete breakpoint/d 断点编号
功能:删除断点编号所代表的断点
删除4号和5号断点:
如果不加编号,就会删除所有断点:
(7)disable 断点编号
功能:禁用断点。
禁用断点后改断点就不能在使用,Enb也会变成n:
(8)enable 断点编号
功能:启用断点
让断点重新能够使用,Enb变成y:
(9)run/r
功能:开始调试。
如果没有断点,就会直接运行完程序,打印出运行结果:
如果有断点,就会在断点出停下,并打印改行代码:
如果断点被命中,断点信息会多一条breakpoint already hit 1 time:
(10)continue/c
功能:从当前位置开始连续执行程序。
当我们run开始调试后,遇到断点停止了,此时想要继续往下执行,可以选择continue,他会连续执行程序,如果遇到断点就会停下来,否则直接运行到程序结束:
(11)next/n
功能:主逐过程执行。
不会进入调用的函数,遇到空行会跳过:
(12)step/s
功能:逐语句执行。
会进入调用的函数:
(13)p 变量/表达式
功能:打印变量值或者表达式的值。
(14)display 变量名
功能:跟踪查看一个变量,每次停下都显示它的值。
跟踪变量旁边的数字是它们的编号:
(15)undisplay 编号
功能:取消对先前设置的那些变量的跟踪。
(16)until 行号
功能:运行至指定的行
可以用这个命令来跳过不想看的代码:
(17)finish
功能:运行到当前函数结束,然后停下来等待命令。
在第22行断点处停下后,用s指令进入Add函数,在函数内执行finish指令,运行到当前函数结束后,在第22行停止等待命令:
(18)bt
功能:查看调用堆栈。
在main函数里查看调用堆栈就只有main函数,在Add函数里查看调用堆栈,Add就被压到了栈顶:
(19)set var
功能:修改变量的值。
这个指令可以用来控制循环语句里的循环变量,来快速到达自己想要看的循环次数。
完结。。。
如有错误,欢迎指正,谢谢。
标签:功能,函数,使用,Add,gdb,编号,main,断点 From: https://blog.51cto.com/u_15855358/7501749