Основы программирования на С++ для начинающих

Отладчик Microsoft Visual Studio

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

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

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

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

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

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

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

отладчик Microsoft Visual Studio, умная точка останова

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

отладчик Microsoft Visual Studio, умная точка останова

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

отладчик Microsoft Visual Studio, умная точка останова

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

отладчик Microsoft Visual Studio, умная точка останова

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

отладчик Microsoft Visual Studio, умная точка останова

отладчик Microsoft Visual Studio, умная точка останова

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

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

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

отладчик Microsoft Visual Studio, умная точка останова

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

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

отладчик Microsoft Visual Studio, умная точка останова

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

отладчик Microsoft Visual Studio, умная точка останова

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

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

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

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

умная точка останова

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

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

Это основные, но далеко не все возможности отладчика Microsoft Visual Studio. 

4 thoughts on “Отладчик Microsoft Visual Studio

  1. >> Это основные, но далеко не все возможности отладчика Microsoft Visual Studio. Со временем рассмотрим и другие.

    Я, конечно, не знаю, что там за еще возможности в студии есть. Но мне кажется в статье не хватает упоминания про стек вызовов и вычисляемых значений (на одной из картинок у вас видна вкладка – “контрольные значения” – это оно вроде бы).

    Про стек вызовов можно на примере рекурсивной функции рассказать, мне кажется. Вы же как раз недавно тему рекурсии раскрыть пытались :).

    Я бы не зацикливался на студии – в других средах тоже самое, отличаются только названия и расположение окошек…

    Можно было в целом про отладку написать – ну например, можно ведь стратегически расставлять cout и таким образом находить место с ошибкой )). По крайней мере, пока удобных IDE не появилось – так и делали, да и сейчас иногда это удобнее. В стандартной библиотеке есть специальные потоки clog и cerr, которые можно юзать вместо cout чтобы стандартный поток вывода не забивать ерундой (ну а еще их можно перенаправить куда-нибудь). В библиотеке Qt есть метод QObject::qDebug() позволяющий выводить сообщения для отладки в специальное окошко отладчика.

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

Добавить комментарий для Айтек Отменить ответ

Ваш e-mail не будет опубликован. Обязательные поля помечены *