GDB - 显示最后n行执行

时间:2015-09-07 06:38:09

标签: c debugging gdb control-flow

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

2 个答案:

答案 0 :(得分:4)

这是Reverse Debugging的另一个用例。

  1. 您应该在某个时刻开始流程记录和重播:

    (gdb) record
    
  2. 当你想看到最后执行的行时,你可以像往返一样 这样:

    (gdb) reverse-step 3
    

    (gdb) reverse-next 3
    
  3. 实际使用此答案https://stackoverflow.com/a/1545732/72178 打印下N行。

答案 1 :(得分:2)

你在gdb中根本无法做到这一点(很容易),因为任何程序的执行跟踪都不保留(并且保持它非常昂贵:它会减慢很多执行,它将使用大量资源 - 内存和磁盘空间。

然而,您可以使用backtrace的{​​{1}}或bt命令来显示call stack,这是当前函数中的当前指令指针,即调用函数,调用函数的调用函数,等等

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