2014-10-31 2 views
1

Моя визуальная студия 2012 прекратила показывать исключения отладчика. Я имею в виду этот диалог, который показывает мне точное исключение и строку: http://i.msdn.microsoft.com/dynimg/IC286574.jpg.visual studio 2012 отладчик не работает

В примере, если я запускаю следующий код в визуальной студии:

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.

  • Это случается с любым проектом.
  • Ремонт и переустановка визуальной студии не разрешила его. Хотя некоторые настройки VS были сохранены после переустановки.
  • Мне неизвестны какие-либо изменения, которые могут вызвать его, и я не уверен, когда это начнется.

Как я могу получить отладчик с первого изображения, работающего в визуальной студии снова? Благодарю.

EDIT: совет 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

Это, кажется, исправило это для меня до сих пор.

  • В редакторе реестра найдите следующий раздел реестра: HKLM \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ Options Execution Image File
  • Создать запись реестра значения DWORD.
  • Назовите новую запись реестра DisableUserModeCallbackFilter.
  • Установите значение параметра реестра DisableUserModeCallbackFilter 1.

нашел там http://support.microsoft.com/kb/976038/en-us

И он должен быть составлен в виде выпуска. Смешной.

2

Взгляните на этот вопрос о известной проблеме на x64 systems:

Это известная проблема на 64-битной платформе ОС. Причина в том, что 64-битное ядро ​​ОС не позволяет исключить пользовательский режим в режиме ядра . Исключение проглатывается оператором OS. Это происходит в обработчике FormLoad , потому что он вызывается в обратном вызове ОС. 32 бит OS не делает этого, поэтому он не воспроизводится.

Команда ОС исследует связанные с этим проблемы. В то же время, вам нужно обходиться . Включение «Остановить первый шанс исключение» заставит отладчик остановиться в этом сценарии. Но это делает отладчик, чтобы остановить очень часто, так что вы можете захотеть сделать это только тогда, когда вы нашли проблему

Это ошибка/ограничение Visual Studio, что происходит, когда ваш компьютер 64 бит и исключение происходит при загрузке формы.

+0

Aha. Я получил его работу отладки, исключения, проверка брошена для всех, нормально. Спасибо, что указали мне правильное направление! – LukAss741

Смежные вопросы