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


Отладка с помощью отладчика 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-Time в Visual Studio параметры конфигурации отладчика доступны в меню "Параметры>" или "Параметры>". Отладчик Just-In-Time доступен в разделеотладки и тестирования> компонентов установщика.

Заметка

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

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

  1. В области Инструменты>Параметры разверните раздел Все параметры>Отладка>Общие.

  2. В правой области выберите ссылку "Настроить Just-In-Time отладку".

    Снимок экрана, показывающий, как настроить отладку Just-In-Time в Visual Studio.

  3. В диалоговом окне Параметры отладчика Visual Studio настройте параметр Включить JIT-отладку для указанных типов кода. Выберите типы кода, которые следует отлаживать с помощью Just-In-Time отладки: Managed (.NET Framework) или Native.

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

  1. В диалоговом окне Параметры>инструментов, разверните раздел Отладка>Немедленный вызов.

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

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

  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 включена, настроив отладку JIT-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

Отладка Just-In-Time (JIT) не удается запустить

Если 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.

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

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

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

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

    Доступ запрещен. Попросите администратора включить отладку по требованию или восстановить установку Visual Studio.