Отладка с помощью JIT-отладчика в Visual Studio

JIT-отладка автоматически запускает Visual Studio при возникновении ошибок или сбоев в приложении, запущенном вне Visual Studio. С помощью JIT-отладки можно тестировать приложения за пределами Visual Studio и открыть Visual Studio, чтобы начать отладку в случае проблемы.

JIT-отладка работает для классических приложений Windows. Он не работает для универсальных приложений Windows или для управляемого кода, размещенного в собственном приложении, например визуализаторов.

Совет

Если вы просто хотите запретить отображение диалогового окна JIT-отладчика, но у вас не установлена Visual Studio, см. раздел Отключение JIT-отладчика. Если набор средств Visual Studio был ранее установлен, но теперь его нет, придется отключить JIT-отладку через реестр Windows.

Включение или отключение отладки JIT в Visual Studio

JIT-отладку можно настроить в диалоговом окне Visual Studio Сервис>Параметры (или Отладка>Параметры).

Примечание.

Чтобы включить или отключить JIT-отладку, необходимо запустить Visual Studio от имени администратора. Включение или отключение JIT-отладки устанавливает раздел реестра. Для его изменения требуются права администратора. Откройте Visual Studio с правами администратора, щелкнув приложение Visual Studio правой кнопкой мыши и выбрав Запуск от имени администратора.

Включение или отключение JIT–отладки

  1. В меню Сервис или Отладка выберите Параметры>Отладка>JIT.

    Enable or disable JIT debugging

    Примечание.

    Если параметр меню JIT не отображается, убедитесь, что отладчик JIT установлен с помощью установщика Visual Studio.

  2. В поле "Включить JIT-отладку" для этих типов кода выберите типы кода, которые нужно выполнить отладку JIT для отладки: Managed, Native и/или Script.

  3. Нажмите ОК.

Если вы включили JIT-отладчик, но он не открывается при сбоях или ошибках приложения, см. раздел Устранение неполадок с JIT-отладкой.

Отключение JIT-отладки из реестра Windows

Отладка JIT все еще может быть включена, даже если Visual Studio больше не установлена на компьютере. Если Visual Studio больше не установлена, JIT-отладку можно отключить, отредактировав реестр Windows.

Отключение JIT-отладки путем редактирования реестра

  1. В меню Windows Пуск запустите редактор реестра (regedit.exe).

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

    • HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\DbgManagedDebugger

    • HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug\Debugger

    JIT registry key

  3. Кроме того, удалите следующие записи реестра, если они существуют:

    • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\DbgManagedDebugger

    • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug\Debugger

    Будьте внимательны, чтобы не удалить или не изменить другие разделы реестра.

  4. Закройте окно Редактор реестра.

Включение JIT-отладки для приложений Windows Forms

По умолчанию в приложениях Windows Forms есть обработчик исключений верхнего уровня, который позволяет приложению продолжить работу, если оно может быть восстановлено. Если приложение Windows Forms выдает необработанное исключение, отображается следующее диалоговое окно:

Windows Form unhandled exception

Чтобы включить JIT-отладку вместо стандартной обработки ошибок Windows Forms, добавьте следующие параметры.

  • В разделе system.windows.forms файла machine.config или <имя_приложения>.exe.config установите для параметра jitDebugging значение true:

    <configuration>
        <system.windows.forms jitDebugging="true" />
    </configuration>
    
  • Для приложений Windows Forms, написанных на языке C++, в файле CONFIG или коде также задайте для параметра DebuggableAttribute значение true. Если компиляция выполняется с атрибутом /Zi, но без /Og, компилятор автоматически задаст этот атрибут. Если вы хотите выполнить отладку неоптимизированной сборки выпуска, необходимо задатьDebuggableAttribute, добавив следующую строку в файл AssemblyInfo.cpp приложения:

    [assembly:System::Diagnostics::DebuggableAttribute(true, true)];
    

    Дополнительные сведения см. в разделе DebuggableAttribute.

Использование JIT-отладки

В этом примере рассматривается JIT-отладка, когда приложение выдает ошибку.

  • Для выполнения инструкций необходимо установить Visual Studio. Если у вас нет Visual Studio, вы можете скачать бесплатный выпуск Visual Studio Community.

  • Убедитесь, что JIT-отладка включена в разделе Сервис>Параметры>Отладка>JIT.

