gdb工具使用

gdb的相关信息,本文就不做介绍了,本文只是在自己平时调试的基础上,进行了一些总结

1、启动和退出gdb

一般有3种方式来启动gdb,,如下所示

第一种:gdb helloworld,这也是最常见的

第二种:gdb helloworld core.pid,在这种方式中,我们预先获得了一个被调试程序的一个core文件core.pid

core文件是程序崩溃时所生成的内存转存文件,通过该文件可以还原程序崩溃时的情景。如果程序崩溃时没有生成 core文件,可以运行“ulimit -c 50000”命令后再试试

第三种:gdb helloworld pid,这是使用gdb调试已运行程序的启动方式,其中pid是通过ps命令获得进程号。


2、断点设置

使用break可以设置软件程序断点,其中设置主要有以下几种方法:

第一、以函数名为break命令的参数,断点会设置在该函数的开始处,如:break main

第二、通过指定文件名和行号的方式指定断点位置,如break helloword.c:20

当调用break命令不带参数时,gdb会在程序指针寄存器所指的位置设置一个断点

第三、使用if设置断点有效时应该满足的先进条件,当表达式的值为非0时程序中断才发生,表达式既可以使用全局变量,也可以使用断点所在函数的局部变量,如:break main.c:7 if a = 1

第四、调试一个多线程程序时,可以在break命令中指定是断点有效的线程号,如 break location [thread threadnum] [if condition]

第五、如果只希望设置一次有效断点,可以使用tbreak命令(temporary break)

第六、使用rbreak命令可以以正则表达式的方式在多个函数中设置断点

3、断点操作

第一、查询当前设置的断点 info breakpoints

第二、使能/禁止断点 enable <断点号>/disable <断点号>

第三、删除一个断点delete [断点号],当没有断点号时将删除所有断点

4、硬件程序断点

使用hbreak命令可以设置硬件程序断点,其命令格式与break是完全一样的。通过show 命令可以了解处理器所支持的硬件断电数,如:show can-use-hw-breakpoints

5、数据断点

数据断点的设置需要使用watch命令,其参数是我们所希望观察到被改变的变量名,或者是一个已知的内存地址。

注意:如果想对局部变量使用watch命令,则需要程序已经停止在变量所在的函数内,对于全局变量就没有这一限制。此外,对于32位处理器,数据断点只能用于监视类型为32位的数据。


6、事件断点

gdb还提供了catch命令以便我们捕获调试期间的事件,事件包括信号、程序开始、程序终止和C++中的异常等。


7、命令

until命令:该命令是设置我们希望的停止点,如until 115,停止在115行

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值