отладчик visual studio 2012 не работает

1

Моя визуальная студия 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.

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

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

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
    }
}

Любые идеи, как правильно настроить его? Благодарю.

Теги:
debugging
visual-studio-2012

2 ответа

0
Лучший ответ

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

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

найдено там http://support.microsoft.com/kb/976038/en-us

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

2

Посмотрите на этот вопрос об известной проблеме в системах x64:

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

Команда ОС исследует связанные с этим проблемы. В то же время вам придется обойти эту проблему. Включение "Stop on first chance exception" заставит отладчика остановиться в этом сценарии. Но он очень часто останавливает отладчик, поэтому вы можете сделать это только тогда, когда найдете проблему

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

  • 0
    Ага. Я получил это, работая отладкой, исключениями, проверкой, брошенной для всех, хорошо. Спасибо, что указали мне правильное направление!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню