有时在GDB中,我希望看到控制流程将程序带到现在的位置。简单地说,如何让GDB打印最后执行的x行?
答案 0 :(得分:4)
这是Reverse Debugging的另一个用例。
您应该在某个时刻开始流程记录和重播:
(gdb) record
当你想看到最后执行的行时,你可以像往返一样 这样:
(gdb) reverse-step 3
或
(gdb) reverse-next 3
答案 1 :(得分:2)
你在gdb
中根本无法做到这一点(很容易),因为任何程序的执行跟踪都不保留(并且保持它非常昂贵:它会减慢很多执行,它将使用大量资源 - 内存和磁盘空间。
然而,您可以使用backtrace
的{{1}}或bt
命令来显示call stack,这是当前函数中的当前指令指针,即调用函数,调用函数的调用函数,等等
gdb
脚本来为你提供这样的信息。您当然可以保留整个跟踪(通过编写gdb
& step
功能的脚本。)