我们如何在例外情况下采取minidump

时间:2010-09-27 18:32:54

标签: .net exception stack-trace callstack

我正在处理一个处理异常的子项目(.NET)。以下是我的要求

发生异常时,异常程序集必须捕获

  1. CPU信息
  2. 导致问题的方法
  3. 导致问题的数据
  4. 环境详情(路径和其他信息)
  5. 在上述所有这些中,最棘手的部分是获取导致问题的数据。

    数据可以存储在方法体内的任何位置。它可能是方法参数,局部变量,对象等。我相信.Net中没有可用的接口,它可以在异常时暴露内存中的数据。所以我想在异常期间进行小型转储。是否有可能在.Net中创建小型转储。

    我的软件环境是。 .Net 3.5,WCF,Silverlight

    确实给我一些链接。

    感谢

3 个答案:

答案 0 :(得分:1)

我编写了一个托管控制台应用程序,它调用本机API来创建minidump。我在这里发布了: Complete Minidump code

实际上相当容易。最难的部分就是确定你想要命名你的minidump文件的名称。

答案 1 :(得分:1)

通过其他答案中描述的方法创建的托管代码转储的调试器支持受到限制 - 请参阅@Jaredpar的信息here

据说Visual Studio 2010支持这一点,每个信息here

  

Visual Studio 2010调试器可以   读取包含的转储文件   有关托管代码的信息,   非托管代码,或两者的混合。   您可以调试本机和托管   使用正常调试转储   窗户。

仅供参考,您可以设置Process Dumper来触发所选本机异常的进程转储 - 但不确定这在托管进程中如何工作。 fwiw我没有看到为什么本机异常不会触发转储的原因,因为它发生在CLR的范围之外(在本机代码堆栈中),也不是为什么在VS2010中无法处理这样的转储。

答案 2 :(得分:0)