C ++按模块名称选择性打印cerr流

时间:2012-06-18 11:20:17

标签: c++ debugging

假设我们在20个模块中有一个30 K行代码数据库:每个* .cpp和* .h文件。在开发过程中,源代码使用局部变量进行修饰,通过cerr查找。有时它有与gdb相同的优点,有时候没有。 人们希望保持cerr流清洁/静默,并且只能从他希望的模块中获取对cerr的写入。我如何:

1)区分写入cerr,它们包含来自哪个模块的信息? 2)为构建二进制文件添加cmd行选项,它将指定允许哪些模块写入cerr(我想看到的那些)。

1 个答案:

答案 0 :(得分:1)

编辑:事实上,最好的方法是使用日志框架(根据Joachim Pileborg的评论)。如果您绝对必须依赖于您所拥有的代码,但希望将其结束,则下面的内容才真正适用。

执行此操作的最佳方法是使用预处理器,使用#ifdef指令选择要构建的代码。

例如

#ifdef CERR_DEBUG_BUILD_MODULE_1
cout << __FILE__ << ":" << __LINE__ << "\tCERR DEBUG OUTPUT" << endl;
#endif

该声明可能更好地包含在一个小宏中:

#ifdef CERR_DEBUG_BUILD_MODULE_1
#define LOG( x ) cerrLogPrint( x, __FILE__, __LINE__ )
#else
#define LOG( x )
#endif

其中

void cerrLogPrint( const char* const log, const char* filename, unsigned int line)
{
     //PRINT
}
相关问题