我正在寻找的是这样的东西 -
Set Breakpoint 1
Set Breakpoint 2
Disable Breakpoint 2
Set dbg_counter to 0
Increment dbg_counter everytime Breakpoint 1 is reached
If dbg_counter > 100:
Enable (once) Breakpoint 2
Set dbg_counter to 0
请注意'dbg_counter'是一个只有调试器才知道的变量(即不是被调试程序的一部分)。
答案 0 :(得分:6)
来自https://sourceware.org/gdb/current/onlinedocs/gdb/Convenience-Vars.html:
GDB提供了可在GDB中使用的便捷变量 一个值,稍后再参考。这些变量完全存在 在GDB内;他们不是你的计划的一部分,并设置一个 便利变量对你的进一步执行没有直接影响 程序
便捷变量可以与断点条件一起使用,以忽略断点一定次数。但是有一种更简单的方法可以做到这一点。来自https://sourceware.org/gdb/current/onlinedocs/gdb/Conditions.html:
断点条件的特殊情况是仅在停止时停止 断点已达到一定次数。就是这样 有用的是有一种特殊的方法,使用忽略计数 断点。每个断点都有一个忽略计数,这是一个 整数。大多数情况下,忽略计数为零,因此具有 没有效果。但是如果你的程序到达了一个忽略计数的断点 是积极的,然后不是停止,它只是减少忽略 按一个计数并继续。因此,如果忽略计数值为 n,断点不会在程序到达的n次停止 它
答案 1 :(得分:2)
根据@Thomas Padron-McCarthy提供的关于convenience variables的信息,我能够提出以下GDB command file来解决我的问题 -
break file.c:20
break file.c:35
disable 2
set $dbg_count = 0
commands 1
set $dbg_count += 1
if $dbg_count > 100
enable once 2
set $dbg_count = 0
end
end
run