我正在处理一个处理异常的子项目(.NET)。以下是我的要求
发生异常时,异常程序集必须捕获
在上述所有这些中,最棘手的部分是获取导致问题的数据。
数据可以存储在方法体内的任何位置。它可能是方法参数,局部变量,对象等。我相信.Net中没有可用的接口,它可以在异常时暴露内存中的数据。所以我想在异常期间进行小型转储。是否有可能在.Net中创建小型转储。
我的软件环境是。 .Net 3.5,WCF,Silverlight
确实给我一些链接。
感谢
答案 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)
您可以使用PInvoke调用Windows API来创建小型转储。
How to create minidump for my process when it crashes?
http://msdn.microsoft.com/en-us/library/ms680360(v=VS.85).aspx