在GDB中,如何在函数结束时停止(而不退出它)? 请考虑以下代码: main() { .... retval = func(); }

在GDB中,如何在函数结束时停止(而不退出它)? 请考虑以下代码: main() { .... retval = func(); },gdb,Gdb,假设我在给定函数上放置了一个断点: gdb$ b func 现在,该断点被命中&我在函数func()中执行“finish”: 我的问题是: 执行“finish”会让我回到main(),这里: 我想在func()的末尾停止,而不退出func() 有人能推荐一些通用的方法(与func()中的代码行数无关)来实现这一点吗 谢谢。没有办法。编译器通常不会发出所需的debuginfo(这方面有一个GCC错误);即使他们读了,gdb也不会读;即使它这样做了,您也需要新的语法才能将其指定为断点位置 我不记得

假设我在给定函数上放置了一个断点:

gdb$ b func
现在,该断点被命中&我在函数func()中执行“finish”:

我的问题是:

执行“finish”会让我回到main(),这里:

我想在func()的末尾停止,而不退出func()

有人能推荐一些通用的方法(与func()中的代码行数无关)来实现这一点吗


谢谢。

没有办法。编译器通常不会发出所需的debuginfo(这方面有一个GCC错误);即使他们读了,gdb也不会读;即使它这样做了,您也需要新的语法才能将其指定为断点位置


我不记得是否有gdb错误,但应该有。

您可以键入两个命令“s”和“finish”

s-进入func()函数


finish-finish函数并返回到外部func()。在这种情况下,在main()

func()
的最后一行设置断点?不确定它是否符合独立于行数的条件。谢谢,但我正在尝试通过.gdbinit创建一个自动化的解决方案,以适用于任何数量的函数。不能在最后一行设置断点。有一种简单的方法可以做到这一点,但可以始终使用
disas
并在
ret
指令上设置断点。我想它甚至可以自动执行。然而,这不太可能得到他喜欢的结果,因为ret将在尾声之后,因此大多数变量将超出范围。我认为在计算返回值之后,但在结束语之前设置断点对用户更有用。只要能做到这一点。
gdb$ fin
retval = func();