Главная - Литература

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 [181] 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294

Отладчики

Коммерческие отладчики непрерывно совершенствуются и могут значительно изменить ваш способ программирования. Хорошие отладчики позволяют прерывать выполнение программы на конкретной строке, при достижении конкретной строки в п-й раз, при изменении глобальной переменной или при присвоении переменной конкретного значения. Они позволяют выполнять код строка за строкой с «перешагиванием» через методы или с их «посещением», возвращаться к началу дефектного фрагмента, а также регистрировать выполнение отдельных операторов в журнале, что похоже на разбрасывание по всей программе команд печати «Я здесь!».

Хорошие отладчики позволяют полностью исследовать данные, в том числе структурированные и динамически выделенные. С их помощью легко просмотреть содержание связного списка указателей или динамически выделенного массива. Они поддерживают типы данных, определенные пользователем. Они позволяют выполнить нерегламентированный запрос данных, присвоить им новые значения и продолжить выполнение программы.

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

Лучшие отладчики запоминают параметры отладки (точки прерывания, отслеживаемые переменные и т. д.) каждой отдельной программы, чтобы их не нужно было задавать заново.

Системные отладчики работают на системном, а не прикладном уровне, не влияя на выполнение отлаживаемой программы. Это важно, если вы отлаживаете программу, чувствительную ко времени выполнения или объему доступной памяти.

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

странным, что кто-то их критикует. И все же некоторые из дикошный пример инстрр#ен

самых уважаемых людей в мире компьютерных наук реко- та, который т нужен: он птщг

мендуют их не использовать. Они советуют полагаться на рш хакерство методом проб и

свой ум и избегать инструментов отладки вообще. Они ошибок, а не оиетематйчное

утверждают, что инструменты отладки - это костыли и что ««тирошие и юзеояш

непрофессионадам скрыть свою

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

не опираясь на инструменты. Они утверждают, что при по- Хщшан h/Шш

иске дефектов программу нужно выполнять в уме, а не в {ИШп МШ$)

отладчике.

Какими бы ни были эмпирические данные, суть нападок на отладчики некорректна. Если инструмент допускает неграмотное применение, это не значит, что от него надо отказаться. Было бы глупо запретить аспирин из-за возможности передозировки. Риск пораниться не заставил бы вас прекратить подстригать лужайку перед домом. Любой эффективный инструмент можно использовать правильно и неправильно. Отладчик - не исключение.



Отладчик не заменит грамотного рассуждения. Но иногда никакие мысли не заменят хороший отладчик. Наиболее эффективная комбинация - ясный ум и хороший отладчик.

Контрольный список: отладка

http: cc2exom/236

Методики поиска дефектов

□ Формулируя гипотезу, используйте все имеющиеся данные.

□ Детализируйте тесты, приводящие к ошибке.

□ Проверяйте код при помощи блочных тестов.

□ Используйте разные доступные инструменты.

□ Воспроизведите ошибку несколькими разными способами.

□ Генерируйте больше данных для формулирования большего числа гипотез.

□ Используйте результаты отрицательных тестов.

□ Используйте «мозговой штурм» для построения нескольких гипотез.

□ Составьте список подходов, которые следует попробовать.

□ Сократите подозрительную область кода.

□ С подозрением относитесь к классам и методам, которые содержали дефекты ранее.

□ Проверьте код, который был изменен недавно.

□ Расширьте подозрительный фрагмент кода.

□ Выполняйте интеграцию инкрементно.

□ Проверяйте наличие распространенных дефектов.

□ Обсудите проблему с кем-то другим.

□ Отдохните от проблемы.

□ Установите сроки быстрой и грязной отладки.

□ Составьте список методик грубой силы и используйте их.

Методики поиска и исправления синтаксических ошибок

□ Не полагайтесь на номера строк в сообщениях компилятора.

□ Не доверяйте сообщениям компилятора.

□ Не доверяйте второму сообщению компилятора.

□ Разделяй и властвуй.

□ Используйте редактор с проверкой синтаксиса для поиска неверно размещенных символов комментария и кавычек.

Методики устранения дефектов

□ Прежде чем браться за решение проблемы, поймите ее.

□ Не ограничивайтесь пониманием проблемы - поймите программу.

□ Подтвердите диагноз проблемы.

□ Расслабьтесь.

□ Сохраняйте первоначальный исходный код.

□ Устраняйте проблему, а не ее симптомы.

□ Изменяйте код только при наличии веских оснований.

□ Вносите в код по одному изменению за раз.

□ Проверяйте исправления.

□ Добавляйте в набор тестов блочные тесты, приводящие к проявлению имеющихся дефектов.

□ Поищите похожие дефекты.



Общий подход к отладке

□ Рассматриваете ли вы отладку как возможность лучше изучить программу, ошибки, качество кода и подход к решению проблем?

□ Избегаете ли вы суеверного подхода к отладке, основанного на методе проб и ошибок?

□ Полагаете ли вы, что ошибки допущены именно вами?

□ Используете ли вы научный метод для стабилизации несистематических ошибок?

□ Используете ли вы научный метод для нахождения дефектов?

□ Используете ли вы несколько методик поиска дефектов?

□ Проверяете ли вы корректность исправлений?

□ Анализируете ли вы предупреждения компилятора? Используете ли вы инструменты профилирования выполнения программы, среды тестирования, леса и интерактивные отладчики?

Дополнительные ресурсы

Ниже я привел список книг, посвященных отладке.

Agans, David J. Debugging: The Nine Indispensable Rules for http. cc2e.c(Jm/2375

Finding Even the Most Elusive Software and Hardware Problems.

Amacom, 2003. В этой книге рассматриваются общие принципы отладки, не зависящие ни от языка, ни от среды.

Myers, Glenford J. The Art of Software Testing. New York, NY: John Wiley & Sons, 1979. Седьмая глава этой классической книги посвящена отладке.

Allen, Eric. Bug Patterns In fava. Berkeley, CA: Apress, 2002. В данной книге описывается методика отладки программ Java, концептуально очень похожая на описанную в этой главе. Как и здесь, в ней рассмотрен «Научный метод отладки», проведено различие между отладкой и тестированием и определены частые ошибки.

Названия двух следующих книг могут навести на мысль о том, что они адресованы только разработчикам программ для Microsoft Windows и .NET, однако это не так: помимо всего прочего, в них вы найдете обсуждение отладки в целом, советы по использованию утверждений, а также описания методик кодирования, помогающих предотвращать ошибки.

Robbins, John. Debugging Applications for Microsoft NET and Microsoft Windows. Redmond, WA: Microsoft Press, 2003.

McKay, Everett N. and Mike Woodring. Debugging Windows Programs: Strategies, Tools, and Techniques for Visual 6"++ Programmers. Boston, MA: Addison-Wesley 2000.

Роббинс Дж. Отладка приложений для Microsoft .NET и Microsoft Windows. - М.: Русская Редакция, 2004. - Прьш. перев.



0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 [181] 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294



0.0074