C ++显示堆栈跟踪异常

我想有一种方法可以在引发异常时向用户报告堆栈跟踪。 做这个的最好方式是什么? 是否需要大量额外的代码?

回答问题:

如果可能,我希望它是便携式的。 我想要弹出信息,因此如果出现错误,用户可以复制堆栈跟踪并将其发送给我。


这取决于哪个平台。

在海湾合作委员会这是非常微不足道的,看到这个职位了解更多细节。

在MSVC上,您可以使用StackWalker库来处理Windows所需的所有底层API调用。

您必须找出将此功能集成到您的应用程序的最佳方式,但您需要编写的代码量应该很小。


安德鲁格兰特的答案并没有帮助获取抛出函数的堆栈跟踪,至少与GCC无关,因为throw语句不会自动保存当前堆栈跟踪,并且catch处理程序将无法访问堆栈跟踪这点再说。

使用GCC来解决这个问题的唯一方法是确保在throw指令的位置生成堆栈跟踪,并将其保存为异常对象。

当然,这个方法要求每个引发异常的代码都使用该特定的Exception类。

2017年7月11日更新:对于一些有用的代码,看看cahit beyaz的答案,它指向http://stacktrace.sourceforge.net - 我还没有使用它,但它看起来很有前途。


如果您使用Boost 1.65或更高版本,则可以使用boost :: stacktrace:

#include <boost/stacktrace.hpp>

// ... somewhere inside the bar(int) function that is called recursively:
std::cout << boost::stacktrace::stacktrace();
链接地址: http://www.djcxy.com/p/86041.html

上一篇: C++ display stack trace on exception

下一篇: print the segmentation fault reason