我正在考虑将代码添加到我的应用程序中,以收集诊断信息以供以后检查。是否为此目的创建了任何 C++ 库?我正在尝试做的类似于分析,但不一样,因为收集的数据将更多地用于调试而不是分析。
编辑:平台:
要收集的
Linux诊断信息:来自应用程序逻辑、各种断言和统计信息的信息。
我正在考虑将代码添加到我的应用程序中,以收集诊断信息以供以后检查。是否为此目的创建了任何 C++ 库?我正在尝试做的类似于分析,但不一样,因为收集的数据将更多地用于调试而不是分析。
编辑:平台:
要收集的
Linux诊断信息:来自应用程序逻辑、各种断言和统计信息的信息。
我倾向于为此目的使用日志记录。 Log4cxx就像一个魅力。
如果调试是你正在做的,也许使用调试器。GDB 脚本很容易编写和使用。将它们与您的代码并行维护可能具有挑战性。
编辑 - 附加 Annecdote:
我维护的软件包括一个自制的仪器系统。宏用于对日志消息进行排队,配置选项控制记录的消息类别和记录的详细级别。一个线程处理日志队列,将消息刷新到文件并在文件变得太大时轮换文件(它们通常会这样做)。该系统提供了很多细节,但通常它会提供大量文件,我们的支持工程师必须花费数小时才能找到任何有用的东西。
现在,我只用过几次 GDB 来诊断错误,但是对于这些问题,它比日志系统有一些很好的优势。GDB 脚本允许我收集新的检测数据,而无需添加新的检测行并将我的软件的新版本部署到客户端。GDB 可以从第三方库生成消息(需要在某一时刻调试到 openssl)。GDB 在不使用时不会对软件增加运行时影响。GDB 在打印对象的内容方面做得很好;当需要记录新对象的状态时,代码级日志记录系统需要编写新的宏。
缺点之一是我生成的 gdb 脚本与源代码没有明确的关系。源文件和gdb脚本是独立开发的。理想情况下,对源文件的更改应该会影响并更新 gdb 脚本。一种想法是将特殊格式的注释放入代码中,并让脚本语言传递源文件以生成源文件的调试器脚本文件。最后,让 makefile 在构建周期中执行此脚本。
考虑为此目的使用 GDB 的潜力是一个有趣的练习,但我必须承认,可能有更好的代码级解决方案。
如果您在 Linux 中执行应用程序,您可以在应用程序崩溃时使用“ulimit”生成内核(或 assert(false) 或 kill -6 ),稍后,您可以使用 gdb (gdb -c core_file binary_file) 和分析堆栈。
萨鲁2。
PD。对于分析,使用 gprof