C++中相当于Python的traceback库

8

我需要获取一些调试库/工具,以便追踪回溯信息并将其打印到标准输出流中。

Python的traceback库可以作为一个例子。

C++中与Python的traceback库相当的是什么?


我记得一段时间以前也在寻找类似的东西,但是没有太多的运气。我认为这可能会涉及到“实现定义”的领域。不过,我期待看看其他人推荐什么。 - dappawit
4
这个链接 https://dev59.com/5HRB5IYBdhLWcg3wLk1M 已经涵盖了大部分内容。 - Eugen Constantin Dinca
5个回答

2
这是平台特定的,并且也取决于您如何编译代码。如果您使用gcc编译代码并使用-fomit-frame-pointer,那么很难得到有用的回溯信息,通常需要启发式方法。如果您使用任何使用该标志的库,您将遇到问题--它通常用于高度优化的库(例如nVidia的OpenGL库)。
这不是一个自包含的解决方案,因为它是更大引擎的一部分,但是代码很有帮助: 这包括在gcc可用时使用帧指针进行回溯和在无法使用时使用启发式回溯。这可能会在跟踪中产生虚假条目,但对于获取崩溃报告的回溯比完全丢失跟踪要好得多。
这些目录中还有其他相关代码,您需要查看以利用该代码(符号查找、信号处理);这些链接是一个很好的起点。

1

1

核心转储可以非常有用,但由于它们可能很大,因此并不总是适合像崩溃报告之类的东西。 (Windows在这方面具有更全面的支持,使用“minidumps”允许您指定应包括哪些信息。) - Glenn Maynard

0
如果您想在崩溃时获取“堆栈跟踪”,请尝试“Google Breakpad”。

0

我过去使用libunwind 取得了成功。我知道它在Linux上运行良好,但不确定Windows如何,尽管它声称是可移植的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接