如何排除刚刚消失的.NET应用程序故障?

如何排除刚刚消失的.NET应用程序故障?,.net,debugging,.net,Debugging,我们的一个.NET2.0应用程序开始随机消失。事件日志中没有记录,Watson博士没有生成崩溃转储,没有任何 如何对此应用程序进行故障排除?1)将事件处理程序附加到事件并记录异常对象 AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException); 2) 附加线程异常处理程序 Application.ThreadException

我们的一个.NET2.0应用程序开始随机消失。事件日志中没有记录,Watson博士没有生成崩溃转储,没有任何

如何对此应用程序进行故障排除?

1)将事件处理程序附加到事件并记录异常对象

AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
2) 附加线程异常处理程序

Application.ThreadException +=
  new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);

对于WPF和Silverlight应用程序,您使用了更多的异常处理程序,例如Application.DispatcherUnhandledException和Application.UnhandledException,但在这种情况下,您对它们不感兴趣。为了完整起见,我将它们包括在内。

修改代码,使其在每个相关部分之后都包含日志步骤,然后检查日志文件以了解其去向

如果它甚至没有启动,那么它也会告诉你一些事情…

更多可能性:

  • (简单)用于查看程序正在访问或被拒绝访问的资源(文件、注册表等)
  • (更难)使用简单的调试器,如
  • (最难)将大型ol调试器附加到进程(;或检查)

您可以尝试使用Elmah,这将记录几乎所有未处理的异常:


我们遇到了类似的问题。我们有一个AppDomain.UnhandledException事件,但它甚至跳过了这个。当我们测试剪贴板内容时,它被证明是SystemAccessViolation造成的

如果类似(例如跳过AppDomain.UnhandledException事件),那么我建议记录来自流程外部的互操作和“恶意”数据调用的所有内容,并进行代码检查。我们花了几个星期的时间才找到它,并用一行代码修改了它


另外,在VS中打开MDA并用它运行程序,看看是否有错误。

您是否进行了任何p/invoke调用?不是直接调用。我们使用Crystal Reports,它可以打这样的电话。不管怎样,这个应用程序运行了一年,没有出现任何问题。你们使用COM组件吗?它是windows窗体应用程序吗?听起来不错,但我想确定一下。如果是,请查看Application.SetUnhandledExceptionMode的MSDN文档,了解连接未处理异常处理程序的所有方法。我以前也见过StackOverflowException cause这样的行为。只是UI消失了,还是进程被完全终止了?它被处理了-没有日志记录。