使用gdb添加断点的几种方式

1. 普通断点

根据代码行数设置断点是最常见的一种方式,在debug程序运行前就可以进行断点的配置。如:

(gdb) b src/main.cpp:127

当程序执行到main.cpp文件的第127行时就会出发断点。

2. 条件断点

顾名思义,这种断点是当满足一定条件时才会触发,比较适合进行异常排查。设置方式(gdb)break line-or-function if (condition), 如:

(gdb) b src/main.cpp:127 if cnt==10

3. 数据断点

就是根据地址来进行设置断点,只能是在debug程序运行之后设置,因为只有运行后,你才能很方便地获知变量的地址。当该地址上的内容发生改变时就会触发断点。
设置数据断点有两种方式,一种是直接指出地址值,如:

(gdb) b *0x400522

注意必须加*号。而获取地址值的方法是,先设置普通断点,在断点处print &变量名 就能获取该变量的地址。
另一种当然就是直接设置变量名了,如:

(gdb) b &变量名

4. 函数断点

这种断点是当程序执行到某个程序时就会触发断点。设置方式如:

(gdb) b funcName

但是函数断点并不是对所有函数都有效,比如优化后的静态函数和inline函数等,可能就无法触发断点。

5. 监视

设置监视也必须是在程序运行后才行。如:

(gdb) watch *地址    # 当地址所指内容发送变化时断点
(gdb) watch var    #当var值变化时,断点
(gdb) watch (condition)    #当条件符合时,断点

监视也被称为硬件断点。可以监测栈变量和堆变量值的变化,当被监测变量值发生变化时,程序被停住。

转载于:https://www.cnblogs.com/xl2432/p/11361997.html

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值