【问题标题】:GDB backtrace :Find total number of frameGDB回溯:查找总帧数
【发布时间】:2012-09-05 16:57:23
【问题描述】:

我正在尝试使用核心文件中的宏来查找堆栈的开始和结束。为了完成同样的任务,我试图从 last 和 first frame 中找到 esp 值。相同的差异会给我正在使用的堆栈大小。

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

我们是否有另一种方法来查找堆栈的开始和堆栈的结束? 谢谢

【问题讨论】:

    标签: gdb


    【解决方案1】:

    你可以使用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 生成的转换文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-30
      • 1970-01-01
      相关资源
      最近更新 更多