Присоединение и отключение программы
Присоединение отладчика требует отправки правильной последовательности методов и событий с соответствующими атрибутами.
Последовательность методов и событий
- Диспетчер отладки сеанса вызывает метод OnAttach . На основе модели IDebugProgramNodeAttach2::OnAttach процесса обработчика отладки (DE) метод возвращает один из следующих методов, который определяет, что происходит дальше. Если S_FALSE возвращается, подсистема отладки успешно подключена к программе. В противном случае метод Attach вызывается для завершения процесса присоединения. Если S_OK возвращается, de de должен быть загружен в том же процессе, что и SDM. SDM выполняет следующие задачи:
- Вызывает GetEngineInfo , чтобы получить сведения о подсистеме DE.
- Совместно создает DE.
- Подключение вызовов.
Связанный контент
В Visual Studio 2022 вместо запуска программы — присоединение, что делать?
Doctor Strange Мыслитель (7546) hehceheh8eq ffeewrfwqerfwqefewq, 2021 нет версии, откатись на предыдущую версию 2022
Alex AleksandrovichУченик (135) 1 год назад
Мне как-то скинули код и я по ошибке сперва открыл просто main.cpp и соответственно выскакивало такое окно, потому что проект по сути не был создан.
У меня решилась проблема так: скопировал код в блокнот с main, создал новый проект для консоли и уже туда вставил. Скомпилировалось дальше обычно. VS2022, ес чёDoctor Strange Мыслитель (7546) Alex Aleksandrovich, а я удалил две папки дотнета и запустил восстановление студии и все работает
Подключение непосредственно к программе
Пользователи, которые хотят отладить программы в процессе, который уже выполняется, обычно следует этому процессу:
- В интегрированной среде разработки выберите команду «Отладка процессов » в меню «Сервис «. Откроется диалоговое окно Процессы.
- Выберите процесс и нажмите кнопку «Присоединить «. Откроется диалоговое окно «Присоединение к процессу «, в котором перечислены все модули отладки (DEs), установленные на компьютере.
- Укажите DES для отладки выбранного процесса и нажмите кнопку «ОК«. Пакет отладки запускает сеанс отладки и передает в него список DES. Сеанс отладки, в свою очередь, передает этот список вместе с функцией обратного вызова в выбранный процесс, а затем запрашивает процесс перечисления выполняемых программ. Программно в ответ на запрос пользователя пакет отладки создает экземпляр диспетчера отладки сеанса (SDM) и передает в него список выбранных DES. Вместе со списком пакет отладки передает интерфейс IDebugEventCallback2 . Пакет отладки передает список DES выбранному процессу путем вызова IDebugProcess2::Attach. Затем SDM вызывает IDebugProcess2::EnumPrograms на порту, чтобы перечислить программы, выполняемые в процессе. С этого момента каждый модуль отладки подключается к программе точно так же, как подробно описано в приложении присоединения после запуска с двумя исключениями. Для повышения эффективности DES, реализованные для совместного использования адресного пространства с SDM, группируются таким образом, чтобы каждый de имеет набор программ, к которым он присоединяется. В этом случае IDebugProcess2 вызывает IDebugEngine2::Attach и передает его массив программ для подключения. Второе исключение заключается в том, что события запуска, отправленные DE, присоединенные к программе, которая уже запущена, обычно не включают событие точки входа.
Связанный контент
- Отправка событий запуска после запуска
- Задачи отладки
Дополнительные ресурсы
Значок отказа согласно Закону Калифорнии о защите конфиденциальности потребителей (CCPA)
Присоединение к программе
После регистрации программ с соответствующим портом необходимо подключить отладчик к программе, которую вы хотите отладить.
Выбор способа присоединения
Существует три способа, с помощью которых диспетчер отладки сеансов пытается подключиться к отлаживаемой программе.
- Для программ, запускаемых подсистемой отладки с помощью метода LaunchSuspended (типичный для интерпретированных языков, например), SDM получает интерфейс IDebugProgramNodeAttach2 из объекта IDebugProgramNode2, связанного с присоединенной программой. Если SDM может получить IDebugProgramNodeAttach2 интерфейс, SDM вызывает метод OnAttach . Метод IDebugProgramNodeAttach2::OnAttach возвращается S_OK , чтобы указать, что он не был присоединен к программе и что другие попытки можно выполнить для присоединения к программе.
- Если SDM может получить интерфейс IDebugProgramEx2 из подключенной программы, SDM вызывает метод Attach . Этот подход является типичным для программ, которые были запущены удаленно поставщиком портов.
- Если программа не может быть подключена через IDebugProgramNodeAttach2::OnAttach метод или IDebugProgramEx2::Attach методы, SDM загружает подсистему отладки (если она еще не загружена), вызывая CoCreateInstance функцию, а затем вызывает метод Attach . Этот подход является типичным для программ, запускаемых локально поставщиком портов. Кроме того, поставщик пользовательского порта может вызвать IDebugEngine2::Attach метод в реализации поставщика пользовательского IDebugProgramEx2::Attach порта. Как правило, в этом случае поставщик пользовательского порта запускает подсистему отладки на удаленном компьютере. Вложение достигается, когда диспетчер отладки сеанса вызывает метод Attach . Если вы запускаете de de в том же процессе, что и приложение для отладки, необходимо реализовать следующие методы IDebugProgramNode2:
- GetHostName
- GetHostPid
- GetProgramName IDebugEngine2::Attach После вызова метода выполните следующие действия в реализации IDebugEngine2::Attach метода:
Примечание. При реализации IDebugProgramNodeAttach2 интерфейса программа GUID передается методу IDebugProgramNodeAttach2::OnAttach . Используется GUID для возвращаемых методом IDebugProgram2::GetProgramId программ GUID .
Примечание. Это не тот же IDebugProgram2 объект, который был передан в IDebugEngine2::Attach метод. Ранее переданный IDebugProgram2 объект распознается только портом и является отдельным объектом.
Связанный контент
- Вложение на основе запуска
- Отправка событий
- LaunchSuspended
- IDebugProgram2
- IDebugProgramCreateEvent2
- IDebugProgramNodeAttach2
- OnAttach
- IDebugProgramNode2
- GetProgramId
- IDebugProgramEx2
- Присоединить
- Присоединить