有没有办法重置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中的命令历史记录、断点本身等等。重新启动程序时要重置断点计数器并非不合理。