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


Взаимодействие с подсистемой

Команды и выражения

API обработчика отладчика предоставляет методы для выполнения команд и вычисления выражений, таких как те, которые ввели в командном окне отладчика WinDbg. Чтобы выполнить команду отладчика, используйте команду Выполнить. Или, чтобы выполнить все команды в файле, используйте ExecuteCommandFile.

Метод Evaluate вычисляет выражения с помощью синтаксиса C++ или MASM. Синтаксис, используемый обработчиком отладчика для вычисления выражений, например в методе Evaluate , предоставляется методом GetExpressionSyntax и может быть изменен с помощью SetExpressionSyntaxByName и SetExpressionSyntax. Количество различных синтаксисов, распознаваемых отладчиком, возвращается методом GetNumberExpressionSyntaxes, а их имена — getExpressionSyntaxNames.

Тип значения, возвращаемого методом Evaluate , определяется символами и константами, используемыми в вычисляемой строке. Значение содержится в структуре DEBUG_VALUE и может быть приведено к разным типам с помощью CoerceValue и CoerceValues.

Aliases

Псевдонимы — это символьные строки, которые автоматически заменяются другими символьными строками при использовании в командах и выражениях отладчика. Общие сведения о псевдонимах см. в разделе Использование псевдонимов. Подсистема отладчика имеет несколько классов псевдонимов.

Псевдонимы с фиксированным именем индексируются по числу и имеют имена $u 0, $u 1, ..., $u 9. Значения этих псевдонимов можно задать с помощью метода SetTextMacro и получить с помощью метода GetTextMacro .

Автоматические псевдонимы и псевдонимы с именем пользователя могут иметь любое имя. Автоматические псевдонимы определяются подсистемой отладчика, а именованные пользователем псевдонимы определяются пользователем с помощью команд отладчика или API обработчика отладчика. Чтобы определить или удалить псевдоним с именем пользователя, используйте метод SetTextReplacement . Метод GetTextReplacement возвращает имя и значение автоматического псевдонима или псевдонима с именем пользователя. Все псевдонимы с именем пользователя можно удалить с помощью метода RemoveTextReplacements . Метод GetNumberTextReplacements возвращает количество имен пользователей и автоматических псевдонимов; его можно использовать с GetTextReplacement для итерации по всем этим псевдонимам. Метод OutputTextReplacements выводит список всех именованных пользователем псевдонимов, включая их имена и значения.

Обратите внимание , что если псевдониму с именем пользователя присваивается то же имя, что и автоматическому псевдониму, псевдоним с именем пользователя будет скрывать автоматический псевдоним, чтобы при получении значения псевдонима по имени использовался псевдоним с именем пользователя.

>Параметры подсистемы

Подсистема имеет ряд параметров, которые управляют его поведением. Эти параметры перечислены в DEBUG_ENGOPT_XXX. Они возвращаются GetEngineOptions и могут быть заданы с помощью SetEngineOptions. Отдельные параметры можно задать с помощью AddEngineOptions и отменить с помощью RemoveEngineOptions.

Прерывания

Прерывание — это способ принудительного прерывания в отладчике или для того, чтобы система прекратила обработку текущей команды, например, нажав клавиши CTRL+Break в WinDbg.

Чтобы запросить перерыв в отладчике или прервать текущую задачу отладчика, используйте SetInterrupt. Чтобы проверка прерывания, используйте GetInterrupt.

Примечание При выполнении длительной задачи из расширения отладчика рекомендуется регулярно проверка GetInterrupt и прекратить обработку при запросе прерывания.

При запросе прерывания в отладчике подсистема может истекать, если целевому объекту потребуется слишком много времени для выполнения взлома. Это может произойти, если целевой объект находится в состоянии без ответа или если запрос на прерывание блокируется или задерживается из-за состязания за ресурсы. Время ожидания подсистемы возвращается методом GetInterruptTimeout и может быть задано с помощью SetInterruptTimeout.