マルチレベルデバッグの実装にはコードの抜粋がありますが、これを動作させる方法はわかりません。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が最も冗長になります。この値がどのようにデバッグ値としてコードに渡されるのか、私の場合はなぜ機能しないのかわかりません。 – maverick
あなたが引用したオプション(-d3)は、実際に実行可能ファイルに含めるデバッグ情報の量を指定します。このような情報は、デバッガを使用するとアクセス可能です。代わりにあなたがしたいものは-DDebug = 3 – martinkunev