Указатель на имя функции, входные параметры,?
Я пытаюсь реализовать функцию обратного отслеживания, как вызов функции сам. Я успешно смог развернуть стек, и у меня есть все обратные адреса в моем стеке. Теперь я хочу получить имя функции, имя переменной, введенное в мою функцию из этой информации. Также я хочу сделать это программно, то есть во время выполнения я смогу получить информацию обо всех функциях, которые до сих пор вызывались в моей программе. Давайте предположим, что я хорошо компилирую свой флаг -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, но у меня не было хорошего примера / учебника, какая-нибудь помощь? Я использую убунуту 14.04
1 ответ
На странице man, обязательно #define _GNU_SOURCE
до тебя #include <dlfcn.h>
, Эта структура и dladdr()
являются расширениями GNU.