我希望有一种方法在抛出异常时向用户报告堆栈跟踪。最好的方法是什么?它是否需要大量额外的代码?

回答问题:

如果可能的话,我希望它是便携的。我想让信息弹出,这样用户就可以复制堆栈跟踪,并在出现错误时通过电子邮件发送给我。


当前回答

在使用g++的Linux上检查这个库

https://sourceforge.net/projects/libcsdbg

它为你做了所有的工作

其他回答

Andrew Grant的回答并不能帮助获得抛出函数的堆栈跟踪,至少在GCC中是这样,因为throw语句本身并不能保存当前的堆栈跟踪,并且catch处理程序届时将无法再访问堆栈跟踪。

解决这个问题的唯一方法(使用GCC)是确保在抛出指令的点生成堆栈跟踪,并将其与异常对象一起保存。

当然,此方法要求抛出异常的每个代码都使用特定的exception类。

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

AFAIK libunwind非常便携,到目前为止我还没有找到更容易使用的东西。

Cpp-tool ex_diag -重量轻,多平台,最小的资源使用,简单和灵活的跟踪。

在Windows上,查看BugTrap。它不再在原来的链接中,但在CodeProject中仍然可用。

Unix:回溯

麦克:回溯

Windows: CaptureBackTrace