如何知道函数的调用者

时间:2013-07-11 12:26:42

标签: c linux function

我想为我的项目实现一个调试代码。在我的项目中,我有很多函数和函数调用。我想以这样的方式编写代码:当调用函数时,它应该打印函数名称及其调用者名称。 有人能给我一个线索吗?

2 个答案:

答案 0 :(得分:5)

libunwind图书馆可以帮助您。但它会相当缓慢,并且在优化二进制文件的情况下可能会产生非常不可预测的结果。

你真的需要在应用程序中实现这个吗?是不是在gdb下使用一些断点运行应用程序?

生成没有大依赖关系的跟踪的另一种方法就是在宏中包含一些函数调用(非常简单的解决方案,它可以做更多)。

#define TRACE(s) { printf("Doing %s\n", #s); s; }

答案 1 :(得分:0)

您可以为您的函数实现一个宏,在调试模式下显示调用者

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define DEBUG_MODE

#ifdef DEBUG_MODE
    int test( int , const char * ) ;
#else
    int test( int ) ;
#endif

#ifdef DEBUG_MODE
    int test( int n , const char * c )
    {
        printf("current: %s caller: %s\n" , __func__ , c ) ;

        return n + 123 ;
    }
    #define test(n) test(n,__func__)

#else
    int test( int n )
    {
        return n + 123 ;
    }
#endif


int main(void)
{
    int n = test(3) ;

    printf("result: %d\n" , n ) ;

    return 0;
}