0
我有一个多层次调试实现的代码片段,我不知道如何使它工作。multilevel使用c预处理器宏调试
我已经尝试了一些关于使用do {...} while(0)发布的建议,并且我还试图声明一个名为Debug的全局变量,但它们都不起作用。
我该怎么办?
#include <stdio.h>
#include <stdlib.h>
//#define DEBUG(fmt, ...) fprintf (stderr, fmt, __VA_ARGS__)
#ifdef DEBON
#define DEBUG(level, fmt, ...) \
if (Debug >= level) \
fprintf (stderr, fmt, __VA_ARGS__)
#else
#define DEBUG(level, fmt, ...)
#endif
int process (int i1, int i2)
{
int val;
DEBUG (1, "process (%i, %i)\n", i1, i2);
val = i1 * i2;
DEBUG (3, "return %i\n", val);
return val;
}
int main (int argc, char *argv[])
{
int arg1 = 0, arg2 = 0;
if (argc > 1)
arg1 = atoi (argv[1]);
if (argc == 3)
arg2 = atoi (argv[2]);
DEBUG (1, "processed %i arguments\n", argc -1);
DEBUG (3, "arg1 = %i, arg2 = %i\n" , arg1, arg2);
printf ("%d\n", process (arg1, arg2));
return 0;
}
下面是一个更简单的文件,我把它放在一起看看我能否得到这个工作。没有运气。
#define DEBUG(level, fmt, ...) if (Debug >= level) fprintf (stderr, fmt, __VA_ARGS__)
#include <stdio.h>
int Debug;
int main()
{
int i1 = 1;
int i2 = 2;
DEBUG(3, "process (%i, %i)\n", i1, i2);
}
您应该从原始源复制包含调试定义的枚举。 – martinkunev
除了我分享的内容之外,我没有其他任何东西。我只知道它应该工作的方式是通过使用-d选项执行程序并指定所需的调试级别。即a.out -d3将提供最详细的。我无法弄清楚这个值是如何作为Debug值传递给代码的,以及它为什么不能在我的情况下工作。 – maverick
您引用的选项(-d3)实际上指定了要在可执行文件中包含多少调试信息。使用调试器时可以访问这些信息。你想要的是-DDebug = 3 – martinkunev