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

情况如下:线程A捕获一个exception,将exception的数据保存在内存中的某个地方(在exceptionfilter中使用GetExceptionInformation),后缀线程B获取该exception信息并且想要重新抛出它。 但事情是,当线程B重新抛出捕获exception时,我错过了导致exception的原始调用堆栈。
如何重新抛出exception而不会丢失原始的调用堆栈? (注意这个问题是关于C ++的)。

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

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

我假设你需要堆栈,以基本上报告给一些错误日志。 您可以在捕捉线程中移动堆栈,或者生成一个小转储,或者您希望收集的任何错误信息,然后仅将异常副本(如果可能,谨防切片)传递给接收线程。