none
VS2008 在64bit 下无法截获异常? RRS feed

  • 问题

  • 简单描述如下: 

    在VS2008 下 调试程序,当程序遇到错误,VS会捕获该错误,并中断程序给出错误提示.
    但是我发现在win 2008 R2下 该功能不好用.
    比如做个测试, 
    新建一个WindowsFormsApplication
    在 Form_Load 再加
    System.IO.File.Create("fgh/fgh.ee");
    F5执行程序 .

    VS应该执行到该语句后自动中断并给出"System.IO.DirectoryNotFoundException"提示!
    但是,事实并非如此, 程序崩溃了. 

    该问题在2010下依然存在.

    不知道大家有没有碰到?  不知道专家们是如何解决的.
    • 已编辑 Top IT 2010年2月17日 13:12 补充
    2010年2月17日 13:10

答案

全部回复

  • 补充一点,刚才测试了一下, 发现线程内的错误是可以拦截的...
    比如说,上面的测试代码直接改为  

            private void Form1_Load(object sender, EventArgs e)
            {
               throw new System.IO.DirectoryNotFoundException();
            }
    依然不拦截,程序直接崩溃!

    如果这么写.

            private void test()
            {
                throw new System.IO.DirectoryNotFoundException();
            }
    
    
            private void Form1_Load(object sender, EventArgs e)
            {
                System.Threading.Thread t = new System.Threading.Thread(new System.Threading.ThreadStart(test));
                t.Start();
            }
    可以成功弹出错误提示.
    2010年2月17日 16:11
  • 直接从 调试->异常 里面设置引发 Exceptions 可以实现拦截错误,但是似乎那个地方还有BUG. 
    2010年2月17日 16:15
  • 你好!
         尝试管理员身份运行cmd,然后运行以下命令:
    devenv.exe /resetsettings 这样可以重置IDE的设置。
    devenv.exe /safemode  这样可以用不加在第三方的插件启动VS

         如果无效的话,尝试修复一下VS,看看能否解决!
    周雪峰
    2010年2月18日 0:09
    版主
  • 全新的系统,全新的 VS2008
    而且同样,全新的系统,全新的VS2010都存在这个问题,  希望有用64bit的专家,测试存在不存在这个问题!
    2010年2月18日 10:27
  • 你好!
    我现在没有64位的环境,我晚上请教一下使用64位系统的朋友,看看他们那里时候存在这个问题,然后马上回复你!
    我个人估计是你的系统环境的问题,因为这个问题挺严重,如果真的有问题,相信会有大量的用户来反映这个问题的!
    周雪峰
    • 已标记为答案 YiChun Chen 2010年2月22日 11:04
    2010年2月18日 10:38
    版主
  • 你好!

    我在机器是Windows 7 64位的操作系统。

    新建一个WindowsFormsApplication
    在 Form_Load 再加 System.IO.File.Create("fgh/fgh.ee");
    F5执行程序 .

    我测试了一下Top IT描述的情况,似乎在我的机器上也没有中断程序并抛出异常的提示,但是程序并未崩溃,窗体依然是弹出的。
    但是在Output Window中,我可以看到以下的编译日志:

    'WindowsFormsApplication1.vshost.exe' (Managed): Loaded 'C:\Users\v-yicche\Documents\Visual Studio 2008\Projects\WindowsFormsApplication1\WindowsFormsApplication1\bin\Debug\WindowsFormsApplication1.exe', Symbols loaded.
    A first chance exception of type 'System.IO.DirectoryNotFoundException' occurred in mscorlib.dll

    不知道周版主那边测试下来的情况是不是一样的?
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.
    Welcome to the All-In-One Code Framework! If you have any feedback, please tell us.
    2010年2月19日 3:33
  • 我和周版主讨论过你的问题了,最后发现这似乎是个VS2008在64位操作系统上抛异常的一个问题,跟操作系统的关系挺紧密的。
    已经有人在Connect上报过这个问题,你可以看一下:https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=357311&wa=wsignin1.0
    的确按照你所说的,从调试->异常里面设置引发Exceptions可以实现拦截错误。
    另外你可以看一下:http://social.msdn.microsoft.com/Forums/en/vbgeneral/thread/a0016d16-9fac-4bd8-88de-b2959b1827e9

    谢谢你的发现,非常的有帮助! :)


    Please remember to mark the replies as answers if they help and unmark them if they provide no help.
    Welcome to the All-In-One Code Framework! If you have any feedback, please tell us.
    • 已标记为答案 YiChun Chen 2010年2月22日 11:04
    2010年2月19日 5:30