【问题标题】:C++ equivalent to Python's traceback libraryC++ 等价于 Python 的回溯库
【发布时间】:2011-03-04 00:21:40
【问题描述】:

我需要一些调试库/工具来追溯堆栈信息打印输出到标准输出。

Python 的traceback 库就是一个例子。

什么是 C++ 等价于 Python 的回溯库?

【问题讨论】:

  • 我记得前段时间在寻找类似的东西,但我没有太多运气。我认为它可能过于冒险进入“实现定义”的领域。不过,我期待看到其他人推荐什么。
  • 这个stackoverflow.com/questions/691719/… 几乎涵盖了它。

标签: c++ python traceback


【解决方案1】:

这是特定于平台的,还取决于您编译代码的方式。如果您使用-fomit-frame-pointer 使用 gcc 编译代码,则很难获得有用的回溯,通常需要启发式。如果您使用任何使用该标志的库,您也会遇到问题 - 它通常用于高度优化的库(例如 nVidia 的 OpenGL 库)。

这不是一个独立的解决方案,因为它是更大引擎的一部分,但代码很有帮助:

这包括在可用时使用 gcc 使用帧指针进行回溯,以及在不可用时使用启发式回溯;这可能会在跟踪中提供虚假条目,但要获得崩溃报告的回溯,这比完全丢失跟踪要好得多。

您希望查看这些目录中的其他相关代码以使用该代码(符号查找、信号处理);这些链接是一个很好的起点。

【讨论】:

    【解决方案2】:

    试试google core dumper,它会在您需要时为您提供核心转储。

    【讨论】:

    • 核心转储可能非常有用,但由于它们可能很大,它们并不总是理想的崩溃报告之类的东西。 (Windows 通过“小型转储”对此提供了更彻底的支持,允许您指定应包含哪些信息。)
    【解决方案3】:

    现在有 cpp-traceback,它完全是 C++ 的 Python 风格的回溯。

    【讨论】:

      【解决方案4】:

      我过去在libunwind 上取得了成功。我知道它适用于 linux,但不确定 Windows 怎么样,尽管它声称是可移植的。

      【讨论】:

        【解决方案5】:

        如果您想在崩溃时获取“堆栈跟踪”,请尝试“google breakpad

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-05-11
          • 2011-11-25
          • 2011-03-02
          • 1970-01-01
          • 1970-01-01
          • 2014-09-07
          • 2018-09-23
          相关资源
          最近更新 更多