Присоединение к программе
После регистрации программ с соответствующим портом необходимо подключить отладчик к программе, которую вы хотите отладить.
Выбор способа присоединения
Существует три способа, с помощью которых диспетчер отладки сеансов пытается подключиться к отлаживаемой программе.
Для программ, запускаемых подсистемой отладки с помощью метода 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:
-
IDebugEngine2::Attach
После вызова метода выполните следующие действия в реализацииIDebugEngine2::Attach
метода:
Отправьте объект события IDebugEngineCreateEvent2 в SDM. Дополнительные сведения см. в разделе "Отправка событий".
Вызовите метод GetProgramId для объекта IDebugProgram2, переданного методу
IDebugEngine2::Attach
.Возвращается значение, используемое
GUID
для идентификации программы. ОнGUID
должен храниться в объекте, представляющего локальную программу в DE, и он должен быть возвращен приIDebugProgram2::GetProgramId
вызове метода в интерфейсеIDebugProgram2
.Примечание.
При реализации
IDebugProgramNodeAttach2
интерфейса программаGUID
передается методуIDebugProgramNodeAttach2::OnAttach
. ИспользуетсяGUID
для возвращаемых методомIDebugProgram2::GetProgramId
программGUID
.Отправьте объект события IDebugProgramCreateEvent2, чтобы уведомить SDM о том, что локальный
IDebugProgram2
объект был создан для представления программы в DE. Дополнительные сведения см. в разделе "Отправка событий".Примечание.
Это не тот же
IDebugProgram2
объект, который был передан вIDebugEngine2::Attach
метод. Ранее переданныйIDebugProgram2
объект распознается только портом и является отдельным объектом.