显然,Windows会吃掉我的错误。从字面上看。我有这个C#.Net 4.0 @ VS 2010应用程序,我正在努力,它最终崩溃了。 Windows出现并表示它做了一些“兼容性”修改以允许应用程序“更好地工作”,然后我的应用程序窗口就消失了,并且再见调试模式。
我又跑了。当应用程序崩溃时,它就会退出,没有错误,也没有任何错误。
无论如何,我知道错误是什么,我修复了它。几天都没关系。
但是今天,我通过ThreadPool实现了一些简单的线程。会发生什么事情在我的线程中崩溃了,这里有很棒的东西:
Visual Studio在解决方案中导航,打开文件AND THE FUNCTION崩溃,然后停止打破我的应用程序并向我显示错误。它只是打开正确的文件,正确的功能,我的线程退出,我的窗口上的进度条一直在旋转,这就是......陷入困境......
要使事情变得更复杂(即使在单线程场景中也会发生这种情况),请检查一下:我试图捕获整个程序。这应该在技术上捕获发生的 ANY 错误。好吧,猜猜看,它没有。我看到我的错误日志中没有写入错误。
有趣的是,它似乎只有在通过我的强类型数据集(使用.Net的MySQL库)访问数据库时才会发生。其他错误已成功记录。
但几个月前我在Windows XP上使用了相同的 MySQL库,并且我总是记录所有错误,并且在使用Visual Studio进行调试时,在运行时向我显示。
try //Main application loop. Logs all errors, yeah.
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
ETKSession.DebugMode = false;
Application.Run(new frmLogin());
}
catch (Exception ex)
{
AErrorLogging.Log(ex); //This is a tested error log writer of mine which usually worked.
if (ETKSession.DebugMode) throw new Exception(ex.Message, ex);
}
关于那里到底发生了什么的任何想法?!当Windows告诉我它的“兼容性改进”时,我尝试点击一些链接,但我得到的只是愚蠢的支持中心链接,没有任何相关性。我甚至无法改变那些兼容性设置。在调查我的应用程序的EXE属性后,我发现绝对没有进行兼容性更改:: - (非常令人沮丧!
答案 0 :(得分:1)
我会尝试以这种方式捕获异常:
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
ETKSession.DebugMode = false;
Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
Application.Run(new frmLogin());
}
static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
{
AErrorLogging.Log(ex); //This is a tested error log writer of mine which usually worked.
if (ETKSession.DebugMode) throw new Exception(ex.Message, ex);
}
您之前提到Form_Load和Timers不包含try catch代码。我想在你的处理程序中添加一个try catch可能会有所帮助:there is an existing issue on 64bits从Form_Load中默默地删除异常。