如何在发生某个第一次机会异常时创建.NET进程的minidump

时间:2010-06-09 11:03:20

标签: .net crash minidump

我的应用程序在QA环境中抛出InvalidCastException,这是我无法在开发中重现的。

我希望在异常时刻获得minidump。我知道adplus,但我不知道如何使用它,以便在抛出InvalidCastException时创建minidump。显然,它没有区分一个.NET异常。可能是我错了,有办法。或者,还有另一种工具可以做到这一点。最好是免费的。

无论如何,有人可以建议如何处理这个问题吗?

感谢。

更新

  1. 构建是QA和dev中的Debug构建。然而,QA运行在实验室中可能实现的复杂场景,开发人员无法重现。因此,我需要能够在QA中运行时进行转储。
  2. 我可以修改代码并从代码创建minidump。但是,我希望有一个更灵活的解决方案,每次发生这样的问题时都不需要修改代码。
  3. 更新2

    实际上,我从John robbins SuperAssert.Net“窃取”了minidump生成代码。再一次,这是从某个具体点生成minidump的代码,而我需要一种更灵活的adplus风格方法。 John Robbins的方法是创建一个cdb脚本,然后使用该脚本调用cdb调试器,使其附加到进程并创建转储。它不使用MiniDumpWriteDump API。

3 个答案:

答案 0 :(得分:5)

最简单的方法是让它一直冒出应用程序,让用户向Microsoft报告,然后注册Windows错误报告。

或者,您可以使用John Robbins的SUPERASSERT .NET(或其代码的一部分)手动捕获它。

更新(针对非代码解决方案):查看系统内部“ProcDump

答案 1 :(得分:3)

您可能想在C#应用程序中使用MiniDumpWriteDump API吗?请查看http://blog.kalmbach-software.de/2008/12/13/writing-minidumps-in-c/以获取代码示例,或在Internat中搜索MiniDumpWriteDump和C#。

如果使用Visual Studio 2010,则可以在Visual Studio中直接加载minidump(请参阅http://msdn.microsoft.com/en-us/library/d5zhxt22(v=VS.100).aspx

答案 2 :(得分:2)

有可能,您必须在ADPlus脚本中加载.sos.dll。这个blog post向您展示了如何做到这一点。

谨防从minidump调试托管代码的可疑乐趣。如果您在QA中遇到难以诊断的异常,那么当它投入生产时您将再次遇到它。随着龙的呼吸火增加了。通过为AppDomain.UnhandledException编写事件处理程序来处理好的未处理异常日志记录。记录e.ExceptionObject.ToString()提供了大量信息。