我正在尝试像函数调用一样实现回溯。我已经成功地展开了堆栈,并且我的堆栈上有所有返回地址。现在我想从这个信息中获取函数名称,变量名称输入到我的函数。此外,我想以编程方式执行此操作,即在运行时我应该能够获得有关在我的程序中直到现在已调用的所有函数的信息。 让我们假设编译时我可以用-g标志编译。
我正在尝试使用dladdr()函数来获取函数名称,但这不起作用。它给了我错误“错误:未知类型名称'Dl_info'”。 这是我的代码片段:
const char * get_func_name(void *ip){
Dl_info info;
int ret;
ret = dladdr(ip,&info);
if(ret < 0)
return NULL;
return info.dli_fname;
}
我尝试过研究bfd库,但没有很好的示例/教程,任何帮助? 我正在使用ubunutu 14.04
答案 0 :(得分:2)
根据手册页,请务必#define _GNU_SOURCE
之前#include <dlfcn.h>
。这个结构和dladdr()
是GNU扩展。