Функции пошагового выполнения кода Through and Over Code

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

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

Существуют три функции отладки, которые необходимы для пошагового выполнения кода. К ним относятся следующие:

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

· Step over. Как и функция Step into, функция Step over выполняет оператор в текущей исполняемой позиции. Однако, эта функция не заходит внутрь кода метода или свойства. Вместо этого, код внутри метода или свойства выполняется и позиция выполнения перемещается на оператор после вызова метода или свойства. Исключением является код для метода или свойства, содержащий точку останова. В этом случае выполнение продолжится до точки останова.

· Step out. Функция Step out позволяет выполнить оставшийся код в методе, свойстве или цикле. Выполнение вернется к оператору, который вызывает метод или обращается к свойству или оператору, следующему за кодом цикла. Выполнение остановится в этой точке.

В режиме прерывания следующий оператор, который будет выполняться, обозначается желтой стрелкой на серой полое слева от кода и желтым фоном оператора. Можно переопределить и установить другой порядок выполнения следующего оператора. Для этого нужно щелкнуть правой кнопкой мыши оператор, который должен быть выполнен следующим, а затем нажать кнопку Set next statement. Стрелки и желтый фон передвинутся к выбранноому оператору. Следует отметить, что при этом изменяется путь, согласно которому работает приложение. Если будет пропущен важный код, такой как присваивание значения переменной или критические вызовы методов, существует риск возникновения ошибок, которые в другом случае могли и не произойти. Поэтому пропускать операторы нужно с осторожностью.

При окончании пошагового выполнения кода, можно вернуться в режим Debug функцией start/continue. Исполнение будет продолжаться до тех пор, пока выполнение опять не войдет в режим прерывания с кнопкой Break all, либо пока код не повстречает точку останова. Если нужо остановить приложение, а затем запустить его снова в режиме отладки, можно использовать функцию Restart. Эта функция полезна, если нужно, например, проверить код, который выполняется при первом запуске приложения.

Использование Debug Windows

Visual Studio 2010 включает в себя несколько окон, которые можно использовать для отладки приложений. Эти окна доступны во время выполнения, в основном, в режиме прерывания (Рис. 13).

Функции пошагового выполнения кода Through and Over Code - student2.ru

Рис. 13.

В таблице приведены некоторые из наиболее часто используемых окон отладки в Visual Studio 2010.

Окно Описание
QuickWatch Это модальное окно, которое позволяет вычислять переменные и выражения. Для его использования нужно набрать имена переменных или выражений в поле Expression, а затем нажать кнопку Reevaluate, чтобы посмотреть значение и тип переменной или результата выражения. Чтобы закрыть окно QuickWatch нужно нажать Close.
Locals Это окно позволяет просматривать и редактировать локальные (в пределах области видимости) переменные. Можно расширить переменные, просмотреть члены и редактировать содержание некоторых переменных в столбцах Value.
Immediate Это окно позволяет вычислять выражения, выполнять операторы и распечатывать значения переменных. Можно использовать это окно в контексте команды Visual Studio 2010 Debug.Print, чтобы печатать значения переменной или выражения.
Output В этом окне можно просматривать ошибки и информационные сообщения. Одним из основных видов использования этого окна, является посмотр следов приложения с помощью метода System.Diagnostics.Debug.WriteLine().
Memory Это окно позволяет просмотреть и отредактировать содержимое памяти, который использует приложение. Это функция может заставить приложение вести себя непредсказуемо, если только не использовать ее с осторожностью.
Call Stack Это окно позволяет просматривать стек вызовов методов, которые используются для достижения текущего местоположения кода. Текущая позиция отображается в верхней части окна, а ниже показан ряд вызовов, которые обрабатываются приложением для достижения этого расположения.
Modules Это окно позволяет просматривать информацию о модулях (сборках и исполняемых файлах), которые использует приложение. Каждый модуль перечисляется вместе с его местоположением, версией и другой информацией.
Processes В этом окне можно просматривать информацию о процессах, к которым присоединен отладчик.
Threads В этом окне можно проверять и контролировать потоки приложения.



[1] .NET Reflector – платная утилита для Microsoft .NET, комбинирующая браузер классов, статический анализатор и декомпилятор, изначально написанная Lutz Roeder. 20 августа 2008 Red Gate Software объявили, что они берут ответственность за дальнейшую разработку программы. MSDN Magazine назвал ее одной из десяти «Must-Have» утилит для разработчиков.

[2] Использование оператора using просто удобство, без которого можно обойтись. Например, вместо имени Console можно использовать полностью уточненное имя System.Console.

[3] Инструмент Sandcastle не предусмотрен в рамках Visual Studio, доступен на веб-сайте CodePlex (http://shfb.codeplex.com, http://www.codeplex.com/).

Наши рекомендации