【问题标题】:Instrumentation (diagnostic) library for C++C++ 的检测(诊断)库
【发布时间】:2010-10-29 07:30:46
【问题描述】:

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

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

【问题讨论】:

  • 什么操作系统/平台?什么样的诊断?

标签: c++ debugging profiling runtime instrumentation


【解决方案1】:

您可能还想查看libcwd

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

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

Pantheios 是一个开源 C/C++ 日志记录 API 库,提供 100% 类型安全、效率、通用性的最佳组合 和可扩展性。它易于使用和扩展,高度便携(平台 并且独立于编译器),最重要的是,它维护了您的 C 传统 只为你使用的东西付费。

【讨论】:

    【解决方案2】:

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

    编辑 - 附加 Annecdote:

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

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

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

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

    【讨论】:

      【解决方案3】:

      如果你在 Linux 中执行你的应用程序,你可以在你的应用程序崩溃时使用 "ulimit" 来生成一个内核(或 assert(false) 或 kill -6 ),稍后你可以使用 gdb 调试(gdb -c core_file binary_file) 并分析堆栈。

      Salu2.

      PD。对于分析,使用 gprof

      【讨论】:

        【解决方案4】:

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

        【讨论】:

        • 简单的日志记录是一种解决方案,尽管它看起来对我来说不是最好的方法。生成的日志很大,因为收集的数据是在检查日志时完成的。还有很多事情需要手工完成,即必须从一开始就发明用于收集数据的结构。也许有一些框架可以简化事情?
        猜你喜欢
        • 2017-12-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-30
        相关资源
        最近更新 更多