2017-07-03 63 views
1

仅适用于StackOverflow-exception,我在从装载了CLR的进程配置AddVectoredExceptionHandler时努力创建MiniDump。CLR/VectoredExceptionHandler/StackOverflowException/MiniDumpWriteDump

我的处理程序被调用,将.dmp文件被创建,但随后MiniDumpWriteDump失败。

我没有问题,写了其他异常,例如转储AccessViolation。如果CLR未加载并且发生了StackOverflow-exceptin,那么我也会成功写入转储。

https://github.com/NicolaiNyberg/DbgSvcExtension 上提供示例代码,其中CrashHandler dll项目配置处理程序,SoexCh.Cs是从C#中调用的示例。

我的问题是:一旦CLR加载,可防止在StackOverflow上的异常的情况下编写一个小型转储过程中有什么相对于未处理的异常处理程序会发生什么?

+1

没有足够的堆栈空间放置,使MiniDumpWriteDump()来完成其工作。可靠的小型生产需要一个“警戒过程”。像DebugDiag一样。 –

+0

感谢汉斯。我刚刚阅读了你的答案,并且我意识到我的答案/解决方案是实施你的建议。 –

回答

0
从问题

感动的解决方案来回答:

接听/解决方案:为了MiniDumpWriteDump从撞碎的堆栈(StackOverflow上的异常)成功,那么就应该从被从信号工作者线程调用ExceptionHandler。 CrashHandler已经更新了这个实现。

+0

其实,这_really_应该是在一个单独的看门狗程序(如汉斯在他的评论暗示)。虽然一个单独的线程可能会为计算器错误工作,它可能没有足够的统计腐败的东西(如访问冲突),可以软管整个(目标/受害者)的过程。 –