c - 在编译时从符号表中获取一个函数名

标签 c gcc profiling

我知道 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 不可用)

最佳答案

绝对不是在编译时保持不变的方式,因为通常情况下,函数指针指向的内容在编译时不是常量。

如果你想在运行时获取它,dladdr 函数会做你想做的事,但受到限制,它只能在动态链接时工作,并且只能在 动态符号表(因此它不会找到隐藏的、静态的等函数)。您当然可以自己动手查看更详细的调试符号表。

关于c - 在编译时从符号表中获取一个函数名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55047671/

相关文章:

检查子字符串是否存在以及存在的位置

c++ - 如何在开发机器上重现缺少 Qt 插件的问题?

c++ - "libstdc++-6..."没有可用的源

flash - Flex Profiler - 替代方案?

java - OpenJDK 1.8 是否支持 JFR?

c - 星星金字塔

c - 将标准输入的整数输入插入链表

c - 请解释一下行为

c++ - 禁用赋值运算符优化的 GCC 选项是什么

c++ - 使用 pugixml 解释程序的内存消耗