4

我正在考虑将代码添加到我的应用程序中,以收集诊断信息以供以后检查。是否为此目的创建了任何 C++ 库?我正在尝试做的类似于分析,但不一样,因为收集的数据将更多地用于调试而不是分析。

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

4

4 回答 4

2

我倾向于为此目的使用日志记录。 Log4cxx就像一个魅力。

于 2009-05-27T15:07:58.597 回答
2

您可能还想查看libcwd

Libcwd 是面向 C++ 开发人员的线程安全、功能齐全的调试支持库。它包括带有自定义调试通道和设备的基于 ostream 的调试输出、强大的内存分配调试支持,以及对打印源文件的运行时支持:行号信息和解构类型名称。

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

Pantheios 是一个开源 C/C++ 日志记录 API 库,提供 100% 类型安全、效率、通用性和可扩展性的最佳组合。它易于使用和扩展,高度可移植(独立于平台和编译器),而且最重要的是,它坚持 C 语言的传统,即您只需为使用的内容付费。

于 2009-05-27T19:54:38.597 回答
1

如果调试是你正在做的,也许使用调试器。GDB 脚本很容易编写和使用。将它们与您的代码并行维护可能具有挑战性。

编辑 - 附加 Annecdote:

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

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

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

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

于 2009-05-27T16:17:47.693 回答
0

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

萨鲁2。

PD。对于分析,使用 gprof

于 2009-05-27T16:43:48.857 回答