Как сделать пошаговую отладку в visual studio
Перейти к содержимому

Как сделать пошаговую отладку в visual studio

  • автор:

Пошаговая отладка в Visual Studio. Рассказываем и показываем ОТ и ДО

Lorem ipsum dolor

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

Отладка кода — это один из самых важных процессов. Без отладки в свет не выходит ни одно нормальное приложение. Потому что , независимо от опыта разработчика, код не всегда работает так , как нужно. А иногда и вообще работает совершенно не так. Вот тут как раз и приходит на помощь отладчик, который позволит разобраться , что не так , и найти изъяны. Можно , конечно , много часов провести за самостоятельным выявлением багов, но отладчиком все-таки быстрее и проще.

В то же время отладка кода — это не волшебная палочка, которая быстренько найдет и исправит все недочеты вашего кода. Отладка — это процесс, при котором код пошагово выполняется в некой программе, например , в Visual Studio. В процессе выполнения идет поиск точек, где вы могли допустить ошибку. А вы в это время можете анализировать свой код и вносить необходимые правки для устранения «косяков».

Работа с отладчиком , даже с таким простым , как Visual Studio, требует определенных знаний и понимания , что там внутри происходит. Умение работать с отладчиком вам в любом случае пригодится, если вы хотите связать свою жизнь с разработкой ПО. В этой статье мы ознакомим вас с процессом отладки при помощи Visual Studio.

Отладка кода в Visual Studio

  • орфографические ошибки или опечатки,
  • неправильно подключенные API,
  • неправильное размещение последних корректировок в код,
  • и др.
  • ошибка компиляции;
  • ошибка преобразования типа;
  • код не поддерживает синтаксис;
  • и др .

Как запустить отладчик Visual Studio

  1. Запустить саму программу Visual Studio.
  2. Откр ыть код приложения, который необходимо отладить.
  3. Потом при помощи нажатия клавиши «F5» запустить режим отладки. Также это можно сделать через меню, если нажать «Отладка», а потом «Начать отладку» .
  • последовательность исполнения кода;
  • работу памяти;
  • значение переменных и др.

Какая информация выводится отладчиком Visual Studio

  1. Breakpoints. Тут собраны сведения о ваших точках останова.
  2. Output. Здесь выводятся служебные сообщения от самой Visual Studio.
  3. Watch. Здесь расположены переменные , за которыми вы наблюдаете в коде ; внести их можно только вручную.
  4. Autos. Здесь находится список переменных, с которыми прямо сейчас проводится работа.
  5. Locals. Здесь выв о д я тся все локальные переменные.
  6. Immediate. Здесь выв о д я тся переменные, которые вы т ребуете.
  7. Call Stack. Здесь расположен список вызываемых функций.
  8. Threads. Тут выводится информация о б уже стартовавших потоках вашего приложения.
  9. Modules. Отображаются все загруженные модули.
  10. Processes. Отображаются процессы модулей.
  11. Memory. Отображается память рассматриваемых модулей.
  12. Disassembly. Тут можно увидеть , как отображается ваш код на языке более высокого уровня.
  13. Registers. Выводится регистр значения.

В заключение

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

Мы будем очень благодарны

если под понравившемся материалом Вы нажмёте одну из кнопок социальных сетей и поделитесь с друзьями.

Руководство. Отладка кода C# с помощью Visual Studio

Область применения:yesVisual Studio Visual Studio для Mac noVisual Studio Code no

В этом пошаговом руководстве рассматриваются возможности отладчика Visual Studio. Более полное описание функций отладчика см. в статье c Знакомство с отладчиком Visual Studio. При отладке приложения обычно это означает, что приложение запущено с подключенным отладчиком. При выполнении этой задачи отладчик предоставляет множество способов узнать, что делает ваш код во время выполнения. Вы можете пошагово перемещаться по коду и просматривать значения, хранящиеся в переменных, задавать контрольные значения для переменных, чтобы отслеживать изменение значений, изучать путь выполнения кода, просматривать выполнение ветви кода и т. д. Если это упражнение впервые вы пытались отладить код, вам может потребоваться прочитать отладку для абсолютных начинающих , прежде чем пройти эту статью.

Хотя демонстрационное приложение — C#, большинство функций применимы к C++, Visual Basic, F#, Python, JavaScript и другим языкам, поддерживаемым Visual Studio (F#, не поддерживает редактирование и продолжение). F# и JavaScript не поддерживают окно «Автозапись «). На снимках экрана представлены примеры на C#.

При работе с этим руководством вы сделаете следующее:

  • Запуск отладчика и попадание в точки останова.
  • Использование команд для пошагового выполнения кода в отладчике.
  • Проверка переменных в подсказках к данным и окнах отладчика.
  • Изучение стека вызовов

Необходимые компоненты

У вас должна быть установлена среда Visual Studio 2022 и рабочая нагрузка Разработка классических приложений .NET.

У вас должна быть установлена среда Visual Studio 2019 и рабочая нагрузка Кроссплатформенная разработка .NET Core.

Установите Visual Studio бесплатно со страницы скачиваемых материалов Visual Studio, если еще не сделали этого.

Если вам нужно установить рабочую нагрузку, но вы уже используете Visual Studio, выберите пункт Средства>Получить средства и компоненты. , после чего запустится Visual Studio Installer. Запускается Visual Studio Installer. Выберите рабочую нагрузку Кроссплатформенная разработка .NET Core и затем элемент Изменить.

Если у вас уже есть Visual Studio, но не установлена рабочая нагрузка Разработка классических приложений .NET, выберите Средства>Получить средства и возможности. После выполнения этих действий запустится Visual Studio Installer. Затем в Visual Studio Installer выберите рабочую нагрузку Разработка классических приложений .NET, а затем — Изменить.

Создание проекта

Сначала вы создадите проект консольного приложения .NET Core. Для этого типа проекта уже имеются все нужные файлы шаблонов, что избавляет вас от лишней работы.

  1. Откройте Visual Studio. Если окно запуска не открыто, выберите окно «Пуск файла>«.
  2. В окне запуска выберите Создание нового проекта.

Screenshot of the C# template for the Console App.

  1. В окне создания проекта введите консоль в поле поиска. Затем выберите C# в списке языков и Windows в списке платформ. После применения фильтров языка и платформы выберите шаблон консольного приложения для .NET Core и нажмите кнопку «Далее«.

Примечание. Если шаблон Консольное приложение отсутствует, его можно установить из окна Создание проекта. В сообщении Не нашли то, что искали? выберите ссылку Установка других средств и компонентов. После этого в Visual Studio Installer выберите рабочую нагрузку Кроссплатформенная разработка .NET Core.

Screenshot of the

  1. В окне создания проекта введите консоль в поле поиска. Затем выберите C# в списке языков и Windows в списке платформ. После применения фильтров языка и платформы выберите шаблон консольного приложения и нажмите кнопку «Далее«.

Примечание. Если шаблон консольного приложения не отображается, его можно установить в окне создания проекта . В сообщении Не нашли то, что искали? выберите ссылку Установка других средств и компонентов. После этого в Visual Studio Installer выберите рабочую нагрузку Разработка классических приложений .NET.

Новый проект открывается в Visual Studio.

Создание приложения

В файле Program.cs замените все его содержимое по умолчанию следующим кодом:

using System; class ArrayExample < static void Main() < char[] letters = < 'f', 'r', 'e', 'd', ' ', 's', 'm', 'i', 't', 'h'>; string name = ""; int[] a = new int[10]; for (int i = 0; i < letters.Length; i++) < name += letters[i]; a[i] = i + 1; SendMessage(name, a[i]); >Console.ReadKey(); > static void SendMessage(string name, int msg) < Console.WriteLine("Hello, " + name + "! Count to " + msg); >> 

Запуск отладчика

Image of the Start Debugging button.

  1. Нажмите клавишу F5 (Отладка > Начать отладку) или кнопку Начать отладкуна панели инструментов отладки. При нажатии клавиши F5 происходит запуск приложения с присоединенным отладчиком. Но пока мы не сделали ничего особенного, чтобы проанализировать код. Таким образом, приложение просто загружается, и вы видите эти выходные данные консоли.
Hello, f! Count to 1 Hello, fr! Count to 2 Hello, fre! Count to 3 Hello, fred! Count to 4 Hello, fred ! Count to 5 Hello, fred s! Count to 6 Hello, fred sm! Count to 7 Hello, fred smi! Count to 8 Hello, fred smit! Count to 9 Hello, fred smith! Count to 10 

Image of the Stop Debugging button.

В этом руководстве вы внимательно изучите это приложение с помощью отладчика и ознакомьтесь с функциями отладчика.

  • Остановите отладчик, нажав красную кнопку остановки (SHIFT + F5).
  • В окне консоли нажмите клавишу, чтобы закрыть его.
  • В основном мы используем сочетания клавиш, поскольку так быстрее выполнять команды отладчика. Кроме того, указаны эквивалентные команды, такие как команды панели инструментов или меню.

    Screenshot of the Debug Target button in the Standard toolbar of Visual Studio 2022.

      Чтобы запустить отладчик, нажмите клавишу F5 или кнопку Целевой объект отладки на стандартной панели инструментов, или же нажмите кнопку Начать отладку на панели инструментов «Отладка» или выберите Отладка >Начать отладку в строке меню. Клавиша F5 запускает приложение с прикрепленным к процессу приложения отладчиком. Так как специально для изучения кода ничего сделано не было, приложение будет выполняться до завершения и появятся выходные данные консоли.

    Hello, f! Count to 1 Hello, fr! Count to 2 Hello, fre! Count to 3 Hello, fred! Count to 4 Hello, fred ! Count to 5 Hello, fred s! Count to 6 Hello, fred sm! Count to 7 Hello, fred smi! Count to 8 Hello, fred smit! Count to 9 Hello, fred smith! Count to 10 

    Screenshot of the Stop debugging button in the Debug toolbar of Visual Studio 2022.

  • Чтобы отключить отладчик, нажмите сочетание клавиш SHIFT+F5 или кнопку Остановить отладку на панели инструментов «Отладка» или выберите Отладка >Остановить отладку в строке меню.
  • В окне консоли нажмите любую клавишу, чтобы закрыть его.
  • Установка точки останова и запуск отладчика

    1. for В цикле Main функции установите точку останова, щелкнув левое поле в следующей строке кода: name += letters[i]; В месте установки точки останова появится красный круг Image of a breakpoint.. Точки останова — это один из самых простых и важных компонентов надежной отладки. Точка останова указывает, где Visual Studio следует приостановить выполнение кода, чтобы вы могли проверить значения переменных или поведение памяти либо выполнение ветви кода.
    2. Нажмите клавишу F5 или кнопку «Начать отладку «. Screenshot of the Start Debugging button.Приложение запускается, а отладчик выполняется в строке кода, в которой устанавливается точка останова. Желтая стрелка представляет инструкцию, на которой отладчик приостановлен, который также приостанавливает выполнение приложения в той же точке (эта инструкция еще не выполнена). Если приложение еще не запущено, F5 запускает отладчик и останавливается в первой точке останова. В противном случае F5 продолжает выполнение приложения до следующей точки останова. Точки останова полезны, если вам известны строка или раздел кода, которые вы хотите подробно рассмотреть. Дополнительные сведения о различных типах точек останова, которые можно задать, например об условных точках останова, см. в разделе Использование точек останова.
    1. for В цикле Main функции установите точку останова, щелкнув левое поле в следующей строке кода: name += letters[i]; В месте установки точки останова появится красный круг . Screenshot of a breakpoint in Visual Studio 2022.Точки останова — это важные компоненты надежной отладки. Точки останова можно установить там, где Visual Studio следует приостановить выполнение кода, чтобы вы могли проверить значения переменных или поведение памяти либо выполнение ветви кода.
    2. Чтобы запустить отладку, нажмите клавишу F5 или кнопку Целевой объект отладки на стандартной панели инструментов, или же нажмите кнопку Начать отладку на панели инструментов «Отладка» или выберите Отладка >Начать отладку в строке меню. Будет запущено приложение, и отладчик перейдет к строке кода, где задана точка останова. Screenshot showing a breakpoint in the code editor of Visual Studio 2022, with code execution paused at the breakpoint.Желтая стрелка указывает на оператора, на котором приостановлен отладчик. Выполнение приложения приостановлено в той же точке, но оператор еще не выполнен. Если приложение не запущено, F5 запускает отладчик, который запускает приложение, пока не достигнет первой точки останова. Если приложение приостановлено в точке останова, нажав клавишу F5, можно продолжить выполнение приложения, пока оно не достигнет следующей точки останова. Точки останова будут полезны, если вам известны строка или раздел кода, поэтому изучите их подробно. Дополнительные сведения о различных типах точек останова, которые можно задать, например об условных точках останова, см. в этом разделе.

    Навигация по коду и проверка данных с помощью подсказок по данным

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

    1. Хотя выполнение кода приостановлено в name += letters[i] инструкции, наведите указатель мыши на letters переменную и увидите его значение по умолчанию, значение первого элемента в массиве. char[10] Функции, позволяющие проверять переменные, являются самыми полезными возможностями отладчика. Реализовывать эту задачу можно разными способами. Часто при попытке отладки проблемы вы пытаетесь выяснить, хранят ли переменные значения, которые они ожидают, в определенное время.
    2. Разверните переменную letters , чтобы просмотреть ее свойства, включая все элементы, которые она содержит. Screenshot of the debugger paused at the
    3. Затем наведите указатель мыши на переменную name , чтобы просмотреть ее текущее значение — пустую строку.
    4. Нажмите клавишу F10 (или выберите Отладка > Шаг с обходом) дважды, чтобы перейти к вызову метода SendMessage , а затем еще раз нажмите клавишу F10. При нажатии клавиши F10 отладчик переходит к следующей инструкции без захода в функции или методы в коде приложения (код продолжает выполняться). Нажимая клавишу F10 в вызове метода SendMessage , мы пропускаем код реализации для SendMessage (который нас пока не интересует).
    5. Несколько раз нажмите клавишу F10 (или выберите Отладка>Шаг с обходом), чтобы выполнить несколько итераций по циклу for , каждый раз снова приостанавливая выполнение в точке останова и наводя указатель мыши на переменную name , чтобы просмотреть ее значение. Значение переменной изменяется при каждой итерации цикла for — f , затем fr , fre и т. д. Для более быстрого прохода по циклу в этом сценарии можно нажать клавишу F5 (или выбрать Отладка>Продолжить), чтобы перейти к точке останова, а не к следующей инструкции. Часто при отладке требуется быстрый способ проверка значений свойств в переменных, чтобы узнать, хранят ли они значения, которые вы ожидаете хранить, и советы по данным являются хорошим способом для этого.
    6. Хотя выполнение кода остается приостановленным в for цикле в методе Main , нажимайте клавишу F11 (или выберите «Шаг отладки>») до тех пор, пока не приостанавливается вызов SendMessage метода. Вы должны находиться в следующей строке кода: SendMessage(name, a[i]);
    7. Еще раз нажмите клавишу F11, чтобы выполнить шаг с заходом в метод SendMessage . Желтый указатель перемещается в метод SendMessage . Screenshot of the execution pointer at the SendMessage method.F11 — это команда Шаг с заходом, которая выполняет приложение с переходом к следующему оператору. Клавишу F11 удобно использовать для более детальной проверки потока выполнения. По умолчанию отладчик пропускает неиспользуемый код (если требуется дополнительные сведения, см . только мой код). Предположим, что вы закончите изучение SendMessage метода, и вы хотите выйти из метода, но остаться в отладчике. Это можно сделать с помощью команды Шаг с выходом.
    8. Нажмите клавиши SHIFT + F11 (или выберите Отладка > Шаг с выходом). Эта команда возобновляет выполнение приложения (и работу отладчика) до возврата данных текущим методом или текущей функции. Вы должны вернуться в цикл for в методе Main , приостановленный на вызове метода SendMessage . Дополнительные сведения о различных способах перемещения по коду см. в разделе Навигация по коду в отладчике.
    1. Пока выполнение кода приостановлено в name += letters[i] инструкции, наведите указатель мыши на letters переменную, чтобы увидеть подсказку данных, показывающую размер массива и тип элемента. char[10]

    Примечание. Одной из наиболее полезных возможностей отладчика является его способность проверять переменную. Часто при попытке выполнить отладку после возникновения проблемы пользователь старается выяснить, содержат ли переменные значения, которые требуются ему в определенное время. Хорошим способом проверить это является просмотр подсказок по данным.

  • Разверните переменную letters , чтобы просмотреть все ее элементы массива и их значения. Screenshot of a debugger data tip in Visual Studio 2022 that shows the element values for the
  • Наведите указатель мыши на переменную name , чтобы просмотреть ее текущее значение — пустую строку.
  • Чтобы переместить отладчик к следующему оператору, нажмите клавишу F10 или кнопку Шаг с обходом на панели инструментов «Отладка» или выберите Отладка>Шаг с обходом в строке меню. Дважды нажмите клавишу F10, чтобы перейти за пределы вызова метода SendMessage . При нажатии клавиши F10 отладчик выполняется без захода в функции или методы в коде приложения, хотя код продолжает выполняться. Таким образом мы пропустили отладку кода в методе SendMessage , который сейчас нас не интересует.
  • Чтобы несколько раз выполнить итерацию по циклу for , повторно нажимайте клавишу F10. Во время каждой итерации цикла сделайте приостановку в точке останова, а затем наведите указатель мыши на переменную name , чтобы проверить ее значение в подсказке по данным. Screenshot of a debugger data tip in Visual Studio 2022 that shows the string value for the Значение переменной изменяется при каждой итерации цикла for — f , затем fr , fre и т. д. Чтобы ускорить работу отладчика при прохождении цикла, взамен нажмите клавишу F5 и перейдите к вашей точке останова вместо следующего оператора.
  • Пока выполнение кода приостановлено в for цикле Main метода, выберите F11 или нажмите кнопку «Шаг В» на панели инструментов отладки или выберите «Шаг отладки>» в строке меню, пока не достигнете SendMessage вызова метода. Отладчик должен быть приостановлен в следующей строке кода: SendMessage(name, a[i]);
  • Чтобы выполнить шаг с заходом в метод SendMessage , снова нажмите клавишу F11. Желтый указатель перемещается в метод SendMessage . Screenshot showing the execution pointer of the debugger within the Нажав клавишу F11, вы сможете более подробно изучить поток выполнения кода. Чтобы выполнить шаг с заходом в метод из вызова метода, нажмите клавишу F11. По умолчанию отладчик пропускает шаг в неиспользуемые методы. Дополнительные сведения об отладке неиспользуемого кода см. в разделе «Просто мой код». После завершения отладки метода SendMessage можно вернуться к циклу for метода main .
  • Чтобы выйти из метода SendMessage , нажмите сочетание клавиш SHIFT+F11 или кнопку Шаг с выходом на панели инструментов отладки или выберите Отладка >Шаг с выходом в строке меню. Шаг с выходом возобновляет выполнение приложения и работу отладчика до возврата текущего метода или функции. В цикле Main метода отображается желтый указатель for , приостановленный при вызове SendMessage метода. Дополнительные сведения о различных способах перемещения по коду см. в разделе Навигация по коду в отладчике.
  • Переход по коду с помощью команды «Выполнение до щелкнутого»

    1. Нажмите клавишу F5, чтобы снова перейти к точке останова.
    2. В редакторе кода прокрутите экран вниз и наведите указатель мыши на метод в SendMessage методе, пока не появится зеленая кнопкаImage of the Run to Click button.«Запустить к щелчку«. Console.WriteLine Подсказка для кнопки показывает «Выполнить выполнение здесь». Screenshot of the Run to Click button.

    Примечание. Кнопка Выполнение до щелкнутого впервые появилась в Visual Studio 2017. (Если кнопка с зеленой стрелкой отсутствует, воспользуйтесь клавишей F11, чтобы переместить отладчик в нужное место.)

    Image of the Run to Click button.

  • Щелкните кнопку Выполнить до нажатия. Отладчик перемещается к методу Console.WriteLine . Использование этой кнопки аналогично установке временной точки останова. Запуск к щелчку удобно для быстрого обхода в видимой области кода приложения (вы можете выбрать любой открытый файл).
  • Screenshot showing the Run to Click button in Visual Studio 2022.

    1. Нажмите клавишу F5, чтобы снова перейти к точке останова.
    2. В редакторе кода наведите указатель мыши на Console.WriteLine вызов метода в SendMessage методе, пока не появится кнопка «Выполнить к нажатию «. Подсказка для кнопки показывает «Выполнить выполнение здесь».
    3. Нажмите на кнопку Выполнение до щелчка. Кроме того, вы можете навести курсор на оператор Console.WriteLine и нажать сочетание клавиш Ctrl+F10. Другим способом щелкните вызов метода Console.WriteLine правой кнопкой мыши и выберите в контекстном меню пункт Выполнение до текущей позиции. Отладчик перемещается к вызову метода Console.WriteLine . Использование кнопки Выполнение до щелчка аналогично настройке временной точки останова и удобно для быстрого обхода в видимой области кода приложения в открытом файле.

    Быстрый перезапуск приложения

    Image of the Restart App button.

    Нажмите кнопку «Перезапустить« на панели инструментов отладки (CTRL + SHIFT + F5).

    Кнопка Перезапустить позволяет сэкономить время, затрачиваемое на остановку приложения и перезапуск отладчика. Отладчик приостанавливается в первой точке останова, достигнутой при выполнении кода.

    Отладчик еще раз останавливается в точке останова, ранее заданной вами в цикле for .

    Чтобы повторно запустить приложение с самого начала в отладчике, нажмите сочетание клавиш CTRL+SHIFT+F5 или кнопку Перезапустить на панели инструментов «Отладка» или выберите Отладка>Перезапустить в строке меню.

    Screenshot of the Restart button in the Debug toolbar of Visual Studio 2022.

    Кнопка Перезапустить останавливает отладчик, а затем сразу перезапускает его. Когда отладчик перезапускается, он запускается в первую точку останова, которая является ранее заданной точкой останова внутри for цикла, а затем приостанавливается.

    Проверка переменных с помощью окон «Видимые» и «Локальные»

    Screenshot of the Locals Window in Visual Studio.

    1. Взгляните на окно Видимые в нижней части редактора кода. Если он закрыт, откройте его при приостановке в отладчике, выбрав «Отладка>Windows>Autos«. В окне Видимые отображаются переменные и их текущие значения. В окне Видимые отображаются все переменные, используемые в текущей или предыдущей строке (сведения о зависящем от языка поведении см. в соответствующей документации).
    2. Затем посмотрите на окно Локальные на вкладке рядом с окном Видимые.
    3. Разверните переменную letters , чтобы отобразить элементы, которые она содержит. В окне Локальные показаны переменные, которые находятся в текущей области, то есть текущем контексте выполнения.

    В окнах Видимые и Локальные отображаются значения переменных во время отладки. Окна доступны только во время сеанса отладки. В окне Видимые отображаются переменные, используемые в текущей строке, в которой находится отладчик, и в предыдущей строке. В окне Локальные отображаются переменные, определенные в локальной области, которая обычно является текущей функцией или методом.

    Screenshot of the Locals window in Visual Studio 2022, with the

    1. Во время приостановки отладчика просмотрите окно Видимые в нижней части редактора кода. Если окно Видимые закрыто, нажмите клавиши Ctrl+D, A или в строке меню выберите Отладка >Windows >Видимые.
    2. Если отладчик по-прежнему приостановлен, просмотрите окно Локальные, расположенное во вкладке рядом с окном Видимые. Если окно Локальные закрыто, нажмите сочетание клавиш Ctrl+D, L или выберите Отладка >Windows >Локальные.
    3. В окне Локальные разверните переменную letters , чтобы просмотреть все ее элементы массива и их значения.

    Дополнительные сведения об окнах Видимые и Локальные см. в статье о проверке переменных в окнах «Видимые» и «Локальные».

    Установка контрольного значения

    В основном окне редактора кода щелкните правой кнопкой мыши переменную name и выберите команду Добавить контрольное значение.

    В нижней части редактора кода откроется окно Контрольное значение. В окне Контрольное значение можно указать переменную (или выражение), которую необходимо отслеживать.

    Теперь у вас есть контрольное значение, заданное для переменной name , и по мере перемещения по отладчику вы можете наблюдать за изменением его значения. В отличие от других окон переменных, окно «Контроль» всегда отображает переменные, которые вы просматриваете (они серые при выходе из область).

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

    1. Когда отладчик будет приостановлен, щелкните правой кнопкой мыши переменную name и выберите Добавить контрольное значение. В нижней части редактора кода по умолчанию откроется окно контрольных значений.
    2. Теперь, когда вы установили контрольное значение для переменной name , пошагово выполните код, чтобы увидеть, как значение переменной name меняется с каждой итерацией цикла for . В отличие от других окон переменных, в окне «Контрольные данные» всегда отображаются переменные, которые вы просматриваете. Переменные, не область, отображаются как недоступные.

    Дополнительные сведения о окне «Просмотр» см. в разделе «Просмотр переменных» с окнами «Просмотр».

    Изучение стека вызовов

    Screenshot of the Call Stack window in Visual Studio.

    1. Хотя выполнение кода приостановлено в цикле for , выберите окно стека вызовов, которое по умолчанию открыто в нижней правой области. Если он закрыт, откройте его при приостановке в отладчике, выбрав отладку>стека вызовов Windows.>
    2. Несколько раз нажмите клавишу F11, пока отладчик не приостановится в методе SendMessage . Взгляните на окно Стек вызовов. В окне Стек вызовов показан порядок вызова методов и функций. В верхней строке приведена текущая функция (в данном приложении метод SendMessage ). Во второй строке показано, что функция SendMessage была вызвана из метода Main и т. д.

    Примечание. Окно Стек вызовов аналогично перспективе «Отладка» в некоторых интегрированных средах разработки, например Eclipse.

    Стек вызовов может помочь разобраться в потоке выполнения приложения, показывая порядок, в котором вызываются методы и функции.

    Screenshot of the Call Stack window in Visual Studio 2022.

    1. Пока отладчик приостановлен в цикле for , просмотрите окно Стек вызовов, которое по умолчанию открывается в нижней правой области редактора кода. Если окно Стек вызовов закрыто, нажмите сочетание клавиш Ctrl+D, A или в строке меню выберите Отладка >Windows >Стек вызовов. В окне «Стек вызовов» отображается желтый указатель на текущий Main метод.
    2. Несколько раз нажмите клавишу F11, пока отладчик не приостановится в методе SendMessage . В верхней строке окна Стек вызовов показана текущая функция – метод SendMessage . Во второй строке показано, что метод SendMessage был вызван из метода Main .

    Примечание. Окно Стек вызовов аналогично перспективе «Отладка» в некоторых наборах IDE, например Eclipse.

    Дополнительные сведения о Стеке вызовов см. на этой странице.

    Изменение потока выполнения

    1. Дважды нажмите клавишу F11, чтобы запустить метод Console.WriteLine .
    2. При приостановке SendMessage вызова метода с помощью отладчика используйте мышь для захвата желтой стрелки или указателя выполнения (в левом поле) и перетащите указатель вверх по одной строке в инструкцию Console.WriteLine .
    3. Нажмите клавишу F11. Отладчик повторно запускает Console.WriteLine метод (это действие отображается в выходных данных окна консоли). Изменяя поток выполнения, можно решать множество задач, например тестировать различные пути выполнения кода или повторно выполнять код без перезапуска отладчика.

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

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

    1. Когда отладчик приостановится на вызове метода SendMessage в цикле for , три раза нажмите клавишу F11, чтобы выполнить шаг с заходом в метод SendMessage и перейти за пределы метода Console.WriteLine его выполнения. Теперь отладчик приостанавливается на последней закрывающей фигурной скобке метода SendMessage .
    2. Мышью захватите желтую стрелку или указатель выполнения (в поле слева), а затем перетащите указатель вверх на одну строку. Теперь отладчик снова находится в операторе Console.WriteLine .
    3. Нажмите клавишу F11. Отладчик повторно запускает Console.WriteLine метод и отображается повторяющаяся строка в выходных данных окна консоли.
    4. Чтобы продолжить выполнение приложения, нажмите клавишу F5.

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

    Используйте эту возможность осторожно. В подсказке указателя выполнения появится предупреждение о возможных непредвиденных последствиях. Могут также появиться другие предупреждения. Переместив указатель выполнения, нельзя вернуть приложение в предыдущее состояние.

    Дополнительные сведения об изменении потока выполнения см. в этом разделе.

    Поздравляем с завершением этого учебника!

    Следующие шаги

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

    Отладка приложений в Visual Studio

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

    Содержание скрыть

    Точки останова

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

    Visual Studio Debug

    При установке точки останова в окне редактора кода будет выведена иконка напротив строки кода.

    Visual Studio Debug

    Клик левой кнопкой мыши по иконке приведет к удалению точки остановки, а для управления необходимо открыть контекстное меню (клик правой кнопкой).

    Visual Studio Debug

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

    Visual Studio Debug

    Работа с выводом отладчика

    Запуск отладчика происходит при запуске проекта в среде разработки. При наличии установленных точек останова, выполнение прервется на первой из них автоматически. Важно понимать, что отладчик будет останавливать выполнение модуля напротив каждой активной точки остановки. Подробнее поговорим о том, какая информация может быть доступна во время отладки. Прежде всего, информация эта четко структурирована и выводится в отдельных окнах.

    Visual Studio Debug

    Посмотреть вывод всей возможной информации можно во вкладке Debug->Window.

    Visual Studio Debug

    Breakpoints – информация обо всех точках остановки в отлаживаемом проекте.

    Visual Studio Debug

    Output – окно вывода Visual Studio. Используется для вывода служебных сообщений при работе со средой.

    Visual Studio Debug

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

    Visual Studio Debug

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

    Locals – вывод локальных переменных и их значений.

    Visual Studio Debug

    Immediate – поиск и вывод значения переменной по символьному представлению. В отличие от Watch, не хранит список значений, а выводит значение по требованию.

    Visual Studio Debug

    Call Stack – стек вызовов. Показывает последовательность вызовов функций для отлаживаемого модуля до точки остановки.

    Visual Studio Debug

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

    Visual Studio Debug

    Modules – список загруженных модулей, необходимых для работы отлаживаемого (которые он подгружает для работы).

    Visual Studio Debug

    Processes – список процессов отлаживаемого модуля.

    Visual Studio Debug

    Memory – просмотр памяти отлаживаемого модуля в традиционном для любого hex-редактора виде.

    Visual Studio Debug

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

    Visual Studio Debug

    Registers – вывод значений в регистрах

    Visual Studio Debug

    Что следует знать при работе c выводом отладчика

    Информация в большинстве окон обновляется для каждой инструкции. Т.е. отладчик регистрирует и изменяет значения на новые. При этом измененные значения помечаются красным цветом.

    Visual Studio Debug

    Окно Watch поддерживает так называемые псевдопеременные. Своего рода макросы для определенных значений. Например, для вывода результата GetLastError после каждой строчки кода. Подробнее об этом можно прочитать здесь. Также Watch выполняет арифметические операции с переменными, а дляmanaged-кода может выполнять код.

    Visual Studio Debug

    Пошаговая отладка

    Для того чтобы начать процесс отладки, необходимо поставить точку остановки в нужном месте и запустить модуль. Отладка станет доступна по достижению точки остановки. Также можно принудительно остановить выполнение модуля, в таком случае курсор автоматически переместится на код, который выполнялся до остановки. Но точка остановки при этом не установится.
    Во время отладки в панели инструментов Visual Studio доступен Debug Toolbar. Если его нет, включить его можно, отметив элемент меню Debug во вкладке View->Toolbars.

    Visual Studio Debug

    Все кнопки в панели инструментов повторяют вкладку Debug, нас в данный момент интересует навигация по отлаживаемому коду. В качестве примера рассмотрим следующую ситуацию:

    Visual Studio Debug

    шаг со входом. (f11) Если отладка остановилась на вызове функции, шаг со входом необходим для того, чтобы остановить выполнение модуля внутри тела функции. Т.е. если внутри функции нет точки остановки, можно продолжить пошаговое выполнение, выполнив шаг со входом. Обратите внимание, в данном примере шаг со входом остановит выполнение программы внутри функции get_message, а не hello, т.к. сначала выполняется она. Т.е. шаг со входом в данном случае остановит выполнение модуля на строке 5.

    шаг с обходом. (f10) Пошаговая отладка внутри функции. Не переходит внутрь функции при ее вызове, а выполняет как обычную инструкцию. При завершении функции останавливается на верхней в стеке вызовов. Вне зависимости от того, сколько функций вызывается на строчке, отладчик не прерывает внутри этих функций выполнение модуля. В примере следующий шаг будет на строке 16.

    шаг с выходом. (Shift + f11) В этом случае отладчик остановит выполнение модуля после выхода из текущей функции, где происходит отладка. В данном примере будет выход из функции main и переключение на отладку кода CRT.

    Visual Studio Debug

    Во время пошаговой отладки важно также знать, что курсор можно передвинуть на необходимую строчку кода (Drag&Drop). Т.е. при желании заново отладить алгоритм не нужно перезапускать процесс отладки. Правда следует понимать, что в этом случае ожидаемое поведение программы не гарантировано. Разработчик должен отдавать отчет своим действиям. Например, в случае ниже программист получит ошибку, если передвинет курсор на строку 9, т.к. память для с еще не была выделена.

    Visual Studio Debug

    Заключение

    Процесс отладки в Visual Studio является одним из самых простых, если сравнивать с другими IDE. В статье были рассмотрены общие средства отладки для различных технологий. Тем не менее, в зависимости от типа проекта, средства для отладки могут дополняться. Например, при отладке GPU-кода. Да и возможности по отладке пошли далеко вперед после Visual Studio 2008 в сторону упрощения. Быть в курсе последних событий поможет тематический раздел в MSDN.

    Урок №26. Отладка программ: степпинг и точки останова

    Как ни странно, программирование может быть сложным и ошибок может быть очень много. Ошибки, как правило, попадают в одну из двух категорий: синтаксические или семантические/смысловые.

    Оглавление:

    1. Типы ошибок
    2. Отладчик
    3. Степпинг
      • Команда «Шаг с заходом»
      • Команда «Шаг с обходом»
      • Команда «Шаг с выходом»
    4. Команда «Выполнить до текущей позиции»
    5. Команда «Продолжить»
    6. Точки останова

    Типы ошибок

    Синтаксическая ошибка возникает, когда вы пишете код, который не соответствует правилам грамматики языка C++. Например, пропущенные точки с запятой, необъявленные переменные, непарные круглые или фигурные скобки и т.д. В следующей программе есть несколько синтаксических ошибок:

    #include ; // директивы препроцессора не заканчиваются точкой с запятой

    std : cout < "Hi there; return 0 // пропущена точка с запятой в конце стейтмента

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

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

    Иногда это может привести к сбою в программе, например, если делить на ноль:

    std :: cout << "Hello, word!" ; // орфографическая ошибка

    Либо делать вообще не то, что нужно:

    int add ( int x , int y )
    return x — y ; // функция должна выполнять сложение, но выполняет вычитание
    std :: cout << add ( 5 , 3 ) ; // должно быть 8, но результат - 2

    К сожалению, компилятор не ловит подобные ошибки, так как он проверяет только то, что вы написали, а не то, что вы хотели этим сделать.

    В примерах, приведенных выше, ошибки довольно легко обнаружить. Но в большинстве программ (в которых больше 40 строк кода), семантические ошибки увидеть с помощью простого просмотра кода будет не так-то и легко.

    И здесь нам на помощь приходит отладчик.

    Отладчик

    Отладчик (или «дебаггер», от англ. «debugger») — это компьютерная программа, которая позволяет программисту контролировать выполнение кода. Например, программист может использовать отладчик для выполнения программы пошагово, последовательно изучая значения переменных в программе.

    Старые дебаггеры, такие как GDB, имели интерфейс командной строки, где программисту приходилось вводить специальные команды для старта работы. Современные дебаггеры имеют графический интерфейс, что значительно упрощает работу с ними. Сейчас почти все современные IDE имеют встроенные отладчики. То есть, вы можете использовать одну среду разработки как для написания кода, так и для его отладки (вместо постоянного переключения между разными программами).

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

    Примечание: Перед тем как продолжить, убедитесь, что вы находитесь в режиме конфигурации «Debug». Все скриншоты данного урока выполнены в Visual Studio 2019.

    Степпинг

    Степпинг (англ. «stepping») — это возможность отладчика выполнять код пошагово (строка за строкой). Есть три команды степпинга:

    Команда «Шаг с заходом»

    Команда «Шаг с обходом»

    Команда «Шаг с выходом»

    Мы сейчас рассмотрим каждую из этих команд в индивидуальном порядке.

    Команда «Шаг с заходом»

    Команда «Шаг с заходом» (англ. «Step into») выполняет следующую строку кода. Если этой строкой является вызов функции, то «Шаг с заходом» открывает функцию и выполнение переносится в начало этой функции.

    Давайте рассмотрим очень простую программу:

    void printValue ( int nValue )
    std :: cout << nValue ; printValue ( 5 ) ;

    Как вы уже знаете, при запуске программы выполнение начинается с вызова главной функции main(). Так как мы хотим выполнить отладку внутри функции main(), то давайте начнем с использования команды «Шаг с заходом».

    В Visual Studio, перейдите в меню «Отладка» > «Шаг с заходом» (либо нажмите F11 ):

    Если вы используете другую IDE, то найдите в меню команду «Step Into/Шаг с заходом» и выберите её.

    Когда вы это сделаете, должны произойти две вещи. Во-первых, так как наше приложение является консольной программой, то должно открыться консольное окно. Оно будет пустым, так как мы еще ничего не выводили. Во-вторых, вы должны увидеть специальный маркер слева возле открывающей скобки функции main(). В Visual Studio этим маркером является жёлтая стрелочка (если вы используете другую IDE, то должно появиться что-нибудь похожее):

    Стрелка-маркер указывает на следующую строку, которая будет выполняться. В этом случае отладчик говорит нам, что следующей строкой, которая будет выполняться, — будет открывающая фигурная скобка функции main(). Выберите «Шаг с заходом» еще раз — стрелка переместится на следующую строку:

    Это значит, что следующей строкой, которая будет выполняться, — будет вызов функции printValue(). Выберите «Шаг с заходом» еще раз. Поскольку printValue() — это вызов функции, то мы переместимся в начало функции printValue():

    Выберите еще раз «Шаг с заходом» для выполнения открывающей фигурной скобки printValue(). Стрелка будет указывать на std::cout

    Теперь выберите «Шаг с обходом» (F10). Вы увидите число 5 в консольном окне.

    Выберите «Шаг с заходом» еще раз для выполнения закрывающей фигурной скобки printValue(). Функция printValue() завершит свое выполнение и стрелка переместиться в функцию main(). Обратите внимание, в main() стрелка снова будет указывать на вызов printValue():

    Может показаться, будто отладчик намеревается еще раз повторить цикл с функцией printValue(), но в действительности он нам просто сообщает, что он только что вернулся из этой функции.

    Выберите «Шаг с заходом» два раза. Готово, все строки кода выполнены. Некоторые дебаггеры автоматически прекращают сеанс отладки в этой точке. Но Visual Studio так не делает, так что если вы используете Visual Studio, то выберите «Отладка» > «Остановить отладку» (или Shift+F5 ):

    Таким образом мы полностью остановили сеанс отладки нашей программы.

    Команда «Шаг с обходом»

    Как и команда «Шаг с заходом», команда «Шаг с обходом» (англ. «Step over») позволяет выполнить следующую строку кода. Только если этой строкой является вызов функции, то «Шаг с обходом» выполнит весь код функции в одно нажатие и возвратит нам контроль после того, как функция будет выполнена.

    Примечание для пользователей Code::Blocks: Команда «Step over» называется «Next Line».

    Рассмотрим пример, используя следующую программу:

    Добавить комментарий

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