Отладчик Microsoft Visual Studio

 

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

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

Иногда, чтобы найти ошибку и посмотреть, что к ней приводит, надо пройти какой-то участок кода по шагам, по которым программа проходит в момент выполнения. Так же интересно увидеть, как при этом меняются данные программы (значения переменных): какие значения они принимают в определённые моменты времени. В Microsoft Visual Studio для такой работы, к счастью, есть отладчик. В этой статье будут рассмотрены основы работы с отладчиком.

Допустим, надо проанализировать и отладить следующий код:

#include <iostream>

using namespace std;

 

int main()

{

int var55 = 55;

 

for (int i = 3; i >= 0; i--)

{

cout << var55 / i << endl;

}

 

return 0;

}

Наберите его в Visual Studio. В этом коде нет синтаксических ошибок, которые не пропустил бы компилятор до начала выполнения программы. Программа начнет выполняться, проделает определенный участок работы и возникнет ошибка:

Начнем отладку и посмотрим, в следствии чего произошла ошибка на этапе выполнения. Для этого, находясь в Visual Studio, надо нажать клавишу F10. Программа начнет выполнятся и остановится на первой выполняемой строке. Вы увидите жёлтую стрелку возле той строки программы, которая выполняется в данный момент:

Чтобы перейти к выполнению следующего шага, надо снова нажать на F10. Желтая стрелка переместится на другую строку:

Теперь посмотрите вниз экрана в Visual Studio — там есть вкладка в которой можно отслеживать, как изменяются данные переменных в реальном времени.

Тут переменная только создается и хранит какой-то мусор. При следующем нажатии на F10 стрелка переместится в строку 8. Во вкладке уже будет видно, что объявлена переменная i, а также какое значение приобрела переменная var55.

Нажимайте на F10 и смотрите, как изменяются данные. Когда вы будете проходить отладчиком по циклу четвертый раз, переменная i примет значение 0. Это и приводит к ошибке выполнения программы так как на 0 делить нельзя.

Для выхода из режима отладки — нажмите Shift+F5. Если код большой и вам надо отладить его с какой-то определенной строки, а не с самого начала — просто установите курсор в нужную строку и нажмите Сtrl+F10.

Точка останова (breakpoint) и Умная точка останова

На сайте msdn есть такое определение точки останова:

Если надо выполнить программу до определённого места в коде и только достигнув его, запустить отладчик — используют точку останова.

#include <iostream>

using namespace std;

 

int main()

{

int var55 = 55;

 

cout << "Start!\n";

 

for (int i = 3; i >= 0; i--)

{

cout << var55 / i << endl;

}

 

cout << "Finish!\n";

 

return 0;

}

Чтобы установить точку останова в строку cout << var55 / i << endl;, поставьте курсор перед ней и нажмите F9. После этого можно будет увидеть возле этой строки красную точку — это она и есть.

Нажав теперь клавишу F5, запустится программа, выполнится до той строки, где мы установили точку останова и включится режим отладчика.

В консоли будет отображаться то, что успело выполниться до 12-й строки.

Дальше можно отлаживать программу, как и раньше — нажимая F10 и наблюдая за переменными. Всё что выполняется в программе, будет отображаться в консоли. Чтобы снять точку останова — надо поставить курсор в строку где она находится и нажать F9

Если, к примеру, итераций не 3, как в нашем коде, а 333 и мы видим, что ошибка появляется на последних итерациях, правда не очень хочется проходить все эти шаги цикла отладчиком? Есть возможность пропустить, скажем, 330 итераций, и проанализировать только последние 3. Для этого воспользуемся умной точкой останова. Сначала скопируйте этот код:

#include <iostream>

using namespace std;

 

int main()

{

cout << "Start!\n";

 

for (int i = 0; i < 333; i++)

{

cout << i << endl;

}

 

cout << "Finish!\n";

 

return 0;

}

Теперь установите обычную точку останова (F9) и щелкните по ней правой кнопкой мыши. Откроется выпадающее меню с дополнительными возможностями для неё.

Чтобы выполнить программу до 330-й итерации и перейти в режим отладки, выберите Число попаданий.

Теперь выбираем «если число попаданий равно», пишем 330 и жмем ОК. На точке останова появится белый +. Это означает, что она обладает дополнительными условиями. Нажимаем F5, для запуска программы. Она приостановится и перейдет в режим отладки на 330 итерации (на 330-м попадании в точку останова). Далее уже нажимая F10 проходим по циклу до последней итерации.
Это основные, но далеко не все возможности отладчика Microsoft Visual Studio.