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



         

Как и что следует проверять с помощью утверждений - часть 3


к. в выражении nCount > 0 явно указано условие проверки) и, во-вторых, функция утверждения должным образом реагирует на все "неправильные" (<= 0) значения параметра nCount.

 Когда функция UpdateListEntries получает в качестве параметра неположительное значение, то функция-утверждение Debug.Assert обнаруживает этот факт при оценке выражения nCount > 0 и выводит на экран панель сообщений ASSERTION FAILURE. — Пер.

В языках С и C++ имеются специальные проверочные функции, приведенные в табл. 3.1 и помогающие создавать достаточно описательные утверждения. Эти функции можно вызывать и из программ на Visual Basic, но делать этого не нужно из-за проблем с указателями.

Таблица 3.1. Вспомогательные функции для создания описательных утверждений в C/C++

Функция

Описание

GetOb j ectType

Функция подсистемы интерфейса графических устройств (GDI), которая возвращает тип GDI дескриптора

IsBadCodePtr

Проверяет правильность указателя памяти

IsBadReadPtr

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

IsBadStringPt

Проверяет, может ли строчный указатель читать символы до NULL-терминатора (или указанное максимальное число символов)

IsBadWritePtr

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

IsWindow

Проверяет, является ли HWND-параметр правильным окном

Функции IsBadstringPtr и IsBadWritePtr не относятся к категории потокобезопасных функций. Пока один поток вызывает функцию IsBadWritePtr, чтобы проверить права доступа на участок памяти, другой поток может эти права изменить. Если вы используете любую из этих функций только для того, чтобы проверить обычную для языка С область динамически распределяемой памяти, то не должно возникать никаких проблем. Однако если ваше приложение обновляет страничные права доступа и выполняет другие продвинутые манипуляции с памятью, то вы должны обеспечить свои собственные потокобезопасные версии функций IsBadstringPtr и  IsBadWritePtr.

Visual Basic имеет свой набор функций, помогающих проверять достоверность специфических условий Visual Basic. Все эти функции перечислены в табл 3.2. Если разработчик, следуя общепринятой практике программирования на языке Visual Basic, не использует спецификатор variants и явно определяет спецификаторы ByVal и ByRef для параметров, то ему нет необходимости так часто проверять достоверность типов переменных. Если же вы не придерживаетесь подобной практики, то, по крайней мере, получаете некоторый набор хороших средств для выполнения такой проверки.

Таблица 3.2. Справочные функции для описательных утверждений Visual Basic




Содержание  Назад  Вперед