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


Присоединение к программе

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

Выбор способа присоединения

Существует три способа, с помощью которых диспетчер отладки сеансов пытается подключиться к отлаживаемой программе.

  1. Для программ, запускаемых подсистемой отладки с помощью метода LaunchSuspended (типичный для интерпретированных языков, например), SDM получает интерфейс IDebugProgramNodeAttach2 из объекта IDebugProgramNode2, связанного с присоединенной программой. Если SDM может получить IDebugProgramNodeAttach2 интерфейс, SDM вызывает метод OnAttach . Метод IDebugProgramNodeAttach2::OnAttach возвращается S_OK , чтобы указать, что он не был присоединен к программе и что другие попытки можно выполнить для присоединения к программе.

  2. Если SDM может получить интерфейс IDebugProgramEx2 из подключенной программы, SDM вызывает метод Attach . Этот подход является типичным для программ, которые были запущены удаленно поставщиком портов.

  3. Если программа не может быть подключена через IDebugProgramNodeAttach2::OnAttach метод или IDebugProgramEx2::Attach методы, SDM загружает подсистему отладки (если она еще не загружена), вызывая CoCreateInstance функцию, а затем вызывает метод Attach . Этот подход является типичным для программ, запускаемых локально поставщиком портов.

    Кроме того, поставщик пользовательского порта может вызвать IDebugEngine2::Attach метод в реализации поставщика пользовательского IDebugProgramEx2::Attach порта. Как правило, в этом случае поставщик пользовательского порта запускает подсистему отладки на удаленном компьютере.

    Вложение достигается, когда диспетчер отладки сеанса вызывает метод Attach .

    Если вы запускаете de de в том же процессе, что и приложение для отладки, необходимо реализовать следующие методы IDebugProgramNode2:

  • GetHostName

  • GetHostPid

  • GetProgramName

    IDebugEngine2::Attach После вызова метода выполните следующие действия в реализации IDebugEngine2::Attach метода:

  1. Отправьте объект события IDebugEngineCreateEvent2 в SDM. Дополнительные сведения см. в разделе "Отправка событий".

  2. Вызовите метод GetProgramId для объекта IDebugProgram2, переданного методуIDebugEngine2::Attach.

    Возвращается значение, используемое GUID для идентификации программы. Он GUID должен храниться в объекте, представляющего локальную программу в DE, и он должен быть возвращен при IDebugProgram2::GetProgramId вызове метода в интерфейсе IDebugProgram2 .

    Примечание.

    При реализации IDebugProgramNodeAttach2 интерфейса программа GUID передается методу IDebugProgramNodeAttach2::OnAttach . Используется GUID для возвращаемых методом IDebugProgram2::GetProgramId программGUID.

  3. Отправьте объект события IDebugProgramCreateEvent2, чтобы уведомить SDM о том, что локальный IDebugProgram2 объект был создан для представления программы в DE. Дополнительные сведения см. в разделе "Отправка событий".

    Примечание.

    Это не тот же IDebugProgram2 объект, который был передан в IDebugEngine2::Attach метод. Ранее переданный IDebugProgram2 объект распознается только портом и является отдельным объектом.