GDB-断点如何以最佳方式禁用自身?

GDB-断点如何以最佳方式禁用自身?,gdb,Gdb,例如,如果我有一个断点,其编号为8。如果希望在命中断点后禁用该断点,请在命令8中编写以下命令: disable 8 end 如果我删除了一个数量小于8的断点,然后在退出gdb之前将断点保存在一个文件中,则重新打开gdb并恢复断点文件,断点8的数量将更改,其命令将禁用错误的断点 是否有一个变量我可以使用,使断点的命令可以禁用自己?我指的是一些变量,比如$bpnum,如果您同意删除断点,而不是禁用断点,那么您有tbreak(临时断点),它会在断点被击中时立即擦除断点 如果希望禁用它,可以使用条件断

例如,如果我有一个断点,其编号为8。如果希望在命中断点后禁用该断点,请在
命令8
中编写以下命令:

disable 8
end
如果我删除了一个数量小于8的断点,然后在退出gdb之前将断点保存在一个文件中,则重新打开gdb并恢复断点文件,断点8的数量将更改,其命令将禁用错误的断点


是否有一个变量我可以使用,使断点的命令可以禁用自己?我指的是一些变量,比如
$bpnum

,如果您同意删除断点,而不是禁用断点,那么您有tbreak(临时断点),它会在断点被击中时立即擦除断点

如果希望禁用它,可以使用条件断点和调试器方便变量。接下来,您可以执行以下操作:

set $foo = 0
break 5
condition $foo++ < 1
设置$foo=0
打破5
条件$foo++<1
或者,通过命令:

break <line_num>
set $n $bpnum
commands
disable $n
end
中断
设置$n$bpnum
命令
禁用$n
结束
不幸的是,这两种解决方案都无法扩展,除非您愿意按特定顺序设置断点。在这种情况下,您可以简单地执行以下操作:

break <line_num>
commands
disable 1
end
中断
命令
禁用1
结束

其中1是第一个断点,第二个断点应该是2,以此类推。

实际上,有一个,但它会告诉您最近的断点的编号。如果您能够以某种方式获得当前行的编号,则可以使用删除该行中的断点。
frame
命令可以告诉您这一点,但它不会返回行号,因此您可以使用
clear
命令。也许(可能?)您可以使用python API来实现这一点。我不想澄清。我只想禁用
$bpnum
告诉上次添加的断点的数目,而不是上次命中的断点的数目,对吗?