Gdb调试断点问题(思考记录)
以 例: 输出1-100之间的素数 为例
//func.c
在保存退出后首先使用 Gcc 对 func.c 进行编译,注意一定要加上选项“-g” ,这样编译出的可执行代码中才包含调试信息,否则之后 Gdb 无法载入该可执行文件。
gcc -g func.c -o test
虽然这段程序没有错误,但调试完全正确的程序可以更加了解 Gdb 的使用流程。接下来就启动 Gdb 进行调试。注意,Gdb 进行调试的是可执行文件,而不是如“.c”的源代码,因此,需要先通过 Gcc 编译生成可执行文件才能用 Gdb 进行调试。
输入命令:gdb test 进入调试模式
使用b+行号,在某行插入断点,本例在第10行插入断点,回车后显示断点1在func.c文件的第10行
输入r,运行程序,运行到第9行,第10行不运行;
输入p flag,查看f变量flag的值
输入c,继续运行程序,使用p命令可继续查看变量。
在本例中第一次运行到断点时,数为1,为素数满足条件故flag的值为0
第二次运行到断点时,数为2,为素数满足条件故flag的值为0
......
.此调试记录尚不完整,谨慎查看。
gdb调试常用命令:
1、 l(list) #一次列出10行代码(list n,m #列出n~m行)
2、 r(run) #执行程序(未设置断点,将程序执行完毕)
3、 b(break) #b+行号,在该行设置断点
4、 c(continue) #当程序运行时,继续运行程序,直到遇到断点
5、 i b(info break) #查看断点信息
6、 d+编号 #(delete)删除该断点(d删除所有断点)
7、 clear+行号 #删除指定行断点(不加行报错)
8、 p(print) #p+变量名,显示变量的值
9、 s(step) #单步执行(进入调用函数)
10、 n(next) #不进入调用的函数,只在主函数中运行
11、 return/finish #退出step进入的调用函数
12、 q(quit) #退出gdb调试