在编译时从符号表中获取函数名
Posted
技术标签:
【中文标题】在编译时从符号表中获取函数名【英文标题】:Get a function name from the symbol table at compile time 【发布时间】:2019-03-07 15:42:37 【问题描述】:我知道 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】:在编译时绝对不是恒定的,因为一般来说,函数指针指向的东西在编译时不是恒定的。
如果你想在运行时获取它,dladdr
函数会做你想做的事,但受限于它只能在动态链接时工作并且只能在 动态符号表中找到函数 (所以它不会找到隐藏的、静态的等函数)。您当然可以自己动手查看更详细的调试符号表。
【讨论】:
当然,这是有道理的。 dladdr 会在动态链接库中工作吗? 是的,应该。以上是关于在编译时从符号表中获取函数名的主要内容,如果未能解决你的问题,请参考以下文章