如何实现水平调试系统?

时间:2010-02-02 02:00:35

标签: c debugging

按照设计,在我正在工作的环境中,我不能使用调试器来尝试检测错误,所以当我需要调试功能时,我总是会输出一些信息。

为此,我做了以下事情:

#ifdef DEBUG
    #define printd(x) printf x
#else
    #define printd(x)
#endif

因此,当我需要打印一些调试信息时,我使用的是printd()而不是printf()

我发现的问题是我需要一个水平系统,在确定的调试级别中可能有重要的消息,但在调试代码的其他部分时则无关紧要。

所以我的问题是,如何实现水平调试系统?我重视简单,我的意思是,我更喜欢我的实际系统,而不是在使用它时需要大量代码或混淆代码。像printd(level, format, ...)这样的东西会很棒。

3 个答案:

答案 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 感谢谷歌搜索:)