如何强制GDB在1处开始编号断点



在使用delete命令删除所有断点后,如何强制GDB将其新添加的断点编号从1开始?

我使用的是这个版本的GDB:GNU gdb (GDB) 8.0.50.20171024-git

TL;DR基本原理

在复杂的调试会话中,我有一个单独的命令文件,我使用source命令将其源代码返回,该命令的第一行是delete br。这确实清除了断点。然后,在接下来的几行中,我添加了复杂的断点,但不会使用断点1重新启动。这意味着,在同一调试会话期间,在没有退出并重新启动整个GDB会话的情况下,GDB将继续在之前添加但随后被删除的最后一个整数之后的下一个整数处对断点进行编号。是的,我当然可以重新启动GDB会话,这是一个解决方法,但这不是最佳的,因为它迫使我等待GDB将可执行文件重新加载到核心中,并且可执行文件相当大(是的,这确实是一个问题,但不是我们现在讨论的机器人(。然后,我想在该命令文件中添加命令,禁用除第一个断点之外的所有断点,然后手动使用continue继续到第一个断点,然后重新启用后续断点。然后,一旦添加了这些,我想具体执行命令(它将硬编码到我的湿软件中,永远不会更改(:enable 2-20。因为我想发现一些代码,然后使用disable 2-20命令(在我的湿软件中也是硬编码的(,然后再使用run命令,并无限次重复,所有都不需要重新启动GDB。

附带说明:请不要要求我用GDB的Python编程。是的,我知道怎么做。但我不想。这应该是在没有任何额外Python编码杂务/要求的情况下构建到普通'oleGDB中的东西但是如果你有一个基于Python的方法,我会不情愿地听,所以也可能接受它作为答案。

考虑到您的基本原理中描述的用例,您最好不要尝试将断点分配给特定的数字,而是使用方便变量来跟踪断点数字。

无论何时设置断点,gdb都会将$bpnum设置为断点的编号。您可以将该值保存到另一个方便的var中,以便以后使用。所以你的脚本最终会变成这样:

break foo   # the first breakpoint you always want active
break bar   # the first you want to enable/disable
set $first_interesting = $bpnum
break baz   # some more interesting ones
break box
break bap
set $last_interesting = $bpnum
define ei
enable $first_interesting-$last_interesting
end
document ei
enable the interesting breakpoints
end
define di
disable $first_interesting-$last_interesting
end
document di
disable the interesting breakpoints
end

现在你只需要记住你的潜水器中的命令ei/di。。。

最新更新