我知道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)
答案 0 :(得分:2)
绝对不是在编译时是恒定的,因为通常,函数指针指向的内容在编译时不是恒定的。
如果要在运行时获取它,dladdr
函数可以满足您的要求,但有一个限制,即该函数仅在动态链接时才有效,并且只能在动态符号中找到函数表格(因此不会找到隐藏,静态等功能)。当然,您可以自己滚动一下,查看更详细的调试符号表。