如何让GDB执行';列表';每走一步之后?

如何让GDB执行';列表';每走一步之后?,gdb,Gdb,我可以使用gdb,但每次我想查看源代码的位置时,我都必须给出“list”命令 (gdb) next 351 int right = get_variable(right_token, right_id); (gdb) list 346 op = "<>"; 347 right_id = parse_id_or_crash(); 348 } 349 Token * right_token = tokens[parser_index

我可以使用gdb,但每次我想查看源代码的位置时,我都必须给出“list”命令

(gdb) next
351     int right = get_variable(right_token, right_id);
(gdb) list
346         op = "<>";
347         right_id = parse_id_or_crash();
348     }
349     Token * right_token = tokens[parser_index - 1];
350     int left = get_variable(left_token, left_id);
351     int right = get_variable(right_token, right_id);
352     if (op == "<")
353         return left < right;
354     if (op == ">")
355         return left > right;
(gdb)下一步
351 int right=get_变量(right_令牌,right_id);
(gdb)清单
346 op=“”;
347 right_id=parse_id_或_crash();
348     }
349令牌*右令牌=令牌[解析器索引-1];
350 int left=get_变量(left_令牌,left_id);
351 int right=get_变量(right_令牌,right_id);
352如果(op==“”)
355返回左>右;

如果gdb能在每个步骤后自动列出源代码,那就太好了。如果gdb能指出我在源代码中的位置(比如用“->”之类的符号),那也太好了。一次只看到一行代码让我有点幽闭恐惧症。

您可以使用GDB宏来实现这一点:

(gdb) def n
Type commands for definition of "n".
End with a line saying just "end".
>next
>list
>end

如果您希望箭头指向当前行,则可以考虑使用GDB前端(例如在Emacs中)。

使用GDB TUI模式


您可以通过键绑定进入或离开TUI模式。

define hook-stop
  l
end
文件:

此外,还存在一个伪命令“stop”。定义('hook-stop')使关联的命令在程序中每次停止执行时执行:在运行断点命令之前,打印显示或打印堆栈帧

从以下方面学习:

突出显示当前行

这是唯一一个完全取代buggy
-tui
模式的东西

如果没有Python脚本,目前无法实现:

对于Python脚本,我目前正在使用:

另见: