繁体   English   中英

在混合代码DLL中为_caught_ SEH异常生成Mini Dump

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM