gdb break if命令,condition 命令,ignore命令

break if
--------------------------------------------------------
用法: 支持简单变量的判断, 字符串变量可以化为字符来比较.
--------------------------------------------------------
break [break-args] if (condition)
举例:
break main if argc > 1
break myfunc if i % (j + 3) != 0
break test.c:34 if (x & y) == 1
break test.c:180 if (p_str == NULL && i < 0)
对简单变量进行判断没有问题

对字符串变量要当心!
break test.c:44 if strlen(mystring) == 0   // 应该可以

b opt.c:467 if strcmp(name,"n")==0,
设置时未提示错误,但运行时会提示错误:
'__strcmp_sse42' has unknown return type; cast the call to its declared return type

字符串比较strcmp 不能使用,
但可以改为:
b opt.c:467 if name[0]=='n' 通过
可见条件断点还是只支持简单的数据判断.不要奢求!

----------------------------------------
condition, 为已设断点添加条件
----------------------------------------
与break if类似,只是condition只能用在已存在的断点上。
condition <break_list> (condition)
例如:
cond 3 i == 3
将会在断点3上附加条件(i == 3)

断点中断后还可以执行commands, 只不过这些命令不能在顶层脚本中写甚是遗憾.

----------------------------------------
ignore, 为已设断点设置忽略次数.
----------------------------------------
用法:
ignore break_number count
例: ignore 2 100
表示忽略2号断点100次.

使用场景: 遇到一个for(;;) 无限循环,在很多loop后它从某一种条件下推出了循环.
想观察它最后一圈是如何退出的.
分2步走,
第1步:在loop 内设一个断点, 忽略这个断点10000次,运行,退出循环后查看loop的次数.
 假如是n次(用info b 查看)
第2步: 重启动一次程序, 把这个断点设置为忽略n-1次, 然后可以单步执行程序,就可以
跟踪到loop 是如何退出的.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值