В этом примере вы создаете консольное приложение C# в Visual Studio, которое создает исключение NullReferenceException.

  1. В Visual Studio создайте консольное приложение C# (Файл>Создать>Проект>Visual C#>Консольное приложение) с именем ThrowsNullException. Дополнительные сведения о создании проектов в Visual Studio см. в пошаговом руководстве. Создание простого приложения.

  2. Когда проект откроется в Visual Studio, откройте файл Program.cs. Замените метод Main() следующим кодом, который выводит строку на консоль, а затем создает исключение NullReferenceException:

    static void Main(string[] args)
    {
        Console.WriteLine("we will now throw a NullReferenceException");
        throw new NullReferenceException("this is the exception thrown by the console app");
    }
    
  3. Чтобы выполнить сборку решения, выберите конфигурацию Отладка (по умолчанию) или Выпуск, а затем нажмите Сборка>Перестроить решение.

    Примечание.

    • Выберите конфигурацию Отладка для полной отладки.
    • Если выбрана конфигурация Выпуск, необходимо отключить функцию Только мой код. В разделе Сервис>Параметры>Отладка снимите флажок Включить только мой код.

    Дополнительные сведения о конфигурациях сборки см. в разделе Общие сведения о конфигурациях сборки.

  4. Откройте созданное приложение ThrowsNullException.exe в папке проекта C# (...\ThrowsNullException\ThrowsNullException\bin\Debug или ...\ThrowsNullException\ThrowsNullException\bin\Release).

    Вы увидите следующее окно команд:

    Screenshot of the console for ThrowsNullException.exe, which throws an unhandled null reference exception (System.NullReferenceException).

  5. Откроется диалоговое окно Выбор JIT-отладчика.

    Screenshot of the Choose Just-In-Time Debugger dialog box, which appears after the exception appears in the ThrowsNullException.exe console window.

    В разделе Доступные отладчики выберите Создать экземпляр <ваша предпочтительная версия/выпуск Visual Studio>, если она еще не выбрана.

  6. Нажмите ОК.

    Проект ThrowsNullException открывается в новом экземпляре Visual Studio, а выполнение остановлено в строке, вызвавшей исключение:

    Screenshot of the ThrowsNullException project in Visual Studio, with highlighting of the line of source code that threw the exception.

Теперь можно начать отладку. Если вы выполняете отладку реального приложения, необходимо выяснить, почему код вызывает исключение.

Внимание

Если приложение содержит ненадежный код, появляется диалоговое окно предупреждения системы безопасности, позволяющее решить, следует ли продолжить отладку. Перед продолжением отладки решите, доверяете ли вы данному коду. Этот код написан вами самостоятельно? Если приложение выполняется на удаленном компьютере, узнаете ли вы имя процесса? Если приложение выполняется локально, учитывайте возможность выполнения такого вредоносного кода на вашем компьютере. Если вы решили, что код заслуживает доверия, нажмите ОК. В противном случае выберите Отмена.

Устранение неполадок с отладкой JIT

Если отладка JIT не запускается при сбое приложения, даже если она включена в Visual Studio:

  • Известная проблема с Windows может привести к сбою отладчика JIT.

    Исправление состоит в том, чтобы добавить значение DWORD из раздела Видимые с параметром Значение данных, равным 1, в следующие разделы реестра.

    • HKEY_LOCAL_MACHINE\Software\WOW6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug

    • (Для компьютеров с 32-разрядной версией ОС) HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug

  • Отчеты об ошибках Windows могут взять на себя обработку ошибок на компьютере.

    Чтобы устранить эту проблему, используйте редактор реестра, чтобы добавить значение DWORDОтключено с параметром Данные значения, равным 1, для следующих разделов реестра:

    • HKEY_LOCAL_MACHINE\Software\WOW6432Node\Microsoft\Windows\Windows Error Reporting

    • (Для компьютеров с 32-разрядной версией ОС) HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\Windows Error Reporting

    Дополнительные сведения см. в разделе Параметры .WER.

Во время JIT-отладки могут отображаться следующие сообщения об ошибках.

  • Не удалось подключиться к аварийному процессу. Указанная программа не является программой Windows или MS–DOS.

    Отладчик попытался подключиться к процессу, выполняющемуся под именем другого пользователя.

    Чтобы обойти эту проблему, запустите Visual Studio, откройте диалоговое окно Отладка>Присоединение к процессу (или нажмите сочетание клавиш CTRL + ALT + P) и найдите процесс, для которого требуется выполнить отладку, в списке Доступные процессы. Если имя процесса не известно, найдите идентификатор процесса в диалоговом окне JIT-отладчика Visual Studio. Выберите процесс в списке Доступные процессы и щелкните Присоединить. Выберите Нет, чтобы закрыть диалоговое окно JIT-отладчика.

  • Не удалось запустить отладчик, так как пользователь не вошел в систему.

    Пользователь не вошел в консоль, поэтому нет сеанса пользователя для отображения диалогового окна отладки JIT.

    Для решения этой проблемы необходимо войти в компьютер.

  • Класс не зарегистрирован.

    Отладчик пытался создать класс COM, который не зарегистрирован, вероятно, из-за проблемы с установкой.

    Чтобы решить эту проблему, используйте Visual Studio Installer для переустановки или исправления установки Visual Studio.