如何实现水平调试系统?

Car*_*rez 3 c debugging

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

为此,我做了以下事情:

#ifdef DEBUG
    #define printd(x) printf x
#else
    #define printd(x)
#endif
Run Code Online (Sandbox Code Playgroud)

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

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

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

Joh*_*ler 7

当然,有更优雅的方法来做到这一点,当然,但这很好

#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传递.

  • 出于良好的维护原因,可以确保始终对代码进行扩展,以便编译器始终对调试代码进行编译。使用`if(0){...调试打印...}`或等效命令。当您下次激活调试时,它会大大减少调试被破坏的机会-这可能比上次更新晚了几年。 (2认同)