Отладка приложений


Окно Watch - часть 7


В качестве примера рассмотрим добавление входа с авторасширением  для структуры 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> очень полезен для прямой поддержки классов.

 




Начало  Назад  Вперед



Книжный магазин