Поделиться через


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

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

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

Совет

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

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

Отладку Just-In-TimeIn-Time можно настроить в диалоговом окне "Параметры >" средств Visual Studio(или "Параметры>отладки").

Заметка

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

Включение или отключение отладки JIT-In-Time:

  1. В меню Инструменты или Отладка выберите Параметры>Отладки>Just-In-Time.

    Включить или отключить отладку JIT

    Заметка

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

  2. В поле Включить отладку JIT-In-Time для этих типов кода выберите типы кода, которые требуется выполнить отладку JIT-In-Time для отладки: управляемых, собственныхи /или скриптов.

  3. Нажмите кнопку ОК.

Если вы включите отладчик Just-In-Time, но он не открывается при сбое приложения или ошибках, см. статью об устранении неполадок Just-In-Time отладки.

Отключите JIT-In-Time отладку в реестре Windows.

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

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

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

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

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

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

    JIT registry keyJIT registry keyJIT registry keyраздела реестра JIT

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

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

    • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\DbgManagedDebugger

    Не удаляйте и не изменяйте другие разделы реестра.

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

Включение Just-In-Time отладки формы Windows

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

необработанное исключение Windows Form

Чтобы включить отладку Just-In-Time вместо стандартной обработки ошибок Windows Form, добавьте следующие параметры:

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

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

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

    См. DebuggableAttributeдля получения дополнительной информации.

Используйте JIT-In-Time отладку

В этом примере показано, как выполнить отладку Just-In-Time, когда приложение выдает ошибку.

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

  • Убедитесь, что отладка JIT-In-Time включена в параметрах>Инструменты>Отладка>Just-In-Time.

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

  1. В Visual Studio создайте консольное приложение C# (File>New>Project>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).

    Должно появиться следующее командное окно:

    снимок экрана консоли для ThrowsNullException.exe, которая выбрасывает необработанное исключение нулевой ссылки (System.NullReferenceException).

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

    снимок экрана диалогового окна

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

  6. Нажмите кнопку ОК.

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

    снимок экрана проекта ThrowsNullException в Visual Studio с выделением строки исходного кода, вызвавшего исключение.

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

Осторожность

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

Устранение неполадок при отладке JIT-In-Time

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

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

    Исправление заключается в добавлении значения DWORDавтозас данными значения1в следующие разделы реестра:

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

    • (Для 32-разрядных приложений на 64-разрядных компьютерах) HKEY_LOCAL_MACHINE\Software\WOW6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug

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

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

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

    • (Для 32-разрядных приложений на 64-разрядных компьютерах) HKEY_LOCAL_MACHINE\Software\WOW6432Node\Microsoft\Windows\Windows Error Reporting

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

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

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

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

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

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

    Нет пользователя, вошедшего в консоль, поэтому нет сеанса пользователя для отображения диалогового окна отладки Just-In-Time.

    Чтобы устранить эту проблему, войдите на компьютер.

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

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

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