自定义调试printf在运行时使用

时间:2010-11-22 17:37:20

标签: c++ debugging runtime printf

有一段时间我使用了类似下面的内容来进行调试。

#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)进行此调试,而不会使客户端代码复杂化(或根本不改变)

2 个答案:

答案 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

或任何类似的东西。