Получить имя функции из таблицы символов во время компиляции - PullRequest
0 голосов
/ 07 марта 2019

Я знаю, что gcc имеет встроенные __function__ и связанные макросы, но из внешней функции, если мне передают указатель на функцию, есть ли способ получить имя этой функции из таблицы символов при компиляции время

В основном:

void* foo(){
    profile_func(foo);
    do_something();
}

profile_func(void* func){
    printf("function is %s\n", NAME_OF(foo));
}

Конечно, я знаю, что таблица символов не является точным представлением функции, но этого достаточно для получения необходимой информации.

Я использую -finstrument_functions, и это будет происходить в связанной функции __cyg_profile_func_enter(). Я удивлен, что не могу найти, что кто-то уже сделал это (если не хватает моего google-fu)

1 Ответ

2 голосов
/ 07 марта 2019

Определенно не таким образом, который является постоянным во время компиляции, потому что в общем то, на что указывает указатель функции, не является постоянным во время компиляции.

Если вы хотите получить его во время выполнения, функция dladdr делает то, что вам нужно, при условии ограничения, что она может работать только при динамическом связывании и может только находить функции в таблице динамических символов (чтобы не было скрытых, статических и т. Д. Функций). Конечно, вы можете свернуть свой собственный, который смотрит на более подробную таблицу символов отладки.

...