Моя визуальная студия 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.
Как я могу снова получить отладчик с первого изображения, работающего в визуальной студии? Благодарю.
EDIT: советник Sascha не полностью разрешил мою проблему. Я не могу понять, как не выкинуть исключение, находящееся внутри кода try {}, но вызвать исключение, которое не находится внутри try {}.
Следующие коды либо генерируют исключение, либо только зависают на int gg = 1/a;
line независимо от того, использую 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
}
}
Любые идеи, как правильно настроить его? Благодарю.
Кажется, это исправлено для меня до сих пор.
найдено там http://support.microsoft.com/kb/976038/en-us
И он должен быть скомпилирован как релиз. Смешной.
Посмотрите на этот вопрос об известной проблеме в системах x64:
Это известная проблема на 64-битной платформе ОС. Причина в том, что 64-битное ядро ОС не позволяет исключать пользовательский режим через стеки ядра. Исключение проглатывается оператором OS. Это происходит в обработчике FormLoad, потому что он вызывается в обратном вызове ОС. 32bit OS не делает этого, поэтому он не воспроизводится.
Команда ОС исследует связанные с этим проблемы. В то же время вам придется обойти эту проблему. Включение "Stop on first chance exception" заставит отладчика остановиться в этом сценарии. Но он очень часто останавливает отладчик, поэтому вы можете сделать это только тогда, когда найдете проблему
Это ошибка/ограничение Visual Studio, которая возникает, когда ваш компьютер имеет 64 бит, и исключение происходит при загрузке формы.