gpt4 book ai didi

c++ - 如何强制GDB从1开始数字断点

转载 作者:行者123 更新时间:2023-12-05 05:37:23 25 4
gpt4 key购买 nike

在我用 delete 删除了所有断点后,如何强制 GDB 从 1 开始对新添加的断点进行编号?命令?

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

TL;DR 基本原理

在复杂的调试 session 期间,我有一个单独的命令文件,我使用 source command返回源代码,该命令的第一行是 delete br。这确实清除了断点。然后,在后续行中,我添加了复杂的断点,但没有从断点 1 重新启动。这意味着,在同一个调试 session 期间,没有退出并再次重新启动整个 GDB session ,GDB将继续为之前添加但随后被删除的最后一个整数 之后 处的下一个整数处的断点编号。是的,我可以重新启动 GDB session ,当然,这是一种解决方法,但这不是最佳选择,因为它迫使我等待 GDB 将可执行文件重新加载到核心中,并且可执行文件非常大(是的,这确实是一个问题,但不是我们现在正在讨论的机器人)。然后,我想向那个命令文件添加命令以禁用所有断点除了第一个断点,然后手动使用continue继续到第一个断点,并且only then 重新启用后续断点。然后,一旦添加了这些,我想专门执行命令(应硬编码到我的 wetware 中,永远不会更改):enable 2-20。因为那时我想发现一些代码,然后使用 disable 2-20 命令(也在我的 wetware 中硬编码),然后是 run 命令,并无限重复,所有无需重新启动 GDB。

旁注:请不要让我用 GDB 的 Python 编程。是的,我知道怎么做。但我不想。这应该是内置到普通 'ole GDB 中的东西,没有任何额外的 Python 编码工作/要求。 但是如果您确实有基于 Python 的方法,我会不情愿地倾听,甚至可能会接受它作为答案。

最佳答案

鉴于您在基本原理中描述的用例,您最好不要尝试将断点分配给特定数字,而是使用 convenience vars跟踪断点编号。

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

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

现在你只需要记住你的wetware中的命令ei/di...

关于c++ - 如何强制GDB从1开始数字断点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73127178/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com