在意外插入Gdb后,优雅地在Gdb中保留用户自定义的功能

时间:2016-11-29 03:16:19

标签: debugging gdb

假设main()调用调用bar()的foo()。显然foo()和bar()是由用户/程序员定义的函数。另外,假设在调用者函数的中间调用这些函数。

如果我在Foo()中并且我突然意外地进入bar(),在Gdb中调用之后如何离开bar()并继续Foo()的立即指令?

我尝试使用“finish”命令,但我已经看到它完成了foo()的函数调用并将我返回到main。

只有当程序计数器指向foo()内的“call bar()”指令时,我才使用“ni”命令,但由于它不是库函数,所以它不起作用。我假设“ni”用于跳过库函数。

现在,我唯一的想法是在“call bar()”之后为指令创建一个断点,但我觉得有更好的方法来做到这一点。在那儿?

提前致谢。

1 个答案:

答案 0 :(得分:2)

  

我尝试使用"完成"命令,但我已经看到它完成了foo()' s   函数调用并将我返回main。

如果您在调用foo()时在finish的gdb框架(第1帧)中,则会出现这种情况。尝试切换到bar()的帧(第0帧)并调用finish。在这种情况下,gdb应该只完成一个帧(帧0)。