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

Расширенные точки прерывания


Установка точки прерывания на исходной строке в отладчике Visual C++ (для проектной конфигурации Win32 Debug или Win32 Unicode Debug) довольно проста: загрузите исходный файл, поместите курсор на строку, где требуется остановить выполнение, переместите указатель мыши на кнопку Insert/Remove Breakpoint и щелкните левой кнопкой мыши.

Эта кнопка находится в панелях команд Buid и BuildMiniBar Visual C++. — Пер

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

На заре компьютеризации точек прерывания просто не существовало. Единственная "стратегия" для обнаружения ошибок состояла в том, чтобы выполнять программу до тех пор, пока она не завершится аварийно, и затем, страница за страницей, пробираться через распечатки шестнадцатеричных дампов памяти, отыскивая проблему. Единственными отладчиками в те мрачные для отладки времена были операторы трассировки и вера в Бога. В эпоху отладочного Ренессанса, наступившую после появления языков более высокого уровня, разработчики смогли устанавливать точки прерывания, но должны были выполнять отладку только на уровне языка ассемблера. Языки более высокого уровня еще не имели никаких средств для просмотра локальных переменных или наблюдения за программой в исходной форме. Эра современной отладки началась тогда, когда языки программирования развились в более сложные инструменты, а разработчики стали устанавливать точки прерывания на строках исходного кода и просматривать переменные на дисплее, который интерпретировал значения переменных в точном соответствии с их типом. Такие простые позиционные точки прерывания (location breakpoint) до сих пор остаются чрезвычайно мощным средством отладки: они позволяют решить 99,46 процентов отладочных проблем.

Тем не менее, работа с такого рода точками прерывания очень быстро может стать утомительной.
Что будет, если установить точку прерывания на строке внутри цикла for, который выполняется 10 000 раз, а ошибка обнаружится на последней итерации? Во-первых, устанут руки (придется 10 000 раз выполнить команду Go), а во-вторых, нахождение ошибочной итерации займет много времени. Было бы хорошо иметь некоторый способ сообщить отладчику, что точка прерывания не должна срабатывать 9 999 раз перед остановкой.

 В связи с этим точки прерывания подобного типа будем называть позиционными точками прерывания (location breakpoint). Это самый простой из нескольких типов прерываний, с которыми работает Microsoft Visual С. — Пер.

 То есть расположенные в определенной позиции исходного кода. — Пер.

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

  •  пропустить точку прерывания (перед ее выполнением) определенное количество раз;
  •  выполнить прерывание, когда отмеченное этой точкой выражение примет значение true;
  •  выполнить прерывание, когда изменится переменная или адрес памяти.
Расширенные возможности точек прерывания, в конце концов, серьезно усовершенствовали отладчики, позволяя разработчикам за считанные минуты делать то, на что при использовании простых позиционных точек прерывания тратились часы.



Содержание раздела