访问gdb在C ++中看到的程序信息

时间:2010-03-19 07:44:56

标签: c++ gdb

我有一个用C ++编写的程序,在Linux上,用-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,我很想看到结束这个问题的理由。

3 个答案:

答案 0 :(得分:3)

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

Library to read ELF file DWARF debug information

答案 1 :(得分:2)

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

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

答案 2 :(得分:0)

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