我有一个用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,我很想看到结束这个问题的理由。答案 0 :(得分:3)
调试格式称为dwarf。这应该会给你提示在哪里进一步搜索。
答案 1 :(得分:2)
我记得使用libbfd从目标文件中获取函数名称。它是一个用于读取对象格式的库,也许您也可以使用它读取其他调试信息。 (我不知道老实说)
答案 2 :(得分:0)
这一直是 libcwd 的目标,但由于社区缺乏兴趣,我只能从 DWARF 的 .debug_line 部分读取源文件行号信息。