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


Отладка сеанса и модели выполнения

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

Цикл main отладчика обычно состоит из установки состояния выполнения, вызова метода WaitForEvent и обработки сгенерированных событий. При вызове WaitForEvent сеанс становится недоступным.

При возникновении события в целевом объекте подсистема приостанавливает все целевые объекты, и сеанс становится доступным. Затем подсистема уведомляет обратные вызовы события о событии и следует правилам фильтрации событий. Обратные вызовы событий и фильтры событий определяют, как должно выполняться выполнение в целевом объекте. Если они определяют, что подсистема должна врезаться в отладчик, метод WaitForEvent возвращается, и сеанс остается доступным; В противном случае подсистема возобновит выполнение целевого объекта способом, определенным обратными вызовами событий и фильтрами событий, и сеанс снова станет недоступным.

Во время вызова WaitForEvent , в частности при уведомлении обратных вызовов события и обработке правил фильтра, подсистема находится в состоянии , называемом "внутри ожидания". В этом состоянии метод WaitForEvent не может вызываться (он не является повторным).

Для инициации выполнения в целевом объекте необходимо выполнить два этапа: установка состояния выполнения и последующий вызов WaitForEvent. Состояние выполнения можно задать с помощью метода SetExecutionStatus или с помощью команды отладчика, которая задает состояние выполнения, например g(Go) и p (Step).

Если последовательность команд отладчика выполняется вместе, например " g ; ? @$ip" — неявное ожидание будет происходить после любой команды, которая требует выполнения в целевом объекте, если эта команда не является последней командой в последовательности. Неявное ожидание не может произойти, если обработчик отладчика находится в состоянии "внутри ожидания"; в этом случае выполнение команд будет остановлено, а текущая команда , которая пыталась вызвать неявное ожидание, будет интерпретироваться как указание на то, как должно выполняться выполнение в целевом объекте. Остальные команды будут удалены.

Примечание При определении того, является ли сеанс доступным или недоступным, ограниченное выполнение целевого объекта (например, пошаговое выполнение) считается выполнением подсистемы. После завершения ограниченного выполнения сеанс становится доступным.

Подсистема узла

При удаленной отладке можно использовать несколько экземпляров подсистемы отладчика. Именно один из этих экземпляров поддерживает сеанс отладки; Этот экземпляр называется подсистемой узла.

Все операции отладчика связаны с ядром узла, например загрузка символов и загрузка расширений.