2016-09-07 88 views
3

我想實現回調像函數調用我自己。我已經成功地展開堆棧,並且我的所有返回地址都出現在我的堆棧中。現在我想從這個信息獲取函數名稱,變量名稱輸入到我的函數。此外,我想以編程方式執行此操作,即在運行時,我應該能夠獲得有關在我的程序中調用到現在爲止的所有函數的信息。 讓我們假設編譯時我很好地編譯了我的-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

回答

2

根據手冊頁,請務必在#include <dlfcn.h>之前#define _GNU_SOURCE。這個結構和dladdr()是GNU擴展。