Windows 7 x64中的好奇Visual Studio 2010调试行为

时间:2012-03-02 09:58:25

标签: c# visual-studio-2010 windows-7

显然,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属性后,我发现绝对没有进行兼容性更改:: - (非常令人沮丧!

1 个答案:

答案 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中默默地删除异常。