C gdb:apply";“下一步”;到选定的帧而不是最里面的帧

C gdb:apply";“下一步”;到选定的帧而不是最里面的帧,c,linux,gdb,C,Linux,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 0x

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行。您可以通过以下方法执行此操作:

缩写:

tb +1
c

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

,因为问题是

gdb:将“下一步”应用于选定帧,而不是最里面的帧

公认的答案是“前进+1”不太正确,它只有在选定帧的下一行可能被击中时才起作用

前进--将程序继续运行到给定位置(与break命令的args格式相同)

一般的解决办法是: 切换到所选帧的下一帧,完成并单步执行程序

frame x-1
fin
n
其中x是选定的帧

参考:

  • finish--执行,直到所选堆栈帧返回
  • 下一步计划
  • 框架——选择并打印堆栈框架

提供更多信息。对于调试,只使用
-O0
-Og
(首选)优化。还不错,但是
adv+1
打字更快。。。。如果再次执行,则
adv+1
将按预期工作(按
frame x-1
fin
n