按照设计,在我正在工作的环境中,我不能使用调试器来尝试检测错误,所以当我需要调试功能时,我总是会输出一些信息。
为此,我做了以下事情:
#ifdef DEBUG
#define printd(x) printf x
#else
#define printd(x)
#endif
因此,当我需要打印一些调试信息时,我使用的是printd()
而不是printf()
。
我发现的问题是我需要一个水平系统,在确定的调试级别中可能有重要的消息,但在调试代码的其他部分时则无关紧要。
所以我的问题是,如何实现水平调试系统?我重视简单,我的意思是,我更喜欢我的实际系统,而不是在使用它时需要大量代码或混淆代码。像printd(level, format, ...)
这样的东西会很棒。
答案 0 :(得分:7)
当然,有更优雅的方法可以做到这一点,当然,但这很好用
#ifdef DEBUG
extern int g_debuglevel;
#define printd(level, x) (level <= g_debuglevel) ? 0 : printf x
#else
#define printd(level, x)
#endif
虽然我个人更喜欢这个
#ifdef DEBUG
extern void printdf(level, fmt, ...);
#define printd printfd
#else
#define printd
#endif
其中printdf
是一个测试级别的函数,然后调用传递给fmt和va_args的vprintf
。
答案 1 :(得分:1)
见答案:
这些将为你提供很多指示。
答案 2 :(得分:1)
如果你想要额外的步骤并记录你的级别调试语句,你可以试试log4c。 http://log4c.sourceforge.net/
在上面描述的printfd函数中,您还可以检查环境变量,说DEBUG_LOG_LEVEL以动态打开和关闭日志记录。
我使用类似的技术为嵌入式Linux环境实现轻量级日志记录库。
另外以log4c为例 - http://log4c.sourcearchive.com/documentation/1.2.1/helloworld_8c-source.html 感谢谷歌搜索:)