gpt4 book ai didi

c++ - 有什么方法可以在gdb中设置以调用堆栈为条件的断点吗?

转载 作者:行者123 更新时间:2023-12-02 10:39:59 31 4
gpt4 key购买 nike

我正在Linux的gdb 7.1中调试C++。

我有一个函数a(),在代码的很多地方都调用了它。我想在其中设置一个断点,但前提是必须从b()调用它。有什么办法吗?

仅当从b()调用c()时,有什么方法可以这样做吗?

最佳答案

更新:这个问题现在有一个better answer:使用GDB _is_caller便捷功能。

您描述的需求经常出现,通常是在some_utility_fn被频繁调用的情况下,但是您只对来自some_other_fn的调用感兴趣。

您可以使用CVS主干中GDB中新的嵌入式Python支持来编写整个交互过程的脚本。

没有Python,您只能做些限制,但是通常的技术是在a()上禁用禁用的断点,并通过附加到b()的断点的命令启用它。

这是一个例子:

int a(int x)
{
return x + 1;
}

int b()
{
return a(1);
}

int call_a_lots()
{
int i, sum = 0;
for (i = 0; i < 100; i++)
sum += a(i);
}

int main()
{
call_a_lots();
return b();
}

gcc -g t.c
gdb -q ./a.out
Reading symbols from /tmp/a.out...done.
(gdb) break a
Breakpoint 1 at 0x4004cb: file t.c, line 3.
(gdb) disable 1
(gdb) break b
Breakpoint 2 at 0x4004d7: file t.c, line 8.
(gdb) command 2
>silent
>enable 1
>continue
>end
(gdb) run

Breakpoint 1, a (x=1) at t.c:3
3 return x + 1;
(gdb) bt
#0 a (x=1) at t.c:3
#1 0x00000000004004e1 in b () at t.c:8
#2 0x000000000040052c in main () at t.c:21
(gdb) q

瞧:我们已经停止了从 a()调用的 b(),而忽略了之前对 a()的100次调用。

关于c++ - 有什么方法可以在gdb中设置以调用堆栈为条件的断点吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45955286/

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