有时在GDB中,我想看到使程序达到现在位置的控制流。简单地说,我如何让GDB打印最后执行的x行?
这是反向调试的另一个用例。
-
你应该在某个点开始过程记录和回放:
(gdb) record
-
当您想要查看最后执行的行时,您可以像这样向后移动:
(gdb) reverse-step 3
或
(gdb) reverse-next 3
- 用这个答案https://stackoverflow.com/a/1545732/72178来实际输出下一个N行。
在gdb
中你根本不能(很容易地)做到这一点,因为任何程序的执行跟踪都是不保留的(保留它会非常昂贵:它会减慢执行速度,并且会使用大量资源-内存&磁盘空间).
您可以使用gdb
的backtrace
或bt
命令来显示调用堆栈,即当前函数、调用函数、调用函数的调用函数中的当前指令指针,等等
顺便说一句,如果你真的想要它,你可以使用Python或Guile编写最近的gdb
脚本来给你这样的信息。您当然可以保留整个跟踪(通过围绕step
&backtrace
功能)。