C 指向函数名、输入参数、?的指令指针?

C 指向函数名、输入参数、?的指令指针?,c,linux,operating-system,gdb,bfd,C,Linux,Operating System,Gdb,Bfd,我正在尝试自己实现类似于回溯的函数调用。我已经成功地展开了堆栈,并且我的堆栈上存在所有返回地址。现在我想从这个信息中获取函数名,变量名输入到我的函数中。我还想以编程的方式来实现这一点,即在运行时,我应该能够获得有关到目前为止在我的程序中调用的所有函数的信息。 让我们假设我在编译时可以使用-g标志进行编译 我试图使用dladdr()函数来获取函数名,但这不起作用。它给我的错误是“错误:未知类型名'Dl_info'”。 以下是我的代码片段: const char * get_func_name(vo

我正在尝试自己实现类似于回溯的函数调用。我已经成功地展开了堆栈,并且我的堆栈上存在所有返回地址。现在我想从这个信息中获取函数名,变量名输入到我的函数中。我还想以编程的方式来实现这一点,即在运行时,我应该能够获得有关到目前为止在我的程序中调用的所有函数的信息。 让我们假设我在编译时可以使用-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;
}
const char*get\u func\u name(void*ip){
Dl_信息;
int ret;
ret=dladdr(ip和信息);
如果(ret<0)
返回NULL;
return info.dli_fname;
}
我试着研究bfd库,但没有很好的示例/教程,有什么帮助吗?
我正在使用ubunutu 14.04

在手册页中,请确保在
包含
之前
#定义"GNU"源代码
。此结构和
dladdr()
,都是GNU扩展