如何编译并用gdb调试c文件

win

gcc test.c -o test

要对程序进行调试,使用-g参数,gcc -g test.c -o test

编译完成后,启动GDB调试工具,命名为:gdb + 要调试程序的程序名,在本例中使用的命令为【gdb test】;

可以使用list/l命令查看程序,方便我们添加断点时查看信息;

然后使用break/b命令给程序添加断点,共有下面几种情况:

①   b 函数名 在某函数入口处添加断点;

②   b 行号 在指定行添加断点

③   b 文件名:行号 在指定文件的指定行添加断点

④   b 行号 if 条件 当条件为真时,指定行号处断点生效,例 b 5 if i=10 ,当i=10时,第5行断点生效

添加完断点之后,我们可以使用【info break】命令,查看所有的断点;

最后使程序开始运行,run命令,运行程序;next命令,单步运行,continue命令,连续运行;如果想查看某一变量的值,则使用print/p + 变量名;

linux

也是-g,

gdb test

然后你就会看到出现好多信息在屏幕上,大致说的是gdb的一些版本信息说明之类的,但是它对你调试程序没用,所以,你可以加上-q选项,不输出它们。

gdb -q test

 //list默认一次显示10行
 //直接输入回车重复上次命令,显示接下来的10行

list 还可以加上其他参数,比如:
list 5,10   显示第5行到第10行的代码;

list func   显示func函数周围的代码,显示范围和list参数有关;

list test.c:5,10  显示源文件test.c第5行到第10行的代码,一般用于调试含多个源文件的程序。

gdb 还支持字符串查找,search str,从当前行开始,向前查找含str的字符串;

reverse-search str,从当前行开始,向后查找含str的字符串。

shell clear
(gdb) break 7 if n==6
Breakpoint 2 at 0x80484d1: file test.c, line 7.

当然,还可以直接在某个函数处设置断点;直接break 函数名就可以了,

然后我们想看下设置的断点信息,可以使用info breakpoints命令。

Disp表示中断点在执行一次之后是否失去作用,dis为是,keep为不是;Enb表示当前中断点是否有效,y为是,n为否;Address表示中断点所处的内存地址;What指出断点所处的位置。

disabe num,enable num

直接删除该断点,可以使用clear命令和delete命令。

clear命令后面的参数为设置断点的行号,clear后面参数还可以加设置断点的函数名。

delete命令后面的参数为断点的编号;可以一次删除多个断点,断点编号之间用空格隔开;如果delete后没有参数,默认删除所以断点,会给出提示选择是否操作。

run,

 还有nexti和stepi命令,这两个是单步执行一条机器指令,比如(i=0;i<n;i++)这条语句需要输入多个nexti才能执行完;两个的区别和上面相同。

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值