2016-02-18 29 views
-2

所以我在询问有关该主题的一般建议。我正在开发一个用于数值计算的C++库,但是通过开发,我发现它在调试时很有用,因为有一个标志可以启用某种形式的日志记录,以便我可以检查发生了什么问题。我的问题是什么是可接受的标准呢?我应该为DEBUG定义一些宏,以便如果它没有定义没有DEBUG发生?我应该使用日志库和日志?我应该在C++库中使用日志记录

+0

_“这是什么可接受的标准”_ - 这没有标准。 –

+0

好的,让我解释一下 - 什么是被认为是好的设计选择,或者好,如果不是任何建议,你会根据经验给予。我从来没有做过这样的发展,我真的在寻找一些建议。 –

+0

主要基于观点:“许多优秀的问题都基于专家经验产生了某种程度的意见,但对这个问题的回答往往基于意见而非事实,参考或具体专业知识。” –

回答

1

正如上面的评论所提到的,你的问题没有一般的答案 - 这取决于情况以及个人意见。我个人主要使用

#ifdef DEBUG 
// logging here 
#endif 

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

+0

谢谢,我正在寻找这种建议。你使用任何其他调试库,或者你只是使用一些简单的定义调试宏。我很感兴趣,如果有这样做的简单方法,以便我可以控制打印哪些类DEBUG语句,因为有很多事情正在进行,显示所有DEBUG消息可能不是太好 –

+0

它取决于项目。我主要使用这两个宏:'#define DEBUG_PRINT(A)std :: cout << #A <<“:”<<(A)<< std :: endl;'和'#define PRINT_TYPE_INFO(A)std: :cout << #A <<“:”<< boost :: typeindex :: type_id_with_cvr ()。pretty_name()<< std :: endl;'第一个输出变量的名称,它是值和第二个对象的类型。在某些情况下,我还使用'boost :: logging'系统将调试消息与时间戳一起附加到某个文件中。对于后者,您可以根据它定义优先级(致命错误等)并全局启用/禁用消息。 –

相关问题