我的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中的第一张图片再次获得调试器?感谢。
编辑: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
}
}
有任何想法如何正确设置?感谢。
答案 0 :(得分:2)
在x64 systems上查看有关已知问题的此问题:
这是64位操作系统平台上的已知问题。原因是 64位OS核心不允许通过内核模式的用户模式异常 栈。操作系统很容易吞下这个例外。那发生在 FormLoad处理程序,因为它是在OS回调中调用的。 32位操作系统 不这样做,所以它不会重现。
操作系统团队正在调查相关问题。与此同时,你做到了 必须解决这个问题。打开"停止第一次机会 例外"将使调试器在此方案中停止。但它 确实使调试器经常停止,所以你可能想要这样做 这只有在你发现问题时
当您的PC为64位并且表单加载中发生异常时,会发生Visual Studio的错误/限制。
答案 1 :(得分:0)
到目前为止,这似乎已经为我解决了。
找到http://support.microsoft.com/kb/976038/en-us
它必须编译为发布。可笑了。