GDB回溯:查找帧的总数

时间:2012-09-05 16:57:24

标签: gdb

我试图使用核心文件中的宏来查找堆栈的开始和结束。为了实现同样的目的,我试图从最后一帧和第一帧中找到esp值。相同的差异将给我使用的堆栈大小。

我们有办法找到堆栈中的帧数吗? bt给我所有的框架。从第0帧我可以找到堆栈的顶部?  我们有办法找到最后一个帧号吗?

我们是否有其他方法可以找到堆栈的开头和堆栈的结尾? 感谢

1 个答案:

答案 0 :(得分:6)

您可以使用bt -1找到最外框的帧编号:

(gdb) bt -1
#9  0x0000000000464c45 in main (argc=<optimized out>, argv=<optimized out>)
    at ../../binutils-gdb/gdb/gdb.c:32

您可以看到最外面的框架是#9

然而,编写脚本有点痛苦。例如,您无法使用frame -1来选择该框架。

此时您有两种选择。

一种选择是使用gdb Python API迭代帧并做任何你喜欢的事情。如果可以使用,这是最简单的路线。 Python API已记录并易于使用;在这种情况下,您将主要对gdb.Frame代码感兴趣。

如果你不能使用Python,你可以使用传统的,可怕的gdb hack使用set loggingbt -1的输出写入文件;然后shell将此文件的内容重写为有效的gdb命令(如frame 9);最后source生成的转换文件。