4

我正在尝试自己实现类似函数调用的回溯。我已经成功地展开堆栈并且我的堆栈上存在所有返回地址。现在我想从这些信息中获取函数名、变量名输入到我的函数中。我也想以编程方式执行此操作,即在运行时我应该能够获取有关到目前为止在我的程序中调用的所有函数的信息。让我们假设我在编译时用 -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

4

1 回答 1

2

根据手册页,请务必#define _GNU_SOURCE在您之前#include <dlfcn.h>。这个结构和dladdr()是 GNU 扩展。

于 2016-09-07T06:57:13.300 回答