我有一个用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 );
}
}
答案 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事件日志中留言。从那里开始搜索。根据您所描述的,它是应用程序退出或崩溃。
以前在控制面板中某处进行了调试设置 - >系统 - >高级,但我在这台机器上找不到它。如果启用,如果要调试应用程序,每个应用程序崩溃都会弹出一个弹出窗口。可能是一个好的开始。