假设以下情况
.gdbinit
:
break foobar
ignore 1 1
run
程序使用
gdb --args ./myprogram --argument1 --argument2
等启动。
现在,当我第一次开始时,一切都很好。但是,如果我在
run
提示符下发出 (gdb)
以便使用最后已知的命令行重新启动程序,则 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
任何后续运行都会以
breakpoint already hit X time
中显示的 X 值开始。当然这个值已经超过了ignore
设定的限制。
如何重置断点上的统计数据,或者更好的是如何让
run
自动为我执行此操作?
如何重置断点上的统计数据,或者更好的是如何让 run 自动为我执行此操作?
一种方法是:
# ~/.gdbinit
break foobar
break main
commands 2
silent
ignore 1 1
continue
end
现在,每次运行时,都会在
main
上遇到静默断点,这会重置 foobar
断点上的忽略计数并继续。
在下次跑步之前再次执行“忽略 1 1”似乎可以达到您想要的效果。 Employed Russian 帖子中的命令 2 部分只是使其自动执行。
已经命中的计数似乎在运行之间正确重置。 忽略计数不会与该值进行比较,而只是在将来遇到断点时进行倒数。
如果您执行“ignore 1 1”和“info br”,您应该在第一个断点下看到“ignore next 1 attempts”。