我的应用程序在QA环境中抛出InvalidCastException,这是我无法在开发中重现的。
我希望在异常时刻获得minidump。我知道adplus,但我不知道如何使用它,以便在抛出InvalidCastException时创建minidump。显然,它没有区分一个.NET异常。可能是我错了,有办法。或者,还有另一种工具可以做到这一点。最好是免费的。
无论如何,有人可以建议如何处理这个问题吗?
感谢。
更新
更新2
实际上,我从John robbins SuperAssert.Net“窃取”了minidump生成代码。再一次,这是从某个具体点生成minidump的代码,而我需要一种更灵活的adplus风格方法。 John Robbins的方法是创建一个cdb脚本,然后使用该脚本调用cdb调试器,使其附加到进程并创建转储。它不使用MiniDumpWriteDump API。
答案 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()提供了大量信息。