GDB:仅在命中不同断点后才中断的断点

问题描述 投票:0回答:3

假设我创建了两个断点,2 和 3。断点 3 位于第 10 行,该断点在程序中被频繁执行。如何配置 3 仅在 2 被击中一次后才中断?

gdb
3个回答
13
投票

举个简单的例子:

void bp2() { };
void bp1() { bp2(); }

int main()
{
  bp2();
  bp1();
  return 0;
}

我们可以创建一个断点,仅当通过 bp1 调用 bp2 时才会触发,如下所示:

break bp1
break bp2

commands 1
silent
enable 2
c
end

commands 2
disable 2
end

disable 2

0
投票

我想补充一点,您还可以在另一个断点的

command
中创建一个新断点。

b main.c:12
command 1
  b main.c:10
  disable 1
end

但是,我建议一般使用 @matt 的 方法,因为它更干净,并且减少了混乱的空间。


0
投票

谷歌引导我来到这里。 @user35915's的回答对我帮助很大,在这里添加了详细信息。希望这可以帮助其他人。

设置这两个命令

command 2
>enable b 3
>c
command 3
>disable b 3
>c

也就是说,当2被击中时,启用3,然后继续。当击中 3 时,禁用 3,然后继续。

后一个命令中的

disable b 3
确保启用时最多击中 3 次。

continue
附加到命令中可以让我免于手动输入
c
。如果需要一些详细的观察,我会在
c
之前添加命令,甚至删除
c
(以在那里停止程序)。像这样,

command 3
>disable b 3
>bt
>c
© www.soinside.com 2019 - 2024. All rights reserved.