В качестве примера рассмотрим добавление
В качестве примера рассмотрим добавление входа с авторасширением для структуры PROCESS_INFORMATION, которая посылается в API-функцию createProcess. Первый шаг состоит в проверке того, что отладчик Visual C++ распознает в качестве типа. В примере программы переменная PROCESS_INFORMATION помещена в окно
Watch, на ней выполнен щелчок правой кнопкой мыши и выбран пункт
Properties контекстного меню. В диалоговом окне
Program Variable Properties в качестве метки (имени) типа указан идентификатор _PROCESS_INFORMATION, который, если посмотреть на определение структуры, приведенное ниже, соответствует метке структуры.
typedef struct _PROCESS_INFORMATION {
HANDLE hProcess;
HANDLE hThread;
DWORD dwProcessId;
DWORD dwThreadld;
} PROCESS_INFORMATION
Документация в AUTOEXP.DAT говорит, что формат для авторасширяемого входа таков:
тип = [текст]<член[,формат]>....
В табл. 5.5 показаны значения каждого поля этого формата. Обратите внимание, что в авторасширении можно показать несколько членов.
Таблица 5.5. Входы авторасширений в AUTOEXP.DAT
Поле
|
Описание
|
Тип
|
Имя типа. Для шаблонных типов, за этим полем может следовать поле со звездочкой "<*>", чтобы охватить все производные типы
|
Текст
|
Любой литеральный текст. Эта поле, в общем случае, есть имя члена или его короткая версия
|
Член
|
Фактический член данных, который будет показан в окне Watch. Этим полем может быть выражение (так, если нужно добавить некоторые смещения к различным указателям, то в вычисление можно включить смещения). Работают также операции приведения типов
|
Формат
|
Дополнительные спецификаторы формата для членов-переменных. Это те же спецификаторы, что и форматирующие символы, показанные в табл. 5.3
|
Если с помощью структуры PROCESS_INFORMATION требуется просмотреть значения hProcess и hThread, правило авторасширения должно выглядеть так:
_PROCESS_INFORMATION=hProcess=<hProcess,Х> hThread=<hThread,X>
Спецификатор формата , х указывает, что значения отображаются в шестнадцатеричной форме.
В файле AUTOEXP.DAT можно увидеть один специальный форматирующий код— <,t>. Этот код просит отладчик разместить в качестве имени типа имя максимального (по уровню) производного типа. Например, если имеется базовый класс А с производным классом В, и только А имеет правило авторасширения, то авторасширением для переменной типа В будет имя класса В, за которым следует правило авторасширения для класса А. Формат <, t> очень полезен для прямой поддержки классов.
Содержание Назад Вперед