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