- PHP 8: Как включить JIT
- PHP JIT
- Кратко для системных администраторов
- Как настроить JIT в PHP 8
- O — Уровень оптимизации
- T — триггер JIT
- R — распределение регистров
- C — флаги оптимизации CPU
- Отладка JIT (opcache.jit_debug)
- Улучшит ли JIT производительность?
- Отладка с помощью JIT-отладчика в Visual Studio Debug using the Just-In-Time Debugger in Visual Studio
- Включение или отключение JIT-отладки в Visual Studio Enable or disable Just-In-Time debugging in Visual Studio
- Отключение JIT-отладки из реестра Windows Disable Just-In-Time debugging from the Windows registry
- Включение JIT-отладки для приложений Windows Forms Enable Just-In-Time debugging of a Windows Form
- Использование JIT-отладки Use Just-In-Time debugging
- Устранение неполадок с JIT-отладкой Troubleshoot Just-In-Time debugging
PHP 8: Как включить JIT
пробуем вместе настроить JIT в PHP
PHP 8 добавляет к ядру PHP JIT-компилятор, который может значительно повысить производительность
JIT-компиляторы очень сложны, потому что для того, чтобы добиться от них хорошей производительности, обычно нужно выбирать, какие именно части промежуточного языка должны компилироваться в машинный код, а какие нет. Преобразование в машинный код не всегда происходит быстрее, в зависимости от конкретных деталей кода и рассматриваемого языка. Кроме того, процесс преобразования упрощенного кода в машинный код может занять больше времени, чем просто однократный запуск упрощенного кода и мгновенного завершение его работы.
По этой причине большинство JIT-компиляторов анализируют код во время его выполнения, чтобы определить, какие части дают наилучшую отдачу, а затем компилируют только эти биты. Т еоретически, о тличный результат состоит в том, что программа буквально становится быстрее по мере ее выполнения, а JIT-компилятор в виртуальной машине узнает, какие части кода нужно оптимизировать.
Java была первым широко распространенным языком, включившим JIT в свою виртуальную машину. Большинство основных движков Javascript теперь тоже. И, начиная с PHP 8.0, к этому списку присоединился и PHP.
PHP JIT
JIT в PHP появилась давно. На самом деле он находился в разработке в течение нескольких лет и почти был выпущен в PHP 7.4. Работа по созданию JIT в PHP была тем импульсом, который привел к серьезному переписыванию движка, что дало версии 7.0 значительный прирост производительности.
PHP JIT построен как расширение кеша опкодов. Это означает, что его можно включать и отключать либо при сборке самого PHP, либо во время выполнения через php.ini.
Честно говоря, настройка JIT — один из самых запутанных способов настройки расширения PHP, который я когда-либо видел. К счастью, есть несколько сокращений конфигурации, которые упрощают настройку. Тем не менее, будет очень полезным знать как настраивать JIT, так что приступим.
Кратко для системных администраторов
В PHP 8.0 JIT как бы включен по умолчанию, но и выключен. Требуется только минимальная конфигурация php.ini, подобная этой:
Как настроить JIT в PHP 8
Прежде всего, JIT будет работать, только если включен opcache, хоть по умолчанию в PHP он и включен, вы все равно должны убедиться, что в вашем php.ini файле установлено значение opcache.enable = 1. Включение самого JIT осуществляется путем установки в php.ini параметра opcache.jit_buffer_size в ненулевое значение. Это контролирует, сколько места в памяти JIT может заполнить оптимизированным машинным кодом. Однако больше не всегда лучше, поскольку JIT также может тратить время на компиляцию кода, который на самом деле не выигрывает от компиляции.
Обратите внимание, что если вы запускаете PHP через командную строку, вы также можете передать эти параметры через флаг -d вместо того, чтобы добавлять их в php.ini:
Если эта директива отсутствует, то значение по умолчанию будет равно 0, и JIT не будет работать.
Так же, если вы тестируете JIT в сценарии CLI, вы должны использовать opcache.enable_cli для включения opcache:
Разница между opcache.enable и opcache.enable_cli заключается в том, что первый вариант следует использовать тогда, когда вы, например, используете встроенный PHP-сервер. Если вы на самом деле запускаете сценарий CLI, вам понадобится opcache.enable_cli.
Прежде чем продолжить, давайте убедимся, что JIT действительно работает, создадим PHP-скрипт, доступный через браузер или CLI (в зависимости от того, где вы тестируете JIT), и посмотрим на вывод opcache_get_status():
Результат будет примерно таким:
Если enabled и on стоят в true, то все работает как надо!
Далее есть несколько способов настроить JIT (и здесь мы попадем в круговорот беспорядка конфигурации). Вы можете настроить, когда должен работать JIT, с какой степенью он должен пытаться оптимизировать и т.д. Все эти параметры настраиваются с помощью всего одной записи конфигурации(!): opcache.jit. Выглядит это так:
В RFC можно почитать что означает каждое из чисел. Имейте в виду: это не битовая маска, каждое число просто представляет собой различный вариант конфигурации. Итак, RFC дает нам следующие варианты:
O — Уровень оптимизации
0 | не JIT |
1 | минимальный JIT (вызов стандартных обработчиков ВМ) |
2 | выборочное встраивание обработчика ВМ |
3 | оптимизированный JIT на основе статического вывода типов отдельной функции |
4 | оптимизированный JIT на основе статического вывода типов и дерева вызовов |
5 | оптимизированная JIT на основе статического вывода типов и анализа внутренних процедур |
T — триггер JIT
0 | JIT все функции при первой загрузке скрипта |
1 | Функция JIT при первом выполнении |
2 | Профилировать по первому запросу и компилировать горячие функции по второму запросу |
3 | Профилировать на лету и компилировать горячие функции |
4 | |
5 | Трассировка JIT |
R — распределение регистров
0 | не выполнять распределение регистров |
1 | использовать локальный распределитель регистров liner-scan |
2 | использовать глобальный распределитель регистров liner-scan |
C — флаги оптимизации CPU
0 | нет |
1 | включить генерацию инструкций AVX |
Одно небольшое уточнение: Перечислять эти параметры нужно в обратном порядке, поэтому первая цифра представляет C значение, вторая — R, третья — T и четвертая — O. Почему просто не были добавлены четыре записи конфигурации, я не понимаю, вероятно, чтобы ускорить настройку JIT, может быть.
В любом случае, рекомендуется устанавливать значение 1255 в качестве наиболее оптимального, тогда будет выполняться максимальный «джитинг», используя JIT трассировки, глобальный распределитель регистров liner-scan — что бы это ни было, черт возьми, и позволяет генерировать инструкции AVX.
Итак, ваши ini-настройки (или флаги -d ) должны иметь следующие значения:
Имейте в виду, что необязательно настраивать opcache.jit. JIT будет использовать значение по умолчанию, если это свойство не указано. А какой по умолчанию, спросите вы? А вот какое opcache.jit=tracing.
Что еще за трассировка, спросите вы, это совсем не та странная структура, похожая на битовую маску, которую мы видели ранее. И вы будете правы: после того, как был принят исходный RFC, контрибьюторы ядра PHP осознали, что параметры-шифры, подобные битовой маске, не очень удобны для пользователя, поэтому они добавили два человечески понятные псевдонима, которые транслируются в ту самую битовую маску под капотом. Есть opcache.jit=tracing и opcache.jit=function.
Разница между ними заключается в том, что при параметре функции JIT пытается оптимизировать код только в рамках одной функции, в то время как JIT трассировка может просматривать всю трассировку стека, чтобы идентифицировать и оптимизировать горячий код. PHP Internals рекомендует использовать JIT-трассировку, потому что она почти всегда дает наилучшие результаты.
Таким образом, единственно что от вас потребуется, чтобы включить JIT с его оптимальной конфигурацией — это установка opcache.jit_buffer_size, но если вы хотите установить конфигурацию явно, включение параметра opcache.jit будет не такой уж плохой идеей:
Отладка JIT (opcache.jit_debug)
PHP JIT обеспечивает способ выдачи отладочной информации JIT путем установки конфигурации INI. Когда установлен определенный флаг, он выводит код сборки для дальнейшей проверки.
Директива opcache.jit_debug принимает значение битовой маски для включения определенных функций. В настоящее время он принимает значение в диапазоне от 1 (0b1) до 20 двоичных разрядов. Значение 1048576 представляет максимальный уровень вывода отладки.
JIT поддерживает несколько других параметров конфигурации, чтобы настроить, сколько вызовов функций делает ее «горячей» функцией, которая затем компилируется JIT, и порог для определения того, какие функции следует «JIT’ировать», на основе процента общих вызовов функций.
Улучшит ли JIT производительность?
Короче, «это зависит от обстоятельств». Для веб-приложений может и не очень, но вот для PHP как экосистемы даже может чрезмерно.
PHP, по замыслу, обычно работает в конфигурации без совместного использования ресурсов. После обработки каждого запроса приложение полностью закрывается. Это дает JIT очень мало времени на анализ и оптимизацию кода, тем более, что большая часть кода в типичном веб-запросе выполняется только один раз, поскольку запрос обрабатывается линейно. Кроме того, большей частью этих приложений часто является ввод-вывод (в основном, общение с базой данных), и JIT вообще не может с этим помочь. Результаты тестов, которые были опубликованы на данный момент, показывают, что JIT предлагает лишь незначительное повышение производительности в типичных приложениях PHP, запускаемых через PHP-FPM.
JIT потенциально может быть действительно полезен в тех случаях, где PHP сегодня совсем не рассматривается. Реальные преимущества будут видны в работе постоянных демонов, парсерах, машинном обучении и других длительных процессах, интенсивно использующих CPU.
PHP-Parser — это «анализатор PHP, написанный на PHP». Он от того же Никиты Попова, и используется многими инструментами статического анализа, представленными сегодня на рынке, такими как, например, PHPStan и пр. Никита сообщил, что PHP-Parser в некоторых случаях работает в два раза быстрее с новым движком JIT.
Асинхронные приложения, написанные на React PHP или AmPHP , вероятно, также увидят заметное улучшение, хотя и не настолько, как правило, они выполняют много операций ввода-вывода (где JIT бесполезен).
Может быть для вас будет шоком узнать, что для PHP доступны библиотеки машинного обучения, такие как Rubix ML или PHP-ML. Они не так широко используются, как их собраты на Python, отчасти потому, что при интерпретации они, как правило, медленнее, чем библиотеки C с красивыми оболочками Python. Однако с JIT эти задачи с интенсивным использованием CPU могут оказаться такими же быстрыми или, возможно, даже более быстрыми, чем те, которые доступны на других языках.
PHP больше не является «просто самым быстрым из основных языков веб-сценариев». Теперь это жизнеспособный высокопроизводительный язык общей обработки данных, с передачей постоянных воркеров, машинного обучения и других высокопроизводительных задач, в руки миллионов PHP-разработчиков по всему миру.
В первую очередь мы должны поблагодарить Дмитрия Стогова и Зеева Сураски за многолетние усилия по реализации этого RFC .
Веб-разработчик со стажем программирования более 6 лет, постоянно учусь, люблю делать новые проекты.
Отладка с помощью JIT-отладчика в Visual Studio Debug using the Just-In-Time Debugger in Visual Studio
JIT-отладка автоматически запускает Visual Studio при возникновении ошибок или сбоев в приложении, запущенном вне Visual Studio. Just-In-Time debugging can launch Visual Studio automatically when an app running outside Visual Studio errors or crashes. С помощью JIT-отладки можно тестировать приложения за пределами Visual Studio и открыть Visual Studio, чтобы начать отладку в случае проблемы. With Just-In-Time debugging, you can test apps outside of Visual Studio, and open Visual Studio to begin debugging when a problem occurs.
JIT-отладка работает для классических приложений Windows. Just-In-Time debugging works for Windows desktop apps. Она не работает для универсальных приложений Windows или управляемого кода, размещенного в приложении машинного кода, например для визуализаторов. It does not work for Universal Windows Apps, or for managed code that is hosted in a native application, such as Visualizers.
Если вы просто хотите запретить отображение диалогового окна JIT-отладчика, но у вас не установлена Visual Studio, см. раздел Отключение JIT-отладчика. If you just want to stop the Just-In-Time Debugger dialog box from appearing, but don’t have Visual Studio installed, see Disable the Just-In-Time Debugger. Если набор средств Visual Studio был ранее установлен, но теперь его нет, придется отключить JIT-отладку через реестр Windows. If you once had Visual Studio installed, you may need to disable Just-In-Time debugging from the Windows registry.
Включение или отключение JIT-отладки в Visual Studio Enable or disable Just-In-Time debugging in Visual Studio
Чтобы включить или отключить JIT-отладку, необходимо запустить Visual Studio от имени администратора. To enable or disable Just-In-Time debugging, you must be running Visual Studio as an administrator. Включение или отключение JIT-отладки устанавливает раздел реестра. Для его изменения требуются права администратора. Enabling or disabling Just-In-Time debugging sets a registry key, and administrator privileges may be required to change that key. Откройте Visual Studio с правами администратора, щелкнув приложение Visual Studio правой кнопкой мыши и выбрав Запуск от имени администратора. To open Visual Studio as an administrator, right-click the Visual Studio app and choose Run as administrator.
JIT-отладку можно настроить в диалоговом окне Visual Studio Сервис > Параметры (или Отладка > Параметры). You can configure Just-In-Time debugging from the Visual Studio Tools > Options (or Debug > Options) dialog box.
Включение или отключение JIT–отладки To enable or disable Just-In-Time debugging:
В меню Сервис или Отладка выберите Параметры > Отладка > JIT. On the Tools or Debug menu, select Options > Debugging > Just-In-Time.
В поле Включить JIT-отладку для этих типов кода выберите типы кода, которым требуется JIT-отладка: Управляемый, Собственный и (или) Скрипт. In the Enable Just-In-Time debugging for these types of code box, select the types of code you want Just-In-Time debugging to debug: Managed, Native, and/or Script.
Нажмите кнопку ОК. Select OK.
Если вы включили JIT-отладчик, но он не открывается при сбоях или ошибках приложения, см. раздел Устранение неполадок с JIT-отладкой. If you enable the Just-In-Time debugger, but it doesn’t open when an app crashes or errors, see Troubleshoot Just-In-Time debugging.
Отключение JIT-отладки из реестра Windows Disable Just-In-Time debugging from the Windows registry
JIT-отладка может оставаться включенной даже после удаления Visual Studio с компьютера. Just-In-Time debugging may still be enabled even if Visual Studio is no longer installed on your computer. Если Visual Studio больше не установлена, JIT-отладку можно отключить, отредактировав реестр Windows. If Visual Studio is no longer installed, you can disable Just-In-Time debugging by editing the Windows registry.
Отключение JIT-отладки путем редактирования реестра To disable Just-In-Time debugging by editing the registry:
В меню Windows Пуск запустите редактор реестра (regedit.exe). From the Windows Start menu, run the Registry Editor (regedit.exe).
В окне Редактор реестра найдите и удалите следующие записи реестра. In the Registry Editor window, locate and delete the following registry entries:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\DbgManagedDebugger HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\DbgManagedDebugger
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug\Debugger HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug\Debugger
Если на компьютере установлена 64-разрядная операционная система, также удалите следующие записи реестра. If your computer is running a 64-bit operating system, also delete the following registry entries:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\DbgManagedDebugger HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\DbgManagedDebugger
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug\Debugger HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug\Debugger
Будьте внимательны, чтобы не удалить или не изменить другие разделы реестра. Make sure not to delete or change any other registry keys.
Закройте окно Редактор реестра. Close the Registry Editor window.
Включение JIT-отладки для приложений Windows Forms Enable Just-In-Time debugging of a Windows Form
По умолчанию в приложениях Windows Forms есть обработчик исключений верхнего уровня, который позволяет приложению продолжить работу, если оно может быть восстановлено. By default, Windows Form apps have a top-level exception handler that lets the app keep running if it can recover. Если приложение Windows Forms выдает необработанное исключение, отображается следующее диалоговое окно: If a Windows Forms app throws an unhandled exception, it shows the following dialog:
Чтобы включить JIT-отладку вместо стандартной обработки ошибок Windows Forms, добавьте следующие параметры. To enable Just-In-Time debugging instead of standard Windows Form error handling, add these settings:
Для приложений Windows Forms, написанных на языке C++, в файле CONFIG или коде также задайте для параметра DebuggableAttribute значение true . In a C++ Windows Form application, also set DebuggableAttribute to true in a .config file or in your code. Если компиляция выполняется с атрибутом /Zi, но без /Og, компилятор автоматически задаст этот атрибут. If you compile with /Zi and without /Og, the compiler sets this attribute for you. Однако если требуется выполнить отладку неоптимизированной сборки выпуска, то необходимо задать DebuggableAttribute , добавив следующую строку в файл AssemblyInfo.cpp приложения: If you want to debug a non-optimized release build, however, you must set DebuggableAttribute by adding the following line in your app’s AssemblyInfo.cpp file:
Для получения дополнительной информации см. DebuggableAttribute. For more information, see DebuggableAttribute.
Использование JIT-отладки Use Just-In-Time debugging
В этом примере рассматривается JIT-отладка, когда приложение выдает ошибку. This example walks you through Just-In-Time debugging when an app throws an error.
Для выполнения инструкций необходимо установить Visual Studio. You must have Visual Studio installed to follow these steps. Если у вас нет Visual Studio, вы можете скачать бесплатный выпуск Visual Studio Community. If you don’t have Visual Studio, you can download the free Visual Studio Community Edition.
Убедитесь, что JIT-отладка включена в разделе Сервис > Параметры > Отладка > JIT. Make sure Just-In-Time debugging is enabled in Tools > Options > Debugging > Just-In-Time.
В этом примере вы создадите консольное приложение C# в Visual Studio, которое создает исключение NullReferenceException. For this example, you’ll make a C# console app in Visual Studio that throws a NullReferenceException.
В Visual Studio создайте консольное приложение C# (Файл > Создать > Проект > Visual C# > Консольное приложение) с именем ThrowsNullException. In Visual Studio, create a C# console app (File > New > Project > Visual C# > Console Application) named ThrowsNullException. Сведения о создании проектов в Visual Studio см. в разделе Пошаговое руководство. Создание простого приложения. For more information about creating projects in Visual Studio, see Walkthrough: Create a simple application.
Когда проект откроется в Visual Studio, откройте файл Program.cs. When the project opens in Visual Studio, open the Program.cs file. Замените метод Main() следующим кодом, который выводит строку на консоль, а затем создает исключение NullReferenceException: Replace the Main() method with the following code, which prints a line to the console and then throws a NullReferenceException:
Чтобы выполнить сборку решения, выберите конфигурацию Отладка (по умолчанию) или Выпуск, а затем нажмите Сборка > Перестроить решение. To build the solution, choose either the Debug (default) or Release configuration, and then select Build > Rebuild Solution.
- Выберите конфигурацию Отладка для полной отладки. Choose Debug configuration for the full debugging experience.
- Если выбрана конфигурация Выпуск, необходимо отключить функцию Только мой код. If you select Release configuration, you must turn off Just My Code for this procedure to work. В разделе Сервис >Параметры >Отладка снимите флажок Включить только мой код. Under Tools >Options >Debugging, deselect Enable Just My Code.
Дополнительные сведения о конфигурациях сборки см. в разделе Общие сведения о конфигурациях сборки. For more information about build configurations, see Understanding build configurations.
Откройте созданное приложение ThrowsNullException.exe в папке проекта C# ( . \ThrowsNullException\ThrowsNullException\bin\Debug или . \ThrowsNullException\ThrowsNullException\bin\Release). Open the built app ThrowsNullException.exe in your C# project folder (. \ThrowsNullException\ThrowsNullException\bin\Debug or . \ThrowsNullException\ThrowsNullException\bin\Release).
Вы увидите следующее окно команд: You should see the following command window:
Откроется диалоговое окно Выбор JIT-отладчика. The Choose Just-In-Time Debugger dialog opens.
В разделе Доступные отладчики выберите параметр Новый экземпляр , если он еще не выбран. Under Available Debuggers, select New instance of , if not already selected.
Нажмите кнопку ОК. Select OK.
Проект ThrowsNullException открывается в новом экземпляре Visual Studio, а выполнение остановлено в строке, вызвавшей исключение: The ThrowsNullException project opens in a new instance of Visual Studio, with execution stopped at the line that threw the exception:
Теперь можно начать отладку. You can start debugging at this point. При отладке реального приложения необходимо выяснить, почему код создает исключение. If you were debugging a real app, you would need to find out why the code is throwing the exception.
Если приложение содержит ненадежный код, появляется диалоговое окно предупреждения системы безопасности, позволяющее решить, следует ли продолжить отладку. If your app contains untrusted code, a security warning dialog box appears, enabling you to decide whether to proceed with debugging. Перед продолжением отладки решите, доверяете ли вы данному коду. Before you continue debugging, decide whether you trust the code. Этот код написан вами самостоятельно? Did you write the code yourself? Если приложение выполняется на удаленном компьютере, узнаете ли вы имя процесса? If the application is running on a remote machine, do you recognize the name of the process? Если приложение выполняется локально, учитывайте возможность выполнения такого вредоносного кода на вашем компьютере. If the app is running locally, consider the possibility of malicious code running on your computer. Если вы решили, что код заслуживает доверия, нажмите ОК. If you decide the code is trustworthy, select OK. В противном случае нажмите кнопку Отмена. Otherwise, select Cancel.
Устранение неполадок с JIT-отладкой Troubleshoot Just-In-Time debugging
Если JIT-отладка не запускается при сбое приложения, даже если она включена в Visual Studio: If Just-In-Time debugging doesn’t start when an app crashes, even though it is enabled in Visual Studio:
Отчеты об ошибках Windows могут взять на себя обработку ошибок на компьютере. Windows Error Reporting could be taking over the error handling on your computer.
Чтобы устранить эту проблему, используйте редактор реестра, чтобы добавить значение DWORD Отключено с параметром Данные значения, равным 1, для следующих разделов реестра: To fix this issue, use Registry Editor to add a DWORD Value of Disabled, with Value data of 1, to the following registry keys:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\Windows Error Reporting HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\Windows Error Reporting
(Для 64-разрядных компьютеров): HKEY_LOCAL_MACHINE\Software\WOW6432Node\Microsoft\Windows\Windows Error Reporting (For 64-bit machines): HKEY_LOCAL_MACHINE\Software\WOW6432Node\Microsoft\Windows\Windows Error Reporting
Дополнительные сведения см. в разделе Параметры .WER. For more information, see .WER settings.
Известная проблема Windows может привести к сбою JIT-отладчика. A known Windows issue may be causing the Just-In-Time debugger to fail.
Исправление состоит в том, чтобы добавить значение DWORD из раздела Видимые с параметром Значение данных, равным 1, в следующие разделы реестра. The fix is to add a DWORD Value of Auto, with Value data of 1, to the following registry keys:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug
(Для 64-разрядных компьютеров): HKEY_LOCAL_MACHINE\Software\WOW6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug (For 64-bit machines): HKEY_LOCAL_MACHINE\Software\WOW6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug
Во время JIT-отладки могут отображаться следующие сообщения об ошибках. You might see the following error messages during Just-In-Time debugging:
Не удалось подключиться к аварийному процессу. Указанная программа не является программой Windows или MS–DOS. Unable to attach to the crashing process. The specified program is not a Windows or MS-DOS program.
Отладчик попытался подключиться к процессу, выполняющемуся под именем другого пользователя. The debugger tried to attach to a process running under another user.
Чтобы обойти эту проблему, запустите Visual Studio, откройте диалоговое окно Отладка > Присоединение к процессу и найдите процесс, для которого требуется выполнить отладку, в списке Доступные процессы. To work around this problem, in Visual Studio, open Debug > Attach to Process, and find the process you want to debug in the Available Processes list. Если имя процесса неизвестно, найдите идентификатор процесса в диалоговом окне JIT-отладчик Visual Studio. If you do not know the name of the process, find the Process ID in the Visual Studio Just-In-Time Debugger dialog. Выберите процесс в списке Доступные процессы и щелкните Присоединить. Select the process in the Available Processes list, and select Attach. Выберите Нет, чтобы закрыть диалоговое окно JIT-отладчика. Select No to dismiss the Just-In-Time debugger dialog.
Не удалось запустить отладчик, так как пользователь не вошел в систему. Debugger could not be started because no user is logged on.
В консоли нет пользователей, выполнивших вход, а также отсутствует сеанс пользователя, в котором следовало бы отображать диалоговое окно JIT-отладки. There is no user logged onto the console, so there is no user session to display the Just-In-Time debugging dialog.
Для решения этой проблемы необходимо войти в компьютер. To fix this problem, log onto the machine.
Класс не зарегистрирован. Class not registered.
Отладчик пытался создать класс COM, который не зарегистрирован, вероятно, из-за проблем с установкой. The debugger tried to create a COM class that is not registered, probably due to an installation problem.
Чтобы решить эту проблему, используйте Visual Studio Installer для переустановки или исправления установки Visual Studio. To fix this problem, use the Visual Studio Installer to reinstall or repair your Visual Studio installation.