有一段时间我使用了类似下面的内容来进行调试。
#ifdef DEBUG
# define Log(fmt, ...) printf(("[%s:%d] %s: " fmt "\n"), __FILE__, __LINE__, __PRETTY_FUNCTION__, ##__VA_ARGS__);
#else
# define Log(...)
#endif
这很好用,当我用g++ -DDEBUG=1
之类的东西编译时,我得到了我期望的所有打印件。
我的问题(或挑战)是提出一种方法,即使用运行时命令而不是构建时间(例如./myprocess -d
)进行此调试,而不会使客户端代码复杂化(或根本不改变)
答案 0 :(得分:3)
您应该在运行时声明一个抽象类Logger并创建一个适当的实现(它是Logger的子代)。
答案 1 :(得分:2)
为什么不把它简单化?
extern boolean GLOBAL_LOGGING_ENABLED = false; // you'll need a single definition in any .cpp
#define LOG(fmt, ...) if (GLOBAL_LOGGING_ENABLED) {printf( // etc etc
// at startup read command line and set the flag to true if asked for
或任何类似的东西。