Общие сведения об отладке: точки останова

Обновлен: Ноябрь 2007

Этот раздел применим к:

Выпуск

Visual Basic

C#

C++

Web Developer

Express

Тема применяется Тема применяется Тема применяется Тема применяется

Standard

Тема применяется Тема применяется Тема применяется Тема применяется

Pro и Team

Тема применяется

Тема применяется

Тема применяется Тема применяется

Условные обозначения:

Тема применяется

Применяется

Тема не применяется

Не применяется

Тема применяется, но команда по умолчанию сокрыта

Команда или команды скрыты по умолчанию.

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

Можно представить режим приостановки как некое время простоя. Все элементы остаются, функции, переменные и объекты остаются в памяти, например, но их перемещение и активность приостанавливаются. Во время режима приостановки можно проверить их позиции и состояния в поиске нарушений или ошибки. В программу можно внести коррективы, пока она находится в режиме приостановки. Например, можно изменять значения переменных. Можно перемещать точку выполнения, изменяя оператор, который будет исполняться следующим при возобновлении выполнения программы. В C++, C# и Visual Basic можно даже вносить в режиме приостановки изменения в сам код с помощью эффективного средства "Изменить и продолжить".

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

Многие языки программирования имеют операторы или конструкции, которые приостанавливают выполнение программы и вводят ее в режим приостановки. В Visual Basic, например, есть оператор Stop. Точки останова отличаются от этих операторов, так как они на самом деле не являются исходным кодом, который необходимо добавлять в программу. Оператор точки останова не вводится в окне исходного кода. Точка останова запрашивается через интерфейс отладчика, и отладчик ее устанавливает. Чтобы вставить точку останова строки, следует щелкнуть в сером поле напротив строки, в которую ее нужно вставить. Более сложные точки останова могут обрабатываться с помощью полнофункционального окна Точки останова.

Точки останова имеют много преимуществ по сравнению с конструкциями отладки, такими как оператор Stop языка Visual Basic. Точки останова можно удалять и изменять, не изменяя исходный код программы. Так как точки останова не являются операторами, они никогда не создают какой-либо избыточности в коде при построении окончательного выпуска программы. Если в программе использованы операторы Stop, то приходится удалять Stop вручную перед построением окончательного выпуска или использовать условия, как показано в следующем примере:

#If DEBUG Then
    Stop
#End If

Если необходимо временно отключить оператор Stop, следует разместить его в исходном коде и закомментировать:

 ' Stop

Это не страшно, если имеется всего один оператор Stop. Однако при отладке больших программ с большим числом операторов Stop поиск и комментирование всех инструкций могут потребовать значительного времени. При использовании точек останова можно выбирать, а также включать или отключать какие-либо из них или все сразу из окна Точки останова.

Наконец, точки останова значительно превосходят операторы Stop своей гибкостью. Оператор Stop прерывает выполнение программы на строке исходного кода, в которой он размещен. Можно с тем же результатом установить точку останова в строку исходного кода. Точку останова можно также установить в функцию или адрес памяти, что нельзя сделать с оператором Stop. Кроме этих позиционных точек останова отладчик Visual Studio предлагает точки останова по данным (только для машинного кода). Точка останова по данным устанавливается для глобальных и локальных переменных вместо их размещения в коде. Установка точки останова по данным вызывает прерывание выполнения при изменении значения этой переменной.

Для обеспечения еще большей гибкости отладчик Visual Studio позволяет задавать свойства, изменяющие поведение точки останова.

  • Параметр Число попаданий позволяет задавать количество переходов через точку останова перед тем, как отладчик прерывает выполнение программы. По умолчанию отладчик прерывает выполнение программы всякий раз при достижении точки останова. Можно задать число попаданий таким образом, чтобы отладчик прерывал выполнение программы после каждых двух проходов через точку останова, после каждых 10 проходов или после 512 проходов. Можно задавать любое значение. Число попаданий — важное свойство, так как некоторые программные ошибки не обнаруживаются при первом выполнении программой цикла, вызове функции или доступе к переменной. Иногда программные ошибки могут не проявлять себя до сотен или даже тысяч итераций. Для выявления такой неполадки можно установить точку останова с числом проходов от 100 до 1 000.

  • Условие — это выражение, определяющее, захватывается ли точка останова, или пропускается. При достижении отладчиком точки останова выполняется оценка условия. Попадание в точку останова будет лишь в том случае, если условие выполняется. Условие можно использовать и для позиционной точки останова для остановки в определенном месте программы, но только в случае истинности определенного условия. Предположим, что необходимо выполнить отладку банковской программы, в которой баланс счета никогда не должен опускаться ниже нуля. Для этого следует установить точки останова в определенных местах кода и задать для каждой точки условие, такое как balance < 0. После запуска программы ее выполнение будет прервано в этих расположениях только в том случае, когда итог окажется меньше нуля. Можно проверить переменные и состояние программы в первой точке останова и затем продолжить выполнение до второй точки останова и т.д.

  • Действие указывает действие, которое должно происходить при попадании на точку останова. По умолчанию, отладчик приостанавливает выполнение, но можно вместо этого выбрать печать сообщения или запуск макроса Visual Studio. Если вы выбрали печать сообщения вместо приостановки, работа точки останова очень похожа на работу инструкции Trace. Этот метод использования точек останова называется "точки трассировки".

  • Фильтр предоставляет способ указания процесса или потока для точки останова.

    4607yxb0.alert_note(ru-ru,VS.90).gifПримечание.

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

См. также

Задачи

Практическое руководство. Использование окна точек останова

Основные понятия

Точки останова и точки отслеживания

Точки останова и точки отслеживания

Другие ресурсы

Путеводитель по отладчику