Книги
чёрным по белому
Главное меню
Главная О нас Добавить материал Поиск по сайту Карта книг Карта сайта
Книги
Археология Архитектура Бизнес Биология Ветеринария Военная промышленность География Геология Гороскоп Дизайн Журналы Инженерия Информационные ресурсы Искусство История Компьютерная литература Криптология Кулинария Культура Лингвистика Математика Медицина Менеджмент Металлургия Минералогия Музыка Научная литература Нумизматика Образование Охота Педагогика Политика Промышленные производства Психология Путеводители Религия Рыбалка Садоводство Саморазвитие Семиотика Социология Спорт Столярное дело Строительство Техника Туризм Фантастика Физика Футурология Химия Художественная литература Экология Экономика Электроника Энергетика Этика Юриспруденция
Новые книги
Цуканов Б.И. "Время в психике человека" (Медицина)

Суворов С. "Танк Т-64. Первенец танков 2-го поколения " (Военная промышленность)

Нестеров В.А. "Основы проэктирования ракет класса воздух- воздух и авиационных катапульных установок для них" (Военная промышленность)

Фогль Б. "101 вопрос, который задала бы ваша кошка своему ветеринару если бы умела говорить" (Ветеринария)

Яблоков Н.П. "Криминалистика" (Юриспруденция)
Реклама

Совершенный код. Мастер-класс - Макконнелл С.

Макконнелл С. Совершенный код. Мастер-класс — М.: Русская редакция, 2005. — 896 c.
ISBN: 5-469-00822-3
Скачать (прямая ссылка): soversheniykodmasterklass2005.djvu
Предыдущая << 1 .. 105 106 107 108 109 110 < 111 > 112 113 114 115 116 117 .. 426 >> Следующая

добавлять или удалять отладочный код простым изменением
параметра компиляции. Препроцессор можно задействовать
непосредственно, а можно писать макросы, работающие с его
определениями. Вот пример написания кода, напрямую
использующего препроцессор:
Пример непосредственного использования препроцессора для
управления отладочным кодом (C++)
|- Для добавления кода отладки используйте директиву ^define,
чтобы определить символ DEBUG. Для исключения отладочного кода
просто не определяйте DEBUG.
->#define DEBUG
#if defined( DEBUG )
// отладочный код
У этой темы несколько вариаций. Вместо простого определения
DEBUG вы можете присвоить ему значение, а затем проверять
именно это значение, а не просто факт определения символа. Так
вы можете различать несколько уровней отладочного кода. Какой-
то код вы хотели бы использовать в программе все время, по-
этому вы окружаете его операторами вроде Hf DEBUG > 0. Другой
отладочный код может понадобиться только в специальных целях,
и вы можете заключить его в операторы #if DEBUG == POINTER
ERROR. В других местах вы захотите установить различные уровни
отладки, для чего годятся такие выражения, как Hf DEBUG >
LEVELA.
Если вы не хотите распространять Hf definedQ по всему коду,
можно написать макрос препроцессора, выполняющий ту же задачу.
Вот его пример:
Пример использования макроса препроцессора для управления
отладочным кодом на C++
"define DEBUG #if defined( DEBUG )
define DebugCode( code_fragment ) { code_fragment }
else
#define DebugCode( code_fragment )
#endif
Этот код добавляется или удаляется в зависимости от того,
определен ли символ DEBUG.
#endif
DebugCode(

statement 1; statement 2;
statement n;
ГЛАВА 8 Защитное программирование 203
Как и в первом примере применения препроцессора, эта
технология может быть изменена различными способами, что
позволит выполнить более изощренные действия, чем полное
включение или исключение отладочного кода.
Напишите собственный препроцессор Если язык не - "
r г 1 перекрестная ссылка Q
препро-
содержит препроцессор, то для включения/исключения от- цессорах
и источниках инфор-
ладочного кода довольно легко написать свой. Разработай-
мации об т написании
см, под-
те правила для добавления отладочного кода и напишите раздел
"Препроцессоры" разде-
свой ирекомпилятор, следующий этим соглашениям. Скажем, ла
в Java вы могли бы написать прекомпилятор для обработки
ключевых слов //#BEGIN DEBUG и //*END DEBUG. Напишите сценарий
для вызова препроцессора, а затем скомпилируйте полученный
после него код. В долгосрочной перспективе вы сбережете время.
Кроме того, вы не сможете случайно скомпилировать
необработанный код.
Используйте отладочные заглушки Зачастую для вы- ССЫЛ1(8 " адглуш.
полнения отладочных проверок вы можете вызвать проце- ках см
раздел 22,5. дуру. Во время разработки она могла бы выполнять
несколько операций перед тем, как управление вернется
вызывающей стороне. В промышленном коде сложную процедуру
можно заменить процедурой-заглушкой, которая сразу вернет
управление или выполнит перед этим пару быстрых операций. Этот
подход лишь немного снижает производительность и является
более быстрым решением, чем написание собственного
препроцессора. Храните и отладочную, и итоговую версии
процедур, и вы сможете быстро переключаться между ними.
Вы можете начать с метода, разработанного для проверки
переданных ему указателей:
Пример метода, использующего отладочную заглушку (C++)
void DoSomething(
S0ME_TYPE ^pointer;
) {
// проверка переданных сюда параметров |- Зто строка вызывает
процедуру для проверки указателя.
*-> CheckPointer( pointer );
Во время разработки процедура CheckPointerQ будет выполнять
полную проверку указателя. Это будет медленно, но эффективно,
например, так:
8-403
204 ЧАСТЬ II Высококачественный код
Пример метода, проверяющего указатели во время разработки
(C++)
- Этот метод проверяет любой переданный ему указатель. Во
время разработки ее можно использовать для стольких проверок,
сколько вы сможете выдержать.
->void CheckPointer( void *pointer ) {
// выполнить проверку 1 - например, что указатель не равен
NULL // выполнить проверку 2 - например, что какой-то его //
обязательный признак действителен // выполнить проверку 3 -
например, что область,
// на которую он указывает, не повреждена
// выполнить проверку п-...
}
Когда код готов к эксплуатации, вас, возможно, не устроят
накладные расходы, связанные с такой проверкой указателей.
Тогда вы удалите предыдущий код и добавьте следующий метод:
Пример метода, проверяющего указатели во время эксплуатации
(C++)
г- Эта процедура сразу же возвращает управление.
L>void CheckPointer( void *pointer ) {
// никакого кода; просто возврат управления
}
Это отнюдь не исчерпывающий обзор всех способов удаления
средств отладки. Но его должно быть достаточно, чтобы подать
вам идею о том, что может работать в вашей программной среде.
Предыдущая << 1 .. 105 106 107 108 109 110 < 111 > 112 113 114 115 116 117 .. 426 >> Следующая