C - GDB:将"next"应用于所选帧而不是最里面的帧

  • 本文关键字:GDB next 应用于 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  0x0000000000400f7e in main (argc=1, argv=0x7fffffffe468) at prog.c:70
70          subfunc();

我想在prog.c:的71线停车

(gdb) n
95          i = 0;

但它使CCD_ 4的线95停止。

我终于找到了我想要的。CCD_ 5允许继续直到特定行。这样advance +1就完成了任务。可以缩写为adv +1

因为问题是

gdb:将"next"应用于所选帧,而不是最内帧

公认的答案是";前进+1";不太正确,只有当选定帧的下一行可以命中时才有效。

advance-将程序继续到指定位置(与中断命令的args形式相同)

一般的解决方案是:切换到所选帧的下一帧,完成该帧并逐步执行程序。

frame x-1
fin
n

其中x是所选帧。

参考:

  • finish—执行直到所选堆栈帧返回
  • next—步骤程序
  • frame--选择并打印堆栈框架

您可以使用从所选帧中的当前行偏移的临时断点来执行此操作:

tbreak +1
continue

缩写:

tb +1
c

最新更新