GDB - 显示最后执行的 n 行

GDB - show last n lines executed

有时在 GDB 中,我想查看使程序到达现在位置的控制流。简单地说,如何让 GDB 打印最后执行的 x 行?

您根本无法在 gdb 中(轻松地)做到这一点,因为 没有 保留任何程序的执行跟踪(并且保留它会非常昂贵:它会减慢很多执行速度,并且会使用大量资源 - 内存和磁盘 space).

然而你可以使用gdbbacktracebt命令来显示call stack,即当前函数中的当前指令指针,调用函数,调用函数的调用函数等等

顺便说一句,如果你真的想要它,你可以使用 Python 或 Guile 编写最近 gdb 的脚本来为你提供此类信息。您当然可以保留整个跟踪(通过围绕 stepbacktrace 功能编写脚本)。

这是 Reverse Debugging 的另一个用例。

  1. 您应该在某个时候开始过程记录和回放:

    (gdb) record
    
  2. 当您想查看最后执行的行时,您可以像 这个:

    (gdb) reverse-step 3
    

    (gdb) reverse-next 3
    
  3. 使用这个答案 实际上 打印接下来执行的 N 行。