Gdb调试断点问题(思考记录)

以 例: 输出1-100之间的素数  为例

//func.c

Gdb调试断点问题(思考记录)_第1张图片

在保存退出后首先使用 Gcc 对 func.c 进行编译,注意一定要加上选项“-g” ,这样编译出的可执行代码中才包含调试信息,否则之后 Gdb 无法载入该可执行文件。
gcc -g func.c -o test

Gdb调试断点问题(思考记录)_第2张图片

 

虽然这段程序没有错误,但调试完全正确的程序可以更加了解 Gdb 的使用流程。接下来就启动 Gdb 进行调试。注意,Gdb 进行调试的是可执行文件,而不是如“.c”的源代码,因此,需要先通过 Gcc 编译生成可执行文件才能用 Gdb 进行调试

输入命令:gdb test 进入调试模式

Gdb调试断点问题(思考记录)_第3张图片

使用b+行号,在某行插入断点,本例在第10行插入断点,回车后显示断点1在func.c文件的第10行

输入r,运行程序,运行到第9行,第10行不运行;

输入p flag,查看f变量flag的值

输入c,继续运行程序,使用p命令可继续查看变量。

在本例中第一次运行到断点时,数为1,为素数满足条件故flag的值为0

第二次运行到断点时,数为2,为素数满足条件故flag的值为0

......

Gdb调试断点问题(思考记录)_第4张图片

.此调试记录尚不完整,谨慎查看。

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调试

 

你可能感兴趣的:(Gdb调试断点问题(思考记录))