在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