检查我的应用程序崩溃了什么

时间:2012-03-12 13:50:15

标签: c# .net visual-studio-2010

我有一个用C#/ .NET 4 / VS C#Express编写的应用程序。在调试会话期间(它没有发生在发布版本中,但我不能肯定地说,它将来不会)我的应用程序退出,没有任何异常信息。我的代码中唯一关闭主窗体的部分只能通过菜单文件/退出和它的Clicked事件处理程序访问。所以它必须是一些......“特殊代码”。我怎样才能确定哪一段代码杀了我的应用程序?


解决方案,如果有人想使用它:

AppDomain currentDomain = AppDomain.CurrentDomain;
currentDomain.UnhandledException += new UnhandledExceptionEventHandler( currentDomain_UnhandledException );

带文件记录的事件处理程序

void currentDomain_UnhandledException( object sender, UnhandledExceptionEventArgs e ) {
    using ( FileStream file = new FileStream( Application.StartupPath + "\\errorlog.txt",
        FileMode.Append, FileAccess.Write ) ) {
        StreamWriter streamWriter = new StreamWriter( file );
        streamWriter.WriteLine( "-------------------------------------------------" );
        streamWriter.WriteLine( "---------- " + System.DateTime.Now + " ---------" );
        streamWriter.WriteLine( "-------------------------------------------------" );
        streamWriter.WriteLine( "Terminating: " + e.IsTerminating );
        Exception ex = (Exception)e.ExceptionObject;
        while ( ex != null ) {
            streamWriter.WriteLine( "--------- Exception: ---------- " );
            streamWriter.WriteLine( ex.GetType() );
            streamWriter.WriteLine( ex.Message );
            streamWriter.WriteLine( ex.HelpLink );
            streamWriter.WriteLine( ex.Source );
            streamWriter.WriteLine( ex.StackTrace );
            ex = ex.InnerException;
        }
        streamWriter.WriteLine();
        streamWriter.Close();
        MessageBox.Show( ( (Exception)e.ExceptionObject ).Message );
    }
}

6 个答案:

答案 0 :(得分:2)

我会处理这个事件App Domain Unhandled Exception并将异常写入某种文件并查看异常是什么。

答案 1 :(得分:2)

首先,您应该对所有代码进行异常处理。

如果它仍然存在,您可以将事件处理程序附加到AppDomain.UnhandledException event

请注意,您的应用程序仍然会崩溃,但这至少可以让您记录异常。

答案 2 :(得分:0)

尝试在主构造函数上放置调试点,然后按F10 / F11等,直到确切知道应用程序的存在位置。

如果这没有帮助,您可以尝试使用F10从头开始调试您的应用程序。

答案 3 :(得分:0)

您是否确定在Debug-> Exceptions对话框中检查了Thrown Exceptions和Unhandled Exceptions?

答案 4 :(得分:0)

在main()方法的开头放置一个断点,方法是单击边距或右键单击代码并选择Insert Breakpoint。

然后开始调试(F5)。然后使用Step Over(F10)和Step Into(F11)逐行遍历/遍历代码,直到找到有问题的代码。

答案 5 :(得分:0)

所有.net应用程序崩溃都会在Windows事件日志中留言。从那里开始搜索。根据您所描述的,它是应用程序退出或崩溃。

以前在控制面板中某处进行了调试设置 - >系统 - >高级,但我在这台机器上找不到它。如果启用,如果要调试应用程序,每个应用程序崩溃都会弹出一个弹出窗口。可能是一个好的开始。