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

C++ selective print of cerr stream by module names

本文关键字:打印 cerr 选择性 模块 C++      更新时间:2023-10-16

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

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

编辑:事实上,最好的方法是使用日志记录框架(根据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
}