1

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

4

2 回答 2

5

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

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

另一种在没有大依赖的情况下生成跟踪的方法是将一些函数调用包装在这样的宏中(非常简单的解决方案,它可以做更多)。

#define TRACE(s) { printf("Doing %s\n", #s); s; }
于 2013-07-11T12:34:29.907 回答
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;
}
于 2013-07-11T12:46:51.133 回答