我希望有一种方法在抛出异常时向用户报告堆栈跟踪。最好的方法是什么?它是否需要大量额外的代码?
回答问题:
如果可能的话,我希望它是便携的。我想让信息弹出,这样用户就可以复制堆栈跟踪,并在出现错误时通过电子邮件发送给我。
我希望有一种方法在抛出异常时向用户报告堆栈跟踪。最好的方法是什么?它是否需要大量额外的代码?
回答问题:
如果可能的话,我希望它是便携的。我想让信息弹出,这样用户就可以复制堆栈跟踪,并在出现错误时通过电子邮件发送给我。
当前回答
Cpp-tool ex_diag -重量轻,多平台,最小的资源使用,简单和灵活的跟踪。
其他回答
Unix:回溯
麦克:回溯
Windows: CaptureBackTrace
这取决于哪个平台。
在GCC上,这是非常琐碎的,更多细节请参阅这篇文章。
在MSVC上,您可以使用StackWalker库来处理Windows所需的所有底层API调用。
你必须找出将此功能集成到应用程序中的最佳方法,但你需要编写的代码量应该是最小的。
我推荐http://stacktrace.sourceforge.net/项目。它支持Windows, Mac OS和Linux
Cpp-tool ex_diag -重量轻,多平台,最小的资源使用,简单和灵活的跟踪。
Andrew Grant的回答并不能帮助获得抛出函数的堆栈跟踪,至少在GCC中是这样,因为throw语句本身并不能保存当前的堆栈跟踪,并且catch处理程序届时将无法再访问堆栈跟踪。
解决这个问题的唯一方法(使用GCC)是确保在抛出指令的点生成堆栈跟踪,并将其与异常对象一起保存。
当然,此方法要求抛出异常的每个代码都使用特定的exception类。
2017年7月11日更新:对于一些有用的代码,看看cahit beyaz的答案,它指向http://stacktrace.sourceforge.net -我还没有使用它,但它看起来很有前途。