如何在不丢失原始调用堆栈的情况下重新抛出异常?

时间:2009-12-12 16:17:40

标签: c++ windows exception exception-handling

情况如下:线程A捕获异常,将异常的数据保存在内存中的某处(在异常过滤器中使用GetExceptionInformation),然后线程B获取该异常信息并想要重新抛出它。但问题是,当线程B重新捕获捕获的异常时,我错过了导致异常的原始调用堆栈。
如何在不丢失原始调用堆栈的情况下重新抛出异常? (请注意,这个问题与C ++有关)。

2 个答案:

答案 0 :(得分:2)

您可以在catch块中展开堆栈并将其保存为您要重新抛出的异常的一部分。在C ++中展开堆栈有点棘手,但您可以查看WxWidgets附带的crashdump收集器代码作为示例。

答案 1 :(得分:0)

问题是为什么你需要将堆栈传递给“接收”线程。

我假设你需要堆栈才能基本上将它报告给某些错误日志。您可以在捕获线程中遍历堆栈,或者生成一个小型转储,或者您希望收集的任何错误信息,然后只需将异常的副本(如果可能,请注意切片)传递给接收线程。