【问题标题】:Should I use logging in a C++ library [closed]我应该在 C++ 库中使用日志记录 [关闭]
【发布时间】:2016-05-31 08:44:42
【问题描述】:

所以我在询问有关该主题的一般建议。我正在开发一个用于数值计算的 C++ 库,但是在开发过程中,我发现它对调试很有用,当有一个标志可以启用某种形式的日志记录以便我可以检查出了什么问题时。我的问题是这方面可接受的标准是什么?我应该为 DEBUG 定义一些宏,这样如果它没有定义就不会发生 DEBUG?我应该使用日志库并记录东西吗?

【问题讨论】:

  • “什么是可接受的标准” - 没有标准。
  • 好吧,让我解释一下 - 什么是被认为是好的设计选择,或者如果不是根据经验给出的任何建议的话。我从来没有做过这样的开发,我真的在寻求一些建议。
  • 主要基于意见:“许多好的问题会根据专家经验产生一定程度的意见,但这个问题的答案往往几乎完全基于意见,而不是事实、参考资料或具体专业知识。”
  • IMO 我认为库应该报告错误、抛出异常并将日志记录留给客户端代码。当然有宏驱动的调试,不会出现在用于测试的库的发布版本中。

标签: c++ debugging logging


【解决方案1】:

正如上面提到的 cmets 所说,您的问题没有一般性的答案 - 这取决于情况和个人意见。我个人主要使用

#ifdef DEBUG
// logging here
#endif

我的代码中的块(结合我的一些专门的DEBUG_PRINT 宏,它们打印附加信息,例如变量的名称和类型等)。然后我只需将-DDEBUG 标志传递给编译器以全局启用所有调试日志记录。 (我通常使用 cmake,所以我在所有调试版本中都默认传递了这个标志)我不知道这是否被认为是一种“可接受的”做法——它对我来说效果很好。

【讨论】:

  • 谢谢,我正在寻找这种建议。您是否使用任何其他调试库,或者您只是使用一些简单定义的调试宏。如果有简单的方法可以做到这一点,我很感兴趣,这样我就可以控制打印哪些类 DEBUG 语句,因为有很多事情正在发生,显示所有 DEBUG 消息可能不太好
  • 这取决于项目。我主要使用这两个宏:#define DEBUG_PRINT(A) std::cout << #A << ": " << (A) << std::endl;#define PRINT_TYPE_INFO(A) std::cout << #A << ": "<< boost::typeindex::type_id_with_cvr< decltype((A)) >().pretty_name() << std::endl; 第一个打印变量的名称和它的值,第二个打印对象的类型。在某些情况下,我还使用boost::logging 系统将调试消息与时间戳等一起附加到某个文件中。使用后者,您可以定义优先级(致命、错误等)并根据它全局启用/禁用消息。
猜你喜欢
  • 2011-06-07
  • 2015-12-21
  • 2015-10-06
  • 2014-10-27
  • 2016-01-18
  • 2012-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多