Linux上 怎么获取函数调用者的名称

时间:2022-10-01 16:35:27
rt:
如:
int fun(){};  //怎么在fun中输出调用fun()函数的函数名称

int main()
{
fun();
}

急求!

8 个解决方案

#1


有个宏定义 


 __FUNCTION__
这个宏定义就是保存的函数的名称


#2


      
 void *array[2];
       size_t size;
       char **strings;
       size_t i;
     
       size = backtrace (array, 2);
       strings = backtrace_symbols (array, size);
     
        printf ("调用者%s\n", strings[1]);
     
        free (strings);

在fun中添加上面这段代码就可以输出调用fun函数的函数名称
要加上#include <execinfo.h>
并且编译时要加上-rdynamic选项

#3


不错,学习了,谢谢2楼的同学。
在2楼的基础上稍微改了一下:
#include <stdio.h>
#include <execinfo.h>
#include <stdlib.h>

void f()
{
       void *array[16];
       size_t size;
       char **strings;
       size_t i;

       size = backtrace (array, 16);
       strings = backtrace_symbols (array, size);

       for (i=0; i<size; i++)
           printf ("%s\n", strings[i]);
       printf ("\n");

       free (strings);
}

void f1()
{
    f();
}

void f2()
{
    f1();
}

int main()
{
    f();
    f1();
    f2();
    return 0;
}

#4


很好很强大...

#5


相当于查看了函数的调用堆栈,对吧

#6


2楼很强大

#7



int fun( void )
{
        printf( "Function name is: %s\n", __FUNCTION__ );

        return 0;
}

#8


类似的宏还有:
__FILE__ :源文件名称(字符串)
__LINE__ :所在源文件的行号(整数)
__DATE__ :含有形式为月/日/年的串,表示源文件被翻译到代码时的日期(字符串)
__TIME__ :包含程序编译的时间 (字符串)

#1


有个宏定义 


 __FUNCTION__
这个宏定义就是保存的函数的名称


#2


      
 void *array[2];
       size_t size;
       char **strings;
       size_t i;
     
       size = backtrace (array, 2);
       strings = backtrace_symbols (array, size);
     
        printf ("调用者%s\n", strings[1]);
     
        free (strings);

在fun中添加上面这段代码就可以输出调用fun函数的函数名称
要加上#include <execinfo.h>
并且编译时要加上-rdynamic选项

#3


不错,学习了,谢谢2楼的同学。
在2楼的基础上稍微改了一下:
#include <stdio.h>
#include <execinfo.h>
#include <stdlib.h>

void f()
{
       void *array[16];
       size_t size;
       char **strings;
       size_t i;

       size = backtrace (array, 16);
       strings = backtrace_symbols (array, size);

       for (i=0; i<size; i++)
           printf ("%s\n", strings[i]);
       printf ("\n");

       free (strings);
}

void f1()
{
    f();
}

void f2()
{
    f1();
}

int main()
{
    f();
    f1();
    f2();
    return 0;
}

#4


很好很强大...

#5


相当于查看了函数的调用堆栈,对吧

#6


2楼很强大

#7



int fun( void )
{
        printf( "Function name is: %s\n", __FUNCTION__ );

        return 0;
}

#8


类似的宏还有:
__FILE__ :源文件名称(字符串)
__LINE__ :所在源文件的行号(整数)
__DATE__ :含有形式为月/日/年的串,表示源文件被翻译到代码时的日期(字符串)
__TIME__ :包含程序编译的时间 (字符串)