例外堆栈跟踪

时间:2010-01-14 13:50:56

标签: c++

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

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

我需要在linux和windows下使用gcc的东西

3 个答案:

答案 0 :(得分:4)

我认为没有一种跨平台的方式来实现它。在Windows上,查看StackWalk方法;在linux上,man backtrace。这将获得信息;由你来格式化它。

答案 1 :(得分:4)

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

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

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

答案 2 :(得分:2)

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