gcc:在编译过程中添加自动调试信息



我被要求实现一种gcc插件。基本上我要做的就是添加一些调试代码,以便将调试信息添加到编写的代码中。

让我们用一个例子来解释我需要什么。假设我们有以下函数

int factorial(int n){
  //printf("Factorial called arg n : %d", n);
  if (n==0 || n == 1){
    //printf("Factorial returned with value %d", 1);
    return 1;
  }
  else{
    int ret = n * factorial(n-1);
    //printf("Factorial returned with value %d", ret);
    return ret;
  }
}

现在我想在执行后得到的是函数的跟踪,我的意思是我需要打印出每次调用中收到的参数值和返回值。例如,如果我执行阶乘(4),我希望得到以下输出:

  • 阶乘称为参数 n : 4
  • 阶乘称为 arg n : 3
  • 阶乘称为 arg n : 2
  • 阶乘称为 arg n : 1
  • 值为 1 的阶乘返回
  • 值为 2 的阶乘返回
  • 值为 6 的阶乘返回
  • 阶乘返回值为 24

因此,我需要的是编译的代码段中所有函数的输出。我不知道我是否让我明白了,但关键是我想避免手动添加此调试信息,而是通过编译步骤添加。有人建议我使用 MELT,我正在第一次尝试使用它,但我想知道是否还有其他选择。欢迎各种意见或建议。

您可以使用

MACROs

int factorial(int n){
        #ifdef MYMACRO
        printf("Factorial called arg n : %dn", n);
        #endif
        if (n==0 || n == 1){
                #ifdef MYMACRO
                printf("Factorial returned with value %dn", 1);
                #endif
                return 1;
        }
        else{
                int ret = n * factorial(n-1);
                #ifdef MYMACRO
                printf("Factorial returned with value %dn", ret);
                #endif
                return ret;
        }
}

当你想编译它时:

gcc -DMYMACRO myprog.c

当您不显示输出时:

gcc myprog.c

相关内容

  • 没有找到相关文章

最新更新