visual studio 2012调试器不起作用

时间:2014-10-31 00:31:32

标签: c# visual-studio-2012 debugging

我的visual studio 2012已停止显示调试器异常。我的意思是这个对话框显示了确切的异常和行:http://i.msdn.microsoft.com/dynimg/IC286574.jpg

例如,如果我在visual studio中运行以下代码:

using System;
using System.Windows.Forms;

namespace debugger_test
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        public void Form1_Load(object sender, EventArgs e)
        {
            int zero = 0;
            int a = 1/zero; // it hangs on this line
            MessageBox.Show("this messagebox is never shown");
        }
    }
}

然后它不会返回任何异常。它刚刚启动,int a = 1/zero;执行后没有代码。

但是当我单独运行与编译的.exe相同的程序时,它会返回这种异常:http://i.msdn.microsoft.com/dynimg/IC8596.gif在这种情况下是关于DivideByZeroException。

  • 任何项目都会发生。
  • 修复和重新安装visual studio并没有解决它。虽然重新安装后会保留一些VS设置。
  • 我不知道任何可能导致它的变化,我不确定它何时开始发生。

我如何从Visual Studio中的第一张图片再次获得调试器?感谢。

编辑:Sascha的建议并没有完全解决我的问题。 我无法弄清楚如何不抛出try {}代码中的异常,但抛出一个不在try {}内的异常。

以下代码要么只抛出异常,要么仅在int gg = 1/a;行挂起,无论我是否使用try / catch。

public void Form1_Load(object sender, EventArgs e)
{
    int zero = 0;
    int a = 1/zero; // this line should throw an exception
    MessageBox.Show("to be never shown");
}

__

public void Form1_Load(object sender, EventArgs e)
{
    try
    {
        int zero = 0;
        int a = 1/zero;
        MessageBox.Show("to be never shown");
    }
    catch
    {
        MessageBox.Show("catched"); // it should show this messagebox
    }
}

有任何想法如何正确设置?感谢。

2 个答案:

答案 0 :(得分:2)

x64 systems上查看有关已知问题的此问题:

  

这是64位操作系统平台上的已知问题。原因是   64位OS核心不允许通过内核模式的用户模式异常   栈。操作系统很容易吞下这个例外。那发生在   FormLoad处理程序,因为它是在OS回调中调用的。 32位操作系统   不这样做,所以它不会重现。

     

操作系统团队正在调查相关问题。与此同时,你做到了   必须解决这个问题。打开"停止第一次机会   例外"将使调试器在此方案中停止。但它   确实使调试器经常停止,所以你可能想要这样做   这只有在你发现问题时

当您的PC为64位并且表单加载中发生异常时,会发生Visual Studio的错误/限制。

答案 1 :(得分:0)

到目前为止,这似乎已经为我解决了。

  • 在注册表编辑器中,找到以下注册表子项:HKLM \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ Image File Execution Options
  • 创建DWORD值的注册表项。
  • 将新注册表项命名为DisableUserModeCallbackFilter。
  • 将DisableUserModeCallbackFilter注册表项的值设置为1。

找到http://support.microsoft.com/kb/976038/en-us

它必须编译为发布。可笑了。