在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行。
答案 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 是选定的帧。
参考: