Debugging 在意外进入Gdb后,优雅地将用户自定义函数留在Gdb中

Debugging 在意外进入Gdb后,优雅地将用户自定义函数留在Gdb中,debugging,gdb,Debugging,Gdb,假设main()调用foo(),foo()调用bar()。显然,foo()和bar()是由用户/程序员定义的函数。也就是说,这些函数在调用方函数的中间被调用。 如果我在Foo()中,突然意外地进入了bar(),那么在Gdb中调用之后,如何离开bar()并继续Foo()的即时指令 我试图使用“finish”命令,但我看到它完成foo()的函数调用并返回main 此外,仅当程序计数器指向foo()中的“call bar()”指令时,我才使用“ni”命令,但这不起作用,因为它不是库函数。我假设“ni”

假设main()调用foo(),foo()调用bar()。显然,foo()和bar()是由用户/程序员定义的函数。也就是说,这些函数在调用方函数的中间被调用。 如果我在Foo()中,突然意外地进入了bar(),那么在Gdb中调用之后,如何离开bar()并继续Foo()的即时指令

我试图使用“finish”命令,但我看到它完成foo()的函数调用并返回main

此外,仅当程序计数器指向foo()中的“call bar()”指令时,我才使用“ni”命令,但这不起作用,因为它不是库函数。我假设“ni”用于跳过库函数

目前,我唯一的想法是在“call bar()”之后为指令创建一个断点,但我觉得有更好的方法可以做到这一点。有吗

提前谢谢

我试图使用“finish”命令,但我看到它是finish foo() 函数调用并将我返回到main

如果调用
finish
时处于
foo()
的gdb帧(第1帧),则这是正确的。尝试切换到
bar()
的帧(第0帧)并调用
finish
。在这种情况下,gdb应该只完成一帧(第0帧)

我试图使用“finish”命令,但我看到它是finish foo() 函数调用并将我返回到main


如果调用
finish
时处于
foo()
的gdb帧(第1帧),则这是正确的。尝试切换到
bar()
的帧(第0帧)并调用
finish
。在这种情况下,gdb应该只完成一帧(第0帧)。

finish
对我来说很好。甚至GDB手册上也说“继续运行,直到选定堆栈帧中的函数返回。”关于
Finish
commandFinish应该可以工作,但是如果您调试优化的代码或缺少调试信息,可能会出现问题。
Finish
对我来说很好。甚至GDB手册也说“继续运行,直到所选堆栈帧中的函数返回。”关于
Finish
commandFinish应该可以工作,但是如果您调试优化的代码或缺少调试信息,可能会出现问题。