Поделиться через


Краткое руководство: навигация по отладчику (Xaml и C#)

В этом кратком руководстве продемонстрирована навигация по сеансам отладки Visual Studio, а также способы просмотра и изменения состояния программы в ходе сеанса.

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

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

Сочетания клавиш для работы с отладчиком. Навигацию по отладчику Visual Studio удобно осуществлять с помощью мыши или клавиатуры. Для многих шагов в этом разделе в скобках указано сочетание клавиш, позволяющее быстро выполнить то или иное действие. Например, текст "(клавиша F5)" означает, что нажав клавишу F5, можно запустить или продолжить выполнение отладчика.

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

Содержание раздела:

  • Create the sample app

  • Set and run to a breakpoint, step into a method, and examine program data

  • Step into, over, and out of methods

  • Set a conditional breakpoint, run to the cursor, and visualize a variable

  • Edit and continue, recover from an exception

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

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

Создание приложения по умолчанию для Магазина Windows на языке C#. Откройте Visual Studio. На домашней странице щелкните ссылку Создать проект. В диалоговом окне "Создать проект" выберите Visual C# из списка Установленные и щелкните Магазин Windows. В списке шаблонов проекта выберите Приложение. Visual Studio создает новые решение и проект и отображает конструктор MainPage.xaml и редактор кода XAML.

Откройте исходный файл MainPage.xaml.cs. Щелкните правой кнопкой мыши в любой части редактора XAML и выберите Просмотреть код. Отобразится файл кода программной части MainPage.xaml.cs. Обратите внимание, что в файле перечислен только один метод, конструктор MainPage().

Замена конструктора MainPage примером кода. Удалите метод MainPage(). Пройдите по ссылке Пример кода навигации по отладчику (Xaml и C#) и копируйте код, приведенный в разделе C#, в буфер. (Нажмите кнопку Назад в браузере или средстве просмотра справки, чтобы вернуться на страницу краткого руководства.) В редакторе Visual Studio вставьте код в блок partial class MainPage. Нажмите клавиши "CTRL + S", чтобы сохранить файл.

Теперь можно приступить к изучению примеров из этого раздела.

Задание точки останова и выполнение программы до точки останова, шаг с заходом в метод, изучение данных программы

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

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

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

Hh441470.collapse_all(ru-ru,VS.110).gifПример 1

В этом примере задается точка останова в конструкторе MainPage файла MainPage.xaml.cs, выполняется шаг с заходом в первый метод, просматриваются значения переменных и останавливается отладка.

Задание точки останова. Задайте точку останова в инструкции methodTrack = "Main Page"; конструктора MainPage. Выберите строку в затененной области редактора исходного кода (либо поместите курсор на строку и нажмите клавишу F9).

Шаг с заходом

Значок точки останова отобразится в этой области.

Выполнение до точки останова. Запустите сеанс отладки, щелкнув Начать отладку в меню Отладка (клавиша F5).

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

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

Теперь можно контролировать выполнение приложения и отслеживать состояние программы в ходе перемещения по инструкциям программы.

Шаг с заходом в метод. В меню Отладка выберите Шаг с заходом (клавиша F11).

Текущая строка

Обратите внимание, что отладчик переходит к следующей строке, на которой вызывается метод Example1. Снова выберите команду "Шаг с заходом". Отладчик переходит к точке входа метода Example1. Это означает, что метод загружен в стек вызовов, а для локальных переменных выделена память.

При заходе в строку кода отладчик выполняет одно из следующих действий.

  • Если следующая инструкция не является вызовом функции в решении, отладчик выполняет инструкцию, переходит к следующей, а затем приостанавливает выполнение.

  • Если инструкция является вызовом функции в решении, отладчик перемещается к точке входа вызываемой функции и приостанавливает выполнение.

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

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

Подсказка отладчика по данным

Наведите указатель мыши на переменную a. Запомните имя, значение и тип данных. Наведите указатель мыши на переменную methodTrack. Снова запомните имя, значение и тип данных.

Просмотр значений переменных в окне локальных переменных. В меню Отладка выберите пункт Окна и щелкните Локальные. (клавиши Alt+4).

Окно "Локальные"

Окно локальных переменных — это представление параметров и переменных функции в виде дерева. Свойства переменной объекта являются дочерними узлами самого объекта. Переменная this — это скрытый параметр в каждом методе объекта, представляющий сам объект. В данном случае, переменная представляет класс MainPage. Поскольку methodTrack является элементом класса MainPage, его значение и тип данных указаны в строке под элементом this. Разверните узел this, чтобы просмотреть сведения methodTrack.

Добавление контрольного значения для переменной methodTrack. Переменная methodWatch используется в данном кратком руководстве, чтобы показать методы, вызываемые в примерах. Чтобы просматривать значение переменной было удобнее, добавьте ее в окно контрольных значений. Щелкните правой кнопкой мыши имя переменной в окне локальных переменных и выберите Добавить контрольное значение.

Окно “Контрольное значение”

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

Шаг с заходом, обходом и выходом из методов

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

Обход строки кода, не содержащей вызов метода, выполняет строку так же, как при заходе в строку.

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

При обходе функции и выходе из нее функция выполняется.

Шаг с заходом, с обходом и c выходом из метода

Hh441470.collapse_all(ru-ru,VS.110).gifПример 2

В этом примере показан заход в метод, обход метода и выход из него.

Вызов метода Example2 в конструкторе MainPage. Отредактируйте конструктор MainPage и замените строку, следующую за methodTrack = String.Empty;, строкой Example2();.

Вызов метода Example2 из метода Demo

Выполнение до точки останова. Запустите сеанс отладки, щелкнув Начать отладку в меню Отладка (клавиша F5). Отладчик приостанавливает выполнение в точке останова.

Шаг с обходом строки кода. В меню Отладка выберите Шаг с обходом (клавиша F10). Отладчик выполняет инструкцию methodTrack = "MainPage"; так же, как и при выполнении шага с заходом.

Шаг с заходом в Example2 и Example2_A. Нажмите клавишу F11, чтобы выполнить шаг с заходом в метод Example2. Продолжайте заходить в инструкции метода Example2 до достижения строки int x = Example2_A();. Войдите в данную строку, чтобы переместиться в точку входа метода Example2_A. Продолжайте входить в каждую инструкцию метода Example2_A до тех пор, пока не вернетесь к методу Example2.

Example2

Шаг с обходом функции. Обратите внимание, что следующая строка метода Example2, int y = Example2_A();, практически совпадает с предыдущей. Эту строку вполне можно обойти. Нажмите клавишу F10, чтобы переместиться от возобновленного метода Example2 ко второму вызову метода Example2_A. Нажмите клавишу F10, чтобы обойти этот метод. Обратите внимание, что строка methodTrack указывает, что метод Example2_A был выполнен дважды. Кроме того, отладчик немедленно перемещается к следующей строке. Он не приостанавливает выполнение в точке, в которой возобновляется выполнение метода Example2.

Шаг с выходом из функции. Нажмите клавишу F11, чтобы войти в метод Example2_B. Обратите внимание, что Example2_B не сильно отличается от Example2_A. Чтобы выйти из этого метода, щелкните Шаг с выходом в меню Отладка (клавиши Shift + F11). Обратите внимание, что переменная methodTrack указывает, что метод Example2_B был выполнен и что отладчик вернулся к точке, в которой возобновляется выполнение метода Example2.

Остановка отладки. В меню "Отладка" выберите "Остановить отладку" (клавиши Shift+F5). Это позволит завершить сеанс отладки.

Задание условной точки останова, выполнение до текущей позиции и визуализация переменной

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

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

Иногда сложно просмотреть значение переменной в строке окна подсказок по данным или окна переменных. Отладчик может отображать строки, код HTML и Xml в средстве визуализации текста, которое является форматированным представлением значения в прокручиваемом окне.

Hh441470.collapse_all(ru-ru,VS.110).gifПример 3

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

Вызов метода Example3 в конструкторе MainPage. Откройте конструктор MainPage и замените строку, следующую за methodTrack = String.Empty;, строкой Example3();.

Вызов метода Example3 из метода Demo

Выполнение до точки останова. Запустите сеанс отладки, щелкнув Начать отладку в меню Отладка (клавиша F5). Отладчик приостанавливает выполнение в точке останова метода MainPage.

Шаг с заходом в метод Example3. Выберите Шаг с заходом в меню Отладка (клавиша F11), чтобы переместиться к точке входа метода Example3. Продолжайте выполнять шаги с заходом в метод, пока не будут пройдены один или два цикла блока for. Обратите внимание, что для прохождения всех 1000 итераций потребуется много времени.

Установка условной точки останова. В левой области окна с кодом щелкните строку x += i; правой кнопкой мыши и выберите Условие. Установите флажок Условие и введите i == 500; в текстовом поле. Выберите вариант Верно и нажмите кнопку ОК. Точка останова позволяет проверить значение в пятисотой итерации цикла for.

Диалоговое окно "Условие для точки останова"

Значок условной точки останова хорошо заметен благодаря белому кресту на нем.

Условная точка останова

Выполнение до точки останова. В меню "Отладка" выберите "Продолжить" (клавиша F5). В окне локальных переменных убедитесь, что текущее значение i равно 500. Обратите внимание, что переменная s представлена как одна строка и ее длина превышает ширину окна.

Визуализация строковой переменной. Щелкните значок лупы в столбце Значение s.

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

Выполнение до текущей позиции. Щелкните строку methodTrack += "->Example3"; правой кнопкой мыши и выберите Выполнить до текущей позиции (переместите курсор на строку и нажмите клавиши Ctrl + F10). Отладчик завершает итерации цикла, а затем приостанавливает выполнение на строке.

Остановка отладки. В меню "Отладка" выберите "Остановить отладку" (клавиши Shift+F5). Это позволит завершить сеанс отладки.

Правка и продолжение работы, восстановление после исключения

Иногда при переключении на код в отладчике Visual Studio имеется возможность изменить значение переменных и даже логику инструкций. Эта функция называется "Изменить и продолжить".

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

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

Hh441470.collapse_all(ru-ru,VS.110).gifПример 4

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

Вызов метода Example4 в конструкторе MainPage. Откройте конструктор MainPage() и замените строку, следующую за methodTrack = String.Empty;, строкой Example4();.

Вызов метода Example4 из метода Demo

Выполнение до исключения. Запустите сеанс отладки, щелкнув Начать отладку в меню Отладка (клавиша F5). Снова нажмите клавишу F5, чтобы возобновить выполнение. Отладчик приостанавливает выполнение на исключении метода Example4 и отображает диалоговое окно исключения.

Диалоговое окно "Исключение"

Изменение логики программы. Очевидно, что ошибка — в условии if: значение x должно меняться, если x равно 0, а не когда x не равно нулю. Выберите Прервать, чтобы исправить логику метода. При попытке редактировать строку отображается другое диалоговое окно.

Диалоговое окно "Изменить и продолжить"

Выберите Изменить и измените строку if (x != 0) на if (x == 0). Отладчик сохраняет изменения в логике программы в исходный файл.

Изменение значения переменной. Просмотрите значение x в подсказке по данным или окне локальных переменных. Оно все еще равно 0 (нулю). При попытке выполнить инструкцию, вызвавшую исходное исключение, оно будет создано снова. Можно изменить значение x. В окне локальных переменных дважды щелкните столбец Значение строки x. Измените значение с 0 на 1.

Изменение значения в окне "Локальные"

Нажмите клавишу F11, чтобы войти в инструкцию, которая ранее выдавала исключение. Обратите внимание, что строка выполняется без ошибок. Снова нажмите клавишу F11.

Остановка отладки. В меню Отладка выберите Остановить отладку (клавиши Shift+F5). Это позволит завершить сеанс отладки.

См. также

Основные понятия

Запуск сеанса отладки (Visual C++, Visual C# и Visual Basic)

Вызов событий приостановки, возобновления и фоновых событий в приложениях для Магазина Windows

Отладка приложений для Магазина Windows