Debugging Gcc:在编译期间添加自动调试信息
我被要求实现一种gcc插件。基本上,我要做的是添加一些调试代码,以便将调试信息添加到编写的代码中 让我们用一个例子来解释我需要什么。假设我们有以下函数Debugging Gcc:在编译期间添加自动调试信息,debugging,gcc,compilation,gcc-plugins,Debugging,Gcc,Compilation,Gcc Plugins,我被要求实现一种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 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),我期望得到以下输出:
- 称为argn:4的阶乘
- 称为argn:3的阶乘
- 称为argn:2的阶乘
- 称为argn:1的阶乘
- 返回的阶乘值为1
- 返回的阶乘值为2
- 阶乘返回值为6
- 阶乘返回值为24
所以,我需要的是编译代码段中所有函数的输出。我不知道我是否理解了这一点,但关键是我希望避免手动添加调试信息,而是通过编译步骤。有人建议我使用它,我正在第一次尝试使用它,但我想知道是否还有其他选择。欢迎各种意见或建议。您可以使用
宏
:
int factorial(int n){
#ifdef MYMACRO
printf("Factorial called arg n : %d\n", n);
#endif
if (n==0 || n == 1){
#ifdef MYMACRO
printf("Factorial returned with value %d\n", 1);
#endif
return 1;
}
else{
int ret = n * factorial(n-1);
#ifdef MYMACRO
printf("Factorial returned with value %d\n", ret);
#endif
return ret;
}
}
当您要编译它时:
gcc -DMYMACRO myprog.c
当您不显示输出时:
gcc myprog.c
伟大的我知道我可以在每个函数中编写宏,但我想知道是否有一种方法可以构建一种框架,在编译过程中自动在所有函数中添加宏。理想情况下,我不会修改源文件。如果你做了一次,你可以为每个平台或每个任务定制,你只需要放一次你的marcors。