【问题标题】:Accessing program information that gdb sees in C++访问 gdb 在 C++ 中看到的程序信息
【发布时间】:2023-03-21 12:58:01
【问题描述】:

我有一个在 Linux 上用 C++ 编写的程序,使用 -g 编译。

当我在gdb下运行它时,我可以

1) set breakpoints
2) at those breakpoints, print out variables
3) see the stackframe
4) given a variable that's a structure, print out parts of the structure (i.e. how ddd displays information).

现在,鉴于我的程序是用“-g”编译的——无论如何我可以在我的程序本身中访问这个功能吗?

即鉴于我的程序是用“-g”编译的,有没有一些

std::vector<string> getStackFrame();

我可以调用函数来获取当前执行点的当前堆栈帧吗?

给定一个指向对象的指针和它的类型...我能做吗

std::vector getClassMember(class_name);

?

我意识到默认答案是“不,C++ 不支持那种级别的内省”——但是,回想一下我在 linux 上,我的程序是用“-g”编译的,而 gdb 可以做到,所以显然信息在那里。问题是:是否有一些 API 可以访问它?

编辑:PS Naysers,我很想知道结束这个问题的原因。

【问题讨论】:

  • 为什么有人要关闭一个完全有效的问题?

标签: c++ gdb


【解决方案1】:

调试格式称为dwarf。这应该会提示您在哪里进一步搜索。

Library to read ELF file DWARF debug information

【讨论】:

    【解决方案2】:

    我记得使用 libbfd 从目标文件中获取函数名。它是一个用于读取对象格式的库,也许您还可以使用它来读取其他调试信息。 (说实话我不知道)

    http://www.skyfree.org/linux/references/bfd.pdf

    【讨论】:

      【解决方案3】:

      这一直是 libcwd 的目标,但由于社区缺乏兴趣,我只能从 DWARF 的 .debug_line 部分读取源文件行号信息。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-11-06
        • 1970-01-01
        • 1970-01-01
        • 2011-12-02
        • 2011-08-31
        • 2011-05-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多