请让我知道当我的应用程序崩溃并关闭并显示包含“不发送”和“发送错误报告”按钮的对话框时,我需要执行哪些步骤。

除了查看事件查看器来解决此问题之外,我还能做什么?

谢谢

有帮助吗?

解决方案

  1. 你可以添加一个 try/catch/finally 构造你的周围 Main() 项的方法的主体。

  2. 它的,你可以添加一个 ThreadException 处理程序,只是之前的应用程序。运行(),赶上的例外情况扔在它UI事件处理程序:

    Application.ThreadException +=
       new ThreadExceptionEventHandler(Application_ThreadException);
    
  3. 所有其他未处理的例外情况可以抓到了使用:

    AppDomain.CurrentDomain.UnhandledException +=
       new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
    

    但值得一提的是,这只允许登录/报告异常-你不能阻止应用程序关闭一旦你退出这个最后的处理程序。

  4. Visual Studio还可配置到 打破在例外情况的第一次机会, 和外部调试器(如WinDbg管理SoS扩展)可以赶上第一机会的例外情况太(http://www.codeproject.com/KB/debug/windbg_part1.aspx).

此外,使用一种日志框架喜欢log4net添加有记录到应用和转的异常信息之前的应用程序关闭。

其他提示

问问你的用户,如果他们能重现错误,以及如何。如果你能重现错误,运行在Visual Studio调试,并按照相应的步骤导致崩溃。它捕获错误Visual Studio将进入调试模式。形成有,你将能够跟随堆栈跟踪,看看哪些代码导致错误。 Visual Studio中使得调试非常简单的大部分时间。

理想情况下,您应该使用日志库,例如 日志 或者 日志4网 记录任何未处理的异常以及一般异常,方法是在发生异常时将其记录在代码中。

它还可以帮助您在应用程序中设置不同级别的日志记录,以帮助您在应用程序未在开发计算机上运行时跟踪问题。使用 nLog,您可以将日志记录保留在生产代码中,并通过使用日志记录配置文件启用/禁用日志输出。

我没有使用过log4net,所以我不知道它是否有类似的功能。

“发送/不发送”错误往往当你有在后台线程未处理的异常情况发生(主线程将表明继续/退出.NET对话框堆栈跟踪)。

添加一个异常处理程序到你的线程的功能,并从那里登陆:

void RunMyThread()
{
    try
    {
        // background thread code
    }
    catch (Exception ex)
    {
        // Log the exception
    }
}

这是高度简化的,并且可能不是你想怎么处理异常。但希望这将让你在正确的方向前进。

使用WinDbg调试问题。你可以把它打破(如停止在断点处)时,抛出一个异常,然后检查堆栈跟踪...的范围对象等等......

如果它发生在一个客户的网站,是不容易的开发一个调试器内可再现的,你可以做一些验尸调试。我喜欢用用户转储收集内存转储文件(.DMP)。然后,我使用WinDbg用于分析。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top