7

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

我希望在异常时刻获得小型转储。我知道 adplus,但我不确定如何使用它,以便在引发 InvalidCastException 时创建小型转储。显然,它不能将一个 .NET 异常与另一个区别开来。可能是我错了,有办法。或者,还有另一个工具可以做到这一点。最好是免费的。

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

谢谢。

更新

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

更新 2

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

4

3 回答 3

6

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

或者,您可以使用 John Robbins 的 SUPERASSERT .NET(或他的代码的子集)手动捕获它。

更新(针对非代码解决方案):查看 Systems Internals 的ProcDump

于 2010-06-09T11:05:56.800 回答
3

您可能想MiniDumpWriteDump在您的 C# 应用程序中使用 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

于 2010-06-09T12:12:09.273 回答
2

有可能,您必须在 ADPlus 脚本中加载 sos.dll。这篇博客文章向您展示了如何。

当心从小型转储调试托管代码的可疑乐趣。如果您在 QA 期间遇到难以诊断的异常,那么当它投入生产时您将再次遇到它。然后加入了龙喷火。通过为 AppDomain.UnhandledException 编写事件处理程序来处理良好的未处理异常日志记录。记录 e.ExceptionObject.ToString() 提供了丰富的信息。

于 2010-06-09T11:59:50.093 回答