按照设计,在我正在工作的环境中,我不能使用调试器来尝试检测错误,所以当我需要调试功能时,我总是输出一些信息.
为此,我做了以下事情:
#ifdef DEBUG
#define printd(x) printf x
#else
#define printd(x)
#endif
Run Code Online (Sandbox Code Playgroud)
因此,当我需要打印一些调试信息时,我会使用printd()而不是printf().
我发现的问题是我需要一个水平系统,在确定的调试级别中有一些消息可能很重要,但在调试代码的其他部分时则无关紧要.
所以我的问题是,我如何实现一个水平的调试系统?我重视简单,我的意思是,我更喜欢我的实际系统,而不是在使用它时需要大量代码或混淆代码.类似的东西printd(level, format, ...)会很棒.
当然,有更优雅的方法来做到这一点,当然,但这很好
#ifdef DEBUG
extern int g_debuglevel;
#define printd(level, x) (level <= g_debuglevel) ? 0 : printf x
#else
#define printd(level, x)
#endif
Run Code Online (Sandbox Code Playgroud)
虽然我个人更喜欢这个
#ifdef DEBUG
extern void printdf(level, fmt, ...);
#define printd printfd
#else
#define printd
#endif
Run Code Online (Sandbox Code Playgroud)
where printdf是一个测试级别的函数,然后调用vprintffmt和va_args传递.