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