有没有办法重置GDB中的断点状态?

有没有办法重置GDB中的断点状态?,gdb,breakpoints,Gdb,Breakpoints,假设以下.gdbinit: break foobar ignore 1 1 run 程序是使用gdb--args./myprogram--argument1--argument2等启动的 现在,当我第一次开始时,一切都很好。但是,如果我在(gdb)提示符下发出run,以便使用最后一个已知的命令行重新启动程序,ignore行将不会生效 原因当然很清楚。第一次,我以 (gdb) info break Num Type Disp Enb Address

假设以下
.gdbinit

break foobar
ignore 1 1
run
程序是使用
gdb--args./myprogram--argument1--argument2
等启动的

现在,当我第一次开始时,一切都很好。但是,如果我在
(gdb)
提示符下发出
run
,以便使用最后一个已知的命令行重新启动程序,
ignore
行将不会生效

原因当然很清楚。第一次,我以

(gdb) info break
Num     Type           Disp Enb Address            What
1       breakpoint     keep y   0x000000000061ea6a in foobar at ../foobar.c:1173
        breakpoint already hit 1 time
任何后续运行都以断点已到达X时间的X中显示的X值开始。自然,该值将已经超过
忽略设置的限制

如何重置断点上的统计信息,或者更好的是如何让
run
自动为我重置

如何重置断点上的统计信息,或者更好的是,如何让run自动为我重置这些统计信息

一种方法是:

# ~/.gdbinit
break foobar
break main
commands 2
  silent
  ignore 1 1
  continue
end

现在,每次运行时,您都会在
main
上点击静默断点,这将重置
foobar
断点上的忽略计数并继续。

这与退出gdb并启动另一个会话有什么不同?@dbrank0:您为什么希望我退出gdb?如果下次发布
run
时在GDB之外进行更新,GDB足够智能,可以读取二进制和符号。事实上,这是作为GDB的一项功能发布的,我已经围绕它对我的工作流程进行了建模。@dbrank0不同之处在于,您保持了其他所有内容的完整性;gdb中的命令历史记录、断点本身等等。重新启动程序时要重置断点计数器并非不合理。