[英]Producing Mini Dumps for _caught_ SEH exceptions in mixed code DLL
我正在尝试使用类似于clrdump的代码在我的托管进程中创建迷你转储。
此托管进程调用C ++ / CLI代码,该代码调用一些本机C ++静态lib代码,其中可能抛出SEH异常(例如,偶尔的访问冲突)。
C# WinForms
->
C++/CLI DLL
->
Static C++ Lib
->
ACCESS VIOLATION
我们的策略是为所有SEH异常(捕获和未捕获)生成小型转储,然后将它们转换为由应用程序代码处理的C ++异常。 这适用于纯粹的原生过程就好了; 但是当应用程序是C#应用程序时 - 不是那么多。
我在C#进程中看到从SEH异常生成转储的唯一方法是不捕获它们 - 然后,作为未处理的异常,使用Application.ThreadException
处理程序创建一个小型转储。 另一种方法是让CLR将SEH异常转换为.Net异常并捕获它(例如System.AccessViolationException
) - 但这意味着不会创建转储,并且信息丢失( Exception
堆栈跟踪信息不那么丰富作为小型转储)。
那么如何通过创建minidump 并将异常转换为.Net异常来处理SEH异常,以便我的应用程序可以尝试恢复?
编辑
通过“不捕获异常”我也意味着捕获然后重新抛出,这确实保留了丰富的异常信息。
现在我正在考虑从不压制System.Exception
或从System.SystemException
派生的任何东西。 这意味着AccessViolation
(和朋友)总是导致程序结束并产生转储,抛出的所有其他异常需要从某个子类型派生( ApplicationException
?)。
我发现使用向量异常处理我可以获得任何SEH异常的第一次机会通知,并利用这个机会产生一个小型转储。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.