C++ 用于C+的检测(诊断)库+;

C++ 用于C+的检测(诊断)库+;,c++,debugging,profiling,runtime,instrumentation,C++,Debugging,Profiling,Runtime,Instrumentation,我正在考虑向我的应用程序中添加代码,以收集诊断信息,供以后检查。有没有为此目的而创建的C++库?我试图做的与评测类似,但不一样,因为收集的数据将更多地用于调试而不是评测 编辑: 平台:Linux 要收集的诊断信息:来自应用程序逻辑、各种断言和统计信息的信息。我倾向于使用日志记录来实现此目的。工作起来很有魅力。如果调试就是你正在做的,也许可以使用调试器。GDB脚本非常容易编写和使用。与代码并行维护它们可能是一项挑战 编辑-附加退火注释: 我维护的软件包括一个自制的仪器系统。宏用于对日志消息进行排队

我正在考虑向我的应用程序中添加代码,以收集诊断信息,供以后检查。有没有为此目的而创建的C++库?我试图做的与评测类似,但不一样,因为收集的数据将更多地用于调试而不是评测

编辑:
平台:Linux

要收集的诊断信息:来自应用程序逻辑、各种断言和统计信息的信息。

我倾向于使用日志记录来实现此目的。工作起来很有魅力。

如果调试就是你正在做的,也许可以使用调试器。GDB脚本非常容易编写和使用。与代码并行维护它们可能是一项挑战

编辑-附加退火注释:

我维护的软件包括一个自制的仪器系统。宏用于对日志消息进行排队,配置选项控制要记录的消息类别和要记录的详细程度。线程处理日志队列,将消息刷新到文件,并在文件变得太大时旋转文件(通常是这样)。该系统提供了很多细节,但通常它提供了大量文件,我们的支持工程师必须花几个小时才能找到有用的东西

现在,我只使用GDB诊断了几次错误,但是对于这些问题,它比日志系统有一些很好的优势。GDB脚本允许我收集新的检测数据,而无需添加新的检测线,也无需将软件的新版本部署到客户端。GDB可以从第三方库生成消息(需要在某一点上调试到openssl)。GDB在不使用时不会对软件产生运行时影响。GDB在打印对象内容方面做得相当好;代码级日志记录系统要求在新对象需要记录其状态时写入新宏

缺点之一是我生成的gdb脚本与源代码没有明确的关系;源文件和gdb脚本是独立开发的。理想情况下,对源文件的更改应该影响并更新gdb脚本。一种想法是在代码中放入特殊格式的注释,并让脚本语言传递源文件以生成源文件的调试器脚本文件。最后,让makefile在构建周期中执行此脚本


考虑使用GDB实现此目的的可能性是一个有趣的练习,但我必须承认,可能有更好的代码级解决方案。

如果您在Linux中执行应用程序,您可以在应用程序崩溃(或断言(false)或kill-6)时使用“ulimit”生成内核,稍后,您可以使用GDB进行调试(gdb-c core_file binary_file)并分析堆栈

Salu2


PD.对于评测,请使用gprof

您可能还想查看:

LBCWD是一个线程安全、功能完备的C++调试支持库 它包括基于ostream的调试输出和自定义调试 通道和设备,强大的内存分配调试支持,以及 作为打印源文件的运行时支持:行号信息 和demangled类型名

另外,另一个有趣的日志库是:

Pantheios是一个开源的C/C++日志API库,提供 100%类型安全性、效率和通用性的最佳组合 和可扩展性。它易于使用和扩展,高度可移植(平台) 而且,最重要的是,它支持您的C传统 只为你使用的东西付费


什么操作系统/平台?什么样的诊断?简单日志记录是一种解决方案,尽管它看起来不是我的最佳方法。生成的日志很大,因为收集的数据在检查日志时进行聚合。还有许多事情需要手动完成,即从一开始就必须发明用于收集数据的结构也许有一些框架可以简化事情?