2010-01-14 50 views
4

实现异常堆栈跟踪的最佳方式是什么?异常stacktrace

我发现某种使用uncaught_exception()的解决方案,但它需要为每个函数添加一些代码。

我需要的东西,在Linux和Windows

+0

什么样的输出你想看吗? – 2010-01-14 13:53:32

+0

Dupe:http://stackoverflow.com/questions/77005/how-to-generate-a-stacktrace-when-my-gcc-c-app-crashes – 2010-01-14 14:00:34

+0

这不是同一个问题。当我的应用程序崩溃时,我不想要堆栈跟踪,我想要一个附加到我的异常的堆栈跟踪,就像e.printStackTrace();在Java中 – 2010-01-14 14:05:27

回答

4

我不认为有一个跨平台的方式做到这一点对GCC的工作。在Windows上,查看StackWalk方法;在Linux上,男人回溯。这将获得信息;这取决于你的格式。

4

我不确定用于展开堆栈的可靠跨平台方法存在。

我工作过的所有平台/体系结构都提供了一种在发生异常时将堆栈放到堆栈并将地址与函数名称匹配的方法。这些都不是可移植的,但报告框架可以编写成可移植的,实际堆栈行走代码保持平台特定(Windows上的StackWalk或Linux上的回溯)。

您可以查看libunwind项目。我从来没有用过或看过这个,所以它可能不是你想要的。

2

我实现了一些将当前堆栈跟踪生成为一个字符串的代码;如果您有兴趣,请查看从this file的第1220行开始的GetStackTrace()函数。该功能在Linux,MacOS/X和Windows下运行(请注意,我从here中借用Windows实现,并且需要大量的代码才能在Windows下实现此功能.... bleah)