我被要求实现一种 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;
}
}
现在我想在执行后得到的是函数的踪迹,我的意思是我需要打印出每次调用中收到的参数值和返回值。例如,如果我执行 factorial(4),我希望得到以下输出:
- 称为 arg n 的阶乘:4
- 称为 arg n 的阶乘:3
- 称为 arg n 的阶乘:2
- 称为 arg n 的阶乘:1
- 返回值为 1 的阶乘
- 返回值为 2 的阶乘
- 返回值为 6 的阶乘
- 阶乘返回值为 24
所以,我需要的是这段代码中所有函数的输出。我不知道我是否让我理解,但关键是我想避免手动添加此调试信息,而是通过编译步骤。有人建议我使用MELT,我第一次尝试使用它,但我想知道是否还有其他选择。欢迎各种意见或建议。