Debugging 在意外进入Gdb后,优雅地将用户自定义函数留在Gdb中
假设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 如果调用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”
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应该可以工作,但是如果您调试优化的代码或缺少调试信息,可能会出现问题。