Управление выполнением

Обработчик отладки (DE) обычно отправляет одно из следующих событий в качестве последнего события запуска:

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

  • Событие завершения загрузки, если присоединение к программе, которая уже запущена

    Оба этих события являются остановкой событий, что означает, что DE ожидает ответа от пользователя с помощью интегрированной среды разработки. Дополнительные сведения см. в разделе "Рабочие режимы".

Остановка события

При отправке события остановки в сеанс отладки:

  1. Программа и поток, содержащие текущий указатель инструкции, можно получить из интерфейса событий.

  2. Интегрированная среда разработки определяет текущий файл исходного кода и положение, которое отображается в редакторе.

  3. Сеанс отладки обычно реагирует на это первое событие остановки путем вызова метода Continue программы.

  4. Затем программа запускается, пока не столкнется с условием остановки, например попаданием в точку останова. В этом случае DE отправляет событие точки останова в сеанс отладки. Событие точки останова — это событие остановки, и DE снова ожидает ответа пользователя.

  5. Если пользователь выбирает шаг в функцию, переключения или выхода из нее, интегрированная среда разработки предложит сеансу отладки вызвать метод программы Step . Затем интегрированная среда разработки передает единицу шага (инструкции, инструкции или строки) и тип шага (переход, переход или выход из функции). После завершения действия de отправляет событие завершения шага в сеанс отладки, который является событием остановки.

    –или–

    Если пользователь выбирает продолжить выполнение из текущего указателя инструкций, интегрированная среда разработки предложит сеансу отладки вызвать метод Execute программы. Программа возобновляет выполнение до тех пор, пока не будет обнаружено следующее условие остановки.

    –или–

    Если сеанс отладки не учитывает определенное событие остановки, сеанс отладки вызывает метод Continue программы. Если программа была выполнена, переключилась или выходит из функции, когда она столкнулась с условием остановки, она продолжает шаг.

    Программно, когда DE обнаруживает условие остановки, он отправляет такие события остановки, как IDebugLoadCompleteEvent2 или IDebugEntryPointEvent2 в диспетчер отладки сеансов (SDM) с помощью интерфейса IDebugEventCallback2. DE передает интерфейсы IDebugProgram2 и IDebugThread2, представляющие программу и поток, содержащий текущий указатель инструкции. SDM вызывает IDebugThread2::EnumFrameInfo , чтобы получить верхний кадр стека и вызывает IDebugStackFrame2::GetDocumentContext , чтобы получить контекст документа, связанный с текущим указателем инструкции. Этот контекст документа обычно представляет собой имя файла исходного кода, строку и номер столбца. Интегрированная среда разработки использует их для выделения исходного кода, содержащего текущий указатель инструкции.

    SDM обычно реагирует на это первое событие остановки путем вызова IDebugProgram2::Continue. Затем программа запускается до тех пор, пока она не столкнется с условием остановки, например при нажатии точки останова, в этом случае DE отправляет интерфейс IDebugBreakpointEvent2 в SDM. Событие точки останова — это событие остановки, и DE снова ожидает ответа пользователя.

    Если пользователь выбирает шаг в функцию, переключения или выхода из нее, интегрированная среда разработки предложит SDM вызвать IDebugProgram2::Step. Затем интегрированная среда разработки передает STEPUNIT (инструкцию, инструкцию или строку) и STEPKIND, то есть, следует ли выполнять переход, переход или выход из функции. По завершении действия DE отправляет интерфейс IDebugStepCompleteEvent2 в SDM, который является событием остановки.

    Если пользователь выбирает продолжение выполнения из текущего указателя инструкции, интегрированная среда разработки просит SDM вызвать IDebugProgram2::Execute. Программа возобновляет выполнение до тех пор, пока не будет обнаружено следующее условие остановки.

    Если пакет отладки должен игнорировать определенное событие остановки, пакет отладки вызывает SDM, который вызывает IDebugProgram2::Continue. Если программа шагнула в функцию, переключение или выход из нее, когда она столкнулась с условием остановки, он продолжает шаг. Это означает, что программа поддерживает состояние пошагового выполнения, чтобы он знал, как продолжить.

    Вызовы SDM выполняются Stepв , Execute и Continue являются асинхронными, что означает, что SDM ожидает, что вызов возвращается быстро. Если DE отправляет событие остановки SDM в том же потоке перед Stepвыполнением или продолжением, SDM перестает отвечать.