是否有一个允许编程断点的C调试器?

时间:2014-08-25 07:28:11

标签: c gdb

我正在寻找的是这样的东西 -

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'是一个只有调试器才知道的变量(即不是被调试程序的一部分)。

2 个答案:

答案 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