GDB - 显示最后执行的 n 行
GDB - show last n lines executed
有时在 GDB 中,我想查看使程序到达现在位置的控制流。简单地说,如何让 GDB 打印最后执行的 x 行?
您根本无法在 gdb
中(轻松地)做到这一点,因为 没有 保留任何程序的执行跟踪(并且保留它会非常昂贵:它会减慢很多执行速度,并且会使用大量资源 - 内存和磁盘 space).
然而你可以使用gdb
的backtrace
或bt
命令来显示call stack,即当前函数中的当前指令指针,调用函数,调用函数的调用函数等等
顺便说一句,如果你真的想要它,你可以使用 Python 或 Guile 编写最近 gdb
的脚本来为你提供此类信息。您当然可以保留整个跟踪(通过围绕 step
和 backtrace
功能编写脚本)。
这是 Reverse Debugging 的另一个用例。
您应该在某个时候开始过程记录和回放:
(gdb) record
当您想查看最后执行的行时,您可以像
这个:
(gdb) reverse-step 3
或
(gdb) reverse-next 3
- 使用这个答案 实际上
打印接下来执行的 N 行。
有时在 GDB 中,我想查看使程序到达现在位置的控制流。简单地说,如何让 GDB 打印最后执行的 x 行?
您根本无法在 gdb
中(轻松地)做到这一点,因为 没有 保留任何程序的执行跟踪(并且保留它会非常昂贵:它会减慢很多执行速度,并且会使用大量资源 - 内存和磁盘 space).
然而你可以使用gdb
的backtrace
或bt
命令来显示call stack,即当前函数中的当前指令指针,调用函数,调用函数的调用函数等等
顺便说一句,如果你真的想要它,你可以使用 Python 或 Guile 编写最近 gdb
的脚本来为你提供此类信息。您当然可以保留整个跟踪(通过围绕 step
和 backtrace
功能编写脚本)。
这是 Reverse Debugging 的另一个用例。
您应该在某个时候开始过程记录和回放:
(gdb) record
当您想查看最后执行的行时,您可以像 这个:
(gdb) reverse-step 3
或
(gdb) reverse-next 3
- 使用这个答案 实际上 打印接下来执行的 N 行。