gdb:将“next”应用于所选框架而不是最内框架

时间:2015-12-17 12:57:43

标签: c gdb

gdb中,当您运行next命令时。它适用于最内层的帧而不是选定的帧。如何要求gdb在所选框架的下一行中断?

例如:

在子功能中设置断点:

(gdb) b subfunc
Breakpoint 1 at 0x400f09: file prog.c, line 94.
(gdb) c
Continuing.

Breakpoint 1 at 0x400f09: file prog.c, line 94.
94      void subfunc() {

更改所选框架:

(gdb) up
#1  0x0000000000400f7e in main (argc=1, argv=0x7fffffffe468) at prog.c:70
70          subfunc();

我想停在prog.c的第71行:

(gdb) n
95          i = 0;

...但它会停止prog.c的第95行。

3 个答案:

答案 0 :(得分:6)

我终于找到了我想要的东西。 advance允许继续直到特定行。因此advance +1完成了这项工作。它可以缩写为adv +1

答案 1 :(得分:1)

您可以使用temporary breakpoint offset from the current line in the selected frame

执行此操作
tbreak +1
continue

缩写:

tb +1
c

答案 2 :(得分:0)

既然问题是

<块引用>

gdb:将“next”应用到选定的框架而不是最里面的框架

接受的答案是“advance + 1”不太正确,只有在可以命中所选帧的下一行时才有效。

<块引用>

advance -- 继续程序到给定位置(与 break 命令的 args 形式相同)

一个通用的解决方案是: 切换到选中帧的次帧,完成后步进程序。

frame x-1
fin
n

其中 x 是选定的帧。

参考:

  • finish -- 执行直到选定的堆栈帧返回
  • 下一步 -- 步骤程序
  • frame -- 选择并打印堆栈帧