情况如下:线程A捕获异常,将异常的数据保存在内存中的某处(在异常过滤器中使用GetExceptionInformation),然后线程B获取该异常信息并想要重新抛出它。但问题是,当线程B重新捕获捕获的异常时,我错过了导致异常的原始调用堆栈。
如何在不丢失原始调用堆栈的情况下重新抛出异常? (请注意,这个问题与C ++有关)。
答案 0 :(得分:2)
您可以在catch块中展开堆栈并将其保存为您要重新抛出的异常的一部分。在C ++中展开堆栈有点棘手,但您可以查看WxWidgets附带的crashdump收集器代码作为示例。
答案 1 :(得分:0)
问题是为什么你需要将堆栈传递给“接收”线程。
我假设你需要堆栈才能基本上将它报告给某些错误日志。您可以在捕获线程中遍历堆栈,或者生成一个小型转储,或者您希望收集的任何错误信息,然后只需将异常的副本(如果可能,请注意切片)传递给接收线程。