Visual studio отладка консольного приложения
В этом руководстве представлены средства отладки, доступные в Visual Studio.
Предварительные требования
Использование конфигурации отладочной сборки
В отладочной конфигурации программы компилируется с полной символической отладочной информацией и без оптимизации. Оптимизация усложняет отладку, поскольку усложняется связь между исходным кодом и сгенерированными инструкциями. Конфигурация для выпуска полностью оптимизирована и не содержит символической отладочной информации.
По умолчанию Visual Studio использует отладочную конфигурацию сборки, поэтому ее не нужно изменять перед отладкой.
Запустите Visual Studio.
Используемая конфигурация сборки отображается на панели инструментов. На следующем изображении панели инструментов показано, что служба Visual Studio настроена для компиляции отладочной версии приложения:
Установка точки останова
Точка останова приостанавливает выполнение приложения на инструкции, предшествующей той строке, в которой установлена точка останова.
Установите точку останова в строке, где отображается имя, дата и время, щелкнув в левом поле окна изменения кода в этой строке. Левое поле находится слева от номеров строк. Кроме того, установить точку останова можно, поместив курсор в строку кода и нажав клавишу F9 или выбрав Отладка > Переключить точку останова в строке меню.
Как видно на следующем рисунке, строку с точкой останова Visual Studio обозначает подсветкой текста и красной точкой в левом поле.
Когда программа запросит имя, введите любую строку в окне консоли и нажмите клавишу ВВОД.
Выполнение программы остановится, когда будет достигнута точка останова, то есть перед выполнением метода Console.WriteLine. В окне Локальные отображаются значения переменных, которые определены в текущем выполняемом методе.
Окно Интерпретация позволяет взаимодействовать с приложением, которое вы отлаживаете. Вы можете интерактивно изменить значения переменных и посмотреть, как это повлияет на работу программы.
Если окно Интерпретация не отображается, откройте его, выбрав Отладка > Окна > Интерпретация.
В окне Интерпретация отображается значение переменной строки и свойства значения . Кроме того, значения переменных обновляются в окне Локальные.
Нажмите клавишу F5, чтобы продолжить выполнение программы. Или выберите Отладка > Продолжить в меню.
Значения, отображаемые в окне консоли, соответствуют изменениям, произведенным в окне Интерпретация.
Нажмите любую клавишу, чтобы выйти из приложения и остановить отладку.
Установка условной точки останова
Программа отображает строку, которую вводит пользователь. Что произойдет, если пользователь ничего не введет? Это можно проверить с помощью полезной функции отладки, которая называется условной точкой останова.
Щелкните правой кнопкой мыши красную точку, обозначающую точку останова. В контекстном меню выберите Условия. Откроется диалоговое окно Параметры точки останова. Установите флажок Условия, если он еще не установлен.
Для условного выражения введите следующий код в поле, где приведен пример кода, который проверяет, имеет ли x значение 5. Если нужный язык не отображается, измените выбор языка в верхней части страницы.
При каждом достижении точки останова отладчик вызывает метод String.IsNullOrEmpty(name) и останавливается на этой строке только в том случае, если вызов метода возвращает true.
Вместо условного выражения можно указать количество обращений (выполнение программы будет прервано, пока инструкция не будет выполнена указанное количество раз) или условие фильтра (выполнение программы будет прервано на основе таких атрибутов, как идентификатор потока, имя процесса или имя потока).
Выберите Закрыть, чтобы закрыть диалоговое окно.
Запустите отладку программы, нажав клавишу F5.
Когда в окне консоли появится предложение ввести имя, просто нажмите клавишу ВВОД.
Так как указанное вами условие соблюдается (name имеет значение null или String.Empty), выполнение программы будет остановлено при достижении точки останова, то есть перед выполнением метода Console.WriteLine.
Убедитесь в том, что переменная содержит пустую строку, введя следующую инструкцию в окне Интерпретация и нажав клавишу ВВОД. Результат равен true.
? name == String.Empty ? String.IsNullOrEmpty(name)
Вопросительный знак указывает окну интерпретации на необходимость вычислить выражение.
Нажмите клавишу F5, чтобы продолжить выполнение программы.
Нажмите любую клавишу, чтобы закрыть окно консоли и остановить отладку.
Очистите точку останова. Для этого щелкните красную точку в левом поле окна с кодом. Или нажмите клавишу F9 либо выберите в меню пункт Отладка > Перейти к следующей точке останова при выбранной строке кода.
Пошаговое выполнение программы
Visual Studio позволяет выполнять программу пошагово, отслеживая результат ее выполнения. Для этого обычно задают точку останова и запускают программу в небольшой части ее кода. Поскольку наша программа невелика, давайте выполним ее пошагово.
Выберите Отладка > Шаг с заходом. Или выполните отладку по одному оператору, нажимая клавишу F11.
Следующая выполняемая строка будет выделена, и рядом с ней появится стрелка.
На этом этапе в окне Локальные показано, что массив args пуст, а name и current имеют значения по умолчанию. Кроме того, Visual Studio открыла пустое окно консоли.
Нажмите клавишу F11. Будет выделена следующая выполняемая строка. Окно Локальные не изменяется, и окно консоли остается пустым.
Нажмите клавишу F11. Visual Studio подсвечивает инструкцию, которая содержит присваивание значения переменной name. В окне Локальные отображается, что name имеет значение null, а в окне консоли появилась строка What is your name? (Введите имя:).
Ответьте на этот запрос, введя строку в окно консоли и нажав клавишу ВВОД. Консоль никак не отреагирует на это, и введенная строка не будет отображаться в окне консоли, но метод Console.ReadLine получит введенные входные данные.
Нажмите клавишу F11. Visual Studio подсвечивает инструкцию, которая содержит присваивание значения переменной current. В окне Локальные отображается значение, полученное в результате вызова метода Console.ReadLine. В окне консоли также отображается строка, указанная в командной строке.
Нажмите клавишу F11. В окне Локальные отображается значение переменной current, которому было присвоено свойство .Now. В окне консоли изменений не произошло.
Нажмите клавишу F11. Visual Studio вызывает метод Console.WriteLine(String, Object, Object). В окне консоли отображается форматированная строка.
Выберите Отладка > Шаг с выходом. Или отмените пошаговое выполнение, нажав сочетание клавиш SHIFT+F11.
Нажмите любую клавишу, чтобы закрыть окно консоли и остановить отладку.
Использование конфигурации сборки для выпуска
После тестирования отладочной версии приложения следует скомпилировать и протестировать версию в режиме выпуска. При сборке в режиме выпуска компилятор использует методы оптимизации, которые иногда могут негативно повлиять на поведение приложения. Например, оптимизации компилятора для повышения производительности могут привести к состоянию конкуренции в многопоточных приложениях.
Чтобы собрать и протестировать консольное приложение в режиме выпуска, переключите конфигурацию сборки из режима Отладка в режим Выпуск на панели инструментов.
Если нажать клавишу F5 или выбрать пункт Собрать решение в меню Сборка, Visual Studio скомпилирует версию приложения в режиме выпуска. Эту версию можно протестировать точно так же, как и отладочную.
Следующие шаги
В этом руководстве вы использовали средства отладки Visual Studio. В следующем руководстве вы опубликуете развертываемую версию приложения.
Иногда нужно, чтобы программа выполняла разные действия в зависимости от заданных параметров при запуске. Для этого используется механизм аргументов командной строки. Чтобы задать аргументы достаточно написать их в консоли после имени запускаемой программы. Однако при работе в интегрированной среде разработки Visual Studio вы не запускаете программу через консоль самостоятельно, так как этим занимается сама студия. К сожалению, далеко не очевидно, каким образом задавать аргументы командной строки в Visual Studio. Конечно, можно просто открыть консоль, перейти в папку с проектом и запустить приложение прямо оттуда, передав нужные аргументы, однако есть способ сделать это прямо в среде разработки. Так давайте разберёмся ним и научимся передавать аргументы прямо из студии, не запуская консоль и не ища расположение запускаемого проекта.
Шаг первый. Создаём новый С++ проект
Если вы не знаете, как создать новый проект, прочитайте нашу статью об этом: Как создать C/C++ проект в Visual Studio.
Студия создаст проект и открое редактор кода, в котором будет примерно следующее:
Шаг второй. Пишем код для отображения переданных аргументов
Запустим приложение и убедимся, что ни одного аргумента помимо имени программы передано не было:
Шаг третий. Задание аргументов командной строки
Чтобы передать аргументы командной строки в Visual Studio нужно:
- Выбрать в верхнем меню панель Проект;
- В появившейся вкладке выбрать Свойства;
- В открывшемся окне выбрать Отладка
- В правой части задать аргументы в поле Аргументы команды
Напишем там какие-нибудь аргументы для проверки и ещё раз запустим приложение
Программа вывела все аргументы, которые только что были переданы. А значит мы научились задавать параметры командной строки прямо в Visual Studio.
Выпускник МГУ им. М.В. Ломоносова
Programforyou — это сообщество, в котором Вы можете подтянуть свои знания по программированию, узнать, как эффективно решать те или иные задачи, а также воспользоваться нашими онлайн сервисами.
Вам когда-нибудь нужно было отлаживать или профилировать исполняемый файл (файл .exe), для которого у вас нет исходного кода или вы не можете его собрать? Тогда наименее известный тип проекта Visual Studio, проект EXE, для вас!
В Visual Studio вы можете открыть любой EXE-файл как «проект». Просто перейдите в Файл -> Открыть -> Проект/Решение и перейдите к файлу .exe . Как если бы это был файл .sln . Visual Studio откроет этот EXE-файл как проект. Эта функция существует уже давно. Она работает на всех поддерживаемых в настоящее время версиях Visual Studio, и документация по ней находится на странице Отладка приложения, которое не является частью решения Visual Studio.
Отладка
Как и в обычном проекте, вы можете начать отладку с помощью F5, которая запустит EXE и подключит отладчик. Если вы хотите отладить запуск, вы можете запустить с помощью F11, который запустит EXE и остановится на первой строке пользовательского кода. Оба эти параметра доступны в контекстном меню для проекта EXE в окне Solution Explorer, как показано ниже:
Для отладки понадобятся символы, файлы PDB, для EXE и любых DLL, которые нужно отладить. Visual Studio будет следовать тому же процессу и попытается получить символы также, как и при отладке обычного проекта. Поскольку маловероятно, что файлы PDB были распространены вместе с EXE-файлом, возможно, вы захотите найти их в сборке или, что еще лучше, на сервере символов. Дополнительную информацию и рекомендации по использованию символов можно найти в этом блоге.
Для эффективной отладки вам также понадобится исходный код, который использовался для сборки EXE, или даже для нескольких файлов, которые вас интересуют. Вам нужно найти эти файлы и открыть их в Visual Studio. Если исходный код не совпадает с исходным кодом, который был собран, EXE Visual Studio предупредит вас, когда вы попытаетесь вставить точку останова, и точка останова не будет привязана. Это поведение может быть изменено в окне Settings peek window. В окне просмотра параметров щелкните текст ссылки Must match source, а затем установите флажок, чтобы разрешить несоответствующий источник, как показано ниже. Конечно, с несоответствующим источником вы никогда не знаете, что произойдет, так что используйте это только на свой страх и риск.
Если EXE был собран с SourceLink, то информация об источнике будет включена в PDB, и Visual Studio попытается загрузить источник автоматически. Это действительно хорошая причина использовать SourceLink с вашими проектами. Даже если у вас есть локальный набор, у вас может не быть той версии, которая использовалась для сборки двоичного файла. SourceLink — ваш надежный способ убедиться, что правильный источник связан с правильным двоичным файлом.
Если вы не можете получить исходный код, у вас еще есть несколько вариантов:
Отладка кода в Visual Studio происходит довольно просто, если сравнивать это т процесс с другими IDE. Плюс отладчик Visual Studio обладает довольно широкими возможностями и позволяет отлаживать различные технологии, а если имеющихся средств не хватает, то можно воспользоваться дополнениями.
Отладка кода — это один из самых важных процессов. Без отладки в свет не выходит ни одно нормальное приложение. Потому что , независимо от опыта разработчика, код не всегда работает так , как нужно. А иногда и вообще работает совершенно не так. Вот тут как раз и приходит на помощь отладчик, который позволит разобраться , что не так , и найти изъяны. Можно , конечно , много часов провести за самостоятельным выявлением багов, но отладчиком все-таки быстрее и проще.
В то же время отладка кода — это не волшебная палочка, которая быстренько найдет и исправит все недочеты вашего кода. Отладка — это процесс, при котором код пошагово выполняется в некой программе, например , в Visual Studio. В процессе выполнения идет поиск точек, где вы могли допустить ошибку. А вы в это время можете анализировать свой код и вносить необходимые правки для устранения «косяков».
Работа с отладчиком , даже с таким простым , как Visual Studio, требует определенных знаний и понимания , что там внутри происходит. Умение работать с отладчиком вам в любом случае пригодится, если вы хотите связать свою жизнь с разработкой ПО. В этой статье мы ознакомим вас с процессом отладки при помощи Visual Studio.
Отладка кода в Visual Studio
- орфографические ошибки или опечатки,
- неправильно подключенные API,
- неправильное размещение последних корректировок в код,
- и др.
- ошибка компиляции;
- ошибка преобразования типа;
- код не поддерживает синтаксис;
- и др .
Как запустить отладчик Visual Studio
- Запустить саму программу Visual Studio.
- Откр ыть код приложения, который необходимо отладить.
- Потом при помощи нажатия клавиши «F5» запустить режим отладки. Также это можно сделать через меню, если нажать «Отладка», а потом «Начать отладку» .
последовательность исполнения кода;
работу памяти;
значение переменных и др.
Какая информация выводится отладчиком Visual Studio
В заключение
Отладка в Visual Studio дает возможность довольно быстро решить проблемы с вашим кодом. Да, без определенных знаний и понимания запустить и понять отладчик Visual Studio будет нелегко, но с опытом все станет понятнее. В разработке без отладки кода — путь в никуда , п отому что стабильность работы приложения — это залог его качества. И если на самом старте разработк и игнорировать этот процесс, то нет смысла идти дальше.
Мы будем очень благодарны
если под понравившемся материалом Вы нажмёте одну из кнопок социальных сетей и поделитесь с друзьями.
Ч асто бывают ситуации, когда код скомпилировался, но работает не так, как предполагалось. Обнаружить ошибку просмотром кода не удалось и логгирование не особо помогает. Тогда можно воспользоваться дебаггером, пошагово пройти программу (благо, они у вас совсем небольшие), проследить состояние переменных и ход выполнения приложения или дизассемблировать код.
Пусть у нас имеется следующий код
Необходимо научиться работать с отладчиком: пошагово проходить весь код, устанавливать точки останова программы, просматривать значения переменных во время работы.
Visual Studio
В ыполните ОТЛАДКА | Шаг с обходом, или нажмите F10. Вы получите примерно такую картину, как на рисунке. Жёлтая стрелка указывает, какой оператор будет выполнен. Используя шаг с обходом (F10), шаг с заходом (F11) и шаг с выходом (Shift + F11) можно исполнять программу.
Шаг с обходом выполняет оператор, но не заходит в него. Например, если это вызов функции, то он будет произведён, но внутрь функции мы не попадём.
Шаг с заходом позволяет «зайти» в оператор, если он сложный. Например, перейти к функции, которая выполняется.
Шаг с выходом позволяет вернуться на уровень выше, если мы совершили шаг с заходом.
Окошко «Локальные» снизу показывает текущее значение локальных переменных. Во время захода в функцию в значениях хранится мусор.
Нажимая F10, дойдите до строки 23, где происходит вызов функции printArray. Если вы нажмёте F11, то перейдёт внутрь функции printArray.
Чтобы выйти из этой функции, можно нажать Shift + F11.
Если часть программы необходимо пропустить, то ставят точку останова (breakpoint, "бряк"). Для этого кликают по левому полю, рядом со строчкой, на которой необходимо остановиться, или нажимают F9. Останов можно осуществить только на операторе, нельзя остановиться, например, на определении переменной или пустой строке. В этом случае отладчик «скинет» точку останова до ближайшего валидного места.
Когда выполнение программы доходит до оператора, рядом с которым стоит breakpoint, то происходит остановПосле того, как точка останова выставлена, можно нажать F5. Программа будет выполняться до тех пор, пока не встретит точку останова. Это особенно удобно, когда нужно обойти ввод данных.
Точка останова может иметь ряд условий, например, число попаданий, фильтры, действие, которое выполняется при остановке и т.д. Для того, чтобы задать дополнительные свойства, кликните правой кнопкой мыши на точке и в выпадающем меню выберете нужный пункт.
Останов выполнения программы может быть осуществлён по условиюПусть, например, мы хотим остановить выполнение программы тогда, когда значение локальной переменной i внутри цикла в функции стало равно 2. Для этого напишем соответствующее условие
Теперь, если нажать на «Продолжить», то программа будет работать до тех пор, пока значение локальной переменной i внутри функции не станет равным 2.
Borland, Code Gear, Embarcadero etc.
В ыполните Run | Step over, или нажмите F8. Вы получите примерно такую картину, как на рисунке. Синяя стрелка указывает, какой оператор будет выполнен. Используя шаг с обходом (F8), шаг с заходом (F7) можно исполнять программу. Кроме этого, имеются дополнительные возможности, например исполнение кода до курсора (F4), исполнение до тех пор, пока не будет осуществлён возврат (Shift + F8), просматривать состояние переменных и выражений (Run | Inspect), изменять значение переменных (Ctrl + F7) и добавлять список отслеживаемых переменных и выражений (Ctrl + F5).
Шаг с обходом выполняет оператор, но не заходит в него. Например, если это вызов функции, то он будет произведён, но внутрь функции мы не попадём.
Шаг с заходом позволяет «зайти» в оператор, если он сложный. Например, перейти к функции, которая выполняется.
Шаг с выходом позволяет вернуться на уровень выше, если мы совершили шаг с заходом.
Окошко «Local Variables» слева снизу отображает текущее значение локальных переменных. Во время захода в функцию в значениях хранится мусор.
Нажимая F8, дойдите до строки 23, где происходит вызов функции printArray. Если вы нажмёте F7, то перейдёт внутрь функции printArray.
Если часть программы необходимо пропустить, то ставят точку останова. Для этого кликают по левому полю, рядом со строчкой, на которой необходимо остановиться. Останов можно осуществить только на операторе, нельзя остановиться, например, на определении переменной или пустой строке. В этом случае отладчик отметит крестом нерабочую точку останова. Во время отладки все возможные точки останова выделены синим, если по ним кликнуть, то они становятся активными красными.
Синие метки - возможные точки останова, красные - активныеПосле того, как точка останова выставлена, можно нажать F9. Программа будет выполняться до тех пор, пока не встретит точку останова. Это особенно удобно, когда нужно обойти ввод данных.
Точка останова может быть иметь ряд условий, например, число попаданий, фильтры, действие, которое выполняется при остановке и т.д. Для того, чтобы задать дополнительные свойства, кликните правой кнопкой мыши на точке и в выпадающем меню выберете Breakpoint Properties….
Пусть, например, мы хотим остановить выполнение программы тогда, когда значение локальной переменной i внутри цикла в функции стало равно 2. Для этого напишем соответствующее условие в поле condition
Останов выполнения программы может быть осуществлён по условиюТеперь, если нажать на «Продолжить», то программа будет работать до тех пор, пока значение локальной переменной i внутри функции не станет равным 2.
Слева расположено окно Watchlist. Watchlist позволяет добавлять отслуживаемые переменные и выражения. Кликните два раза по полю и появится диалоговое окно. Пусть, например, мы хотим трассировать сумму переменных i и j. Запишем в watchlist сумму
Читайте также: