встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик

Знакомство с отладчиком Visual Studio

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

Описанные здесь функции применяются к C#, C++, Visual Basic, JavaScript и другим языкам, поддерживаемым Visual Studio (если не указано иное).

Установка точки останова и запуск отладчика

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

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

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

встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик. картинка встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик. встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик фото. встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик видео. встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик смотреть картинку онлайн. смотреть картинку встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик.

Нажмите клавишу F5 (Отладка > Начать отладку) или Начать отладку кнопку встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик. картинка встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик. встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик фото. встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик видео. встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик смотреть картинку онлайн. смотреть картинку встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик.на панели инструментов отладки, при этом отладчик выполняется до первой встреченной точки останова. Если приложение еще не запущено, при нажатии клавиши F5 запускается отладчик и выполняется остановка в первой точке останова.

Переход по коду в отладчике с помощью пошаговых команд

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

Для запуска приложения с подключенным отладчиком нажмите клавишу F11 (Отладка > Шаг с заходом). F11 — это команда Шаг с заходом, которая выполняет приложение с переходом к следующему оператору. При запуске приложения с помощью клавиши F11 отладчик останавливается на первом выполняемом операторе.

встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик. картинка встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик. встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик фото. встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик видео. встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик смотреть картинку онлайн. смотреть картинку встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик.

Желтая стрелка представляет оператор, на котором приостановлен отладчик. В этой же точке приостанавливается выполнение приложения (этот оператор пока не выполнен).

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

В управляемом коде вы увидите диалоговое окно с запросом о том, хотите ли вы получать уведомления при автоматическом обходе свойств и операторов (поведение по умолчанию). Если вы хотите изменить этот параметр позже, отключите параметр Шаг с обходом свойств и операторов в меню Сервис > Параметры в разделе Отладка.

Шаг с обходом по коду для пропуска функций

Когда вы находитесь на строке кода, представляющей собой вызов функции или метода, можно нажать клавишу F10 (Отладка > Шаг с обходом) вместо F11.

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

Шаг с заходом в свойство

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

Щелкните правой кнопкой мыши свойство или поле и выберите Шаг с заходом в конкретное расположение, а затем выберите один из доступных параметров.

встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик. картинка встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик. встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик фото. встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик видео. встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик смотреть картинку онлайн. смотреть картинку встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик.

встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик. картинка встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик. встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик фото. встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик видео. встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик смотреть картинку онлайн. смотреть картинку встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик.

Быстрое выполнение до точки в коде с помощью мыши

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

Находясь в отладчике, наведите курсор на строку кода, пока слева не появится кнопка выполнения до щелкнутого (Выполнить до этого места) встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик. картинка встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик. встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик фото. встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик видео. встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик смотреть картинку онлайн. смотреть картинку встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик.отображается слева.

встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик. картинка встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик. встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик фото. встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик видео. встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик смотреть картинку онлайн. смотреть картинку встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик.

Кнопка выполнения до щелкнутого (Выполнить до этого места) доступна начиная с версии Visual Studio 2017.

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

Вывод отладчика из текущей функции

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

Нажмите клавиши SHIFT+F11 (или выберите Отладка > Шаг с выходом).

Эта команда возобновляет выполнение приложения (и перемещает отладчик) до возврата текущей функции.

Выполнить до текущей позиции

Если вы находитесь в режиме редактирования кода (то есть работа отладчика не приостановлена), щелкните правой кнопкой мыши строку кода в приложении и выберите команду Выполнить до текущей позиции (или нажмите клавиши CTRL+F10). Эта команда запускает отладку и задает временную точку останова на текущей строке кода. Дополнительные сведения об этой функции и аналогичных функциях навигации см. в разделе Выполнение до определенного места в коде.

встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик. картинка встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик. встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик фото. встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик видео. встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик смотреть картинку онлайн. смотреть картинку встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик.

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

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

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

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

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

Нажмите кнопку Перезапустить встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик. картинка встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик. встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик фото. встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик видео. встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик смотреть картинку онлайн. смотреть картинку встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик.на панели инструментов отладки (или нажмите клавиши CTRL+SHIFT+F5).

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

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

Изменение кода и продолжение отладки (C#, VB, C++, XAML)

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

встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик. картинка встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик. встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик фото. встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик видео. встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик смотреть картинку онлайн. смотреть картинку встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик.

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

Проверка переменных с помощью подсказок по данным

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

Приостановив работу в отладчике, наведите указатель мыши на объект, чтобы просмотреть его значение свойства по умолчанию (в этом примере имя файла market 031.jpg является значением свойства по умолчанию).

встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик. картинка встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик. встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик фото. встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик видео. встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик смотреть картинку онлайн. смотреть картинку встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик.

Разверните объект для просмотра его свойств (таких как свойство FullPath в этом примере).

Часто при отладке бывает необходимо быстро проверить значения свойств для объектов. Лучше всего для этого подходят подсказки по данным.

В большинстве поддерживаемых языков можно изменять код во время сеанса отладки. Дополнительные сведения см. в разделе Изменить и продолжить.

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

В окне Видимые отображаются переменные вместе с текущим значением и типом. Окно Видимые содержит все переменные, используемые в текущей строке или предыдущей строке (в C++ в окне отображаются переменные в трех предыдущих строках кода; сведения о зависящем от языка поведении см. в соответствующей документации). Дополнительные сведения об использовании этих окон см. в статье Проверка переменных в окнах «Видимые» и «Локальные».

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

встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик. картинка встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик. встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик фото. встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик видео. встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик смотреть картинку онлайн. смотреть картинку встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик.

В JavaScript окно Локальные поддерживается, а окно Видимые — нет.

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

встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик. картинка встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик. встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик фото. встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик видео. встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик смотреть картинку онлайн. смотреть картинку встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик.

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

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

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

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

встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик. картинка встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик. встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик фото. встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик видео. встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик смотреть картинку онлайн. смотреть картинку встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик.

Просмотр стека вызовов

В окне Стек вызовов показан порядок вызова методов и функций. В верхней строке приведена текущая функция (в данном примере метод Update ). Во второй строке показано, что функция Update была вызвана из свойства Path.set и т. д. Стек вызовов хорошо подходит для изучения и анализа потока выполнения приложения. Дополнительные сведения см. в статье о просмотре стека вызовов.

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

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

встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик. картинка встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик. встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик фото. встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик видео. встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик смотреть картинку онлайн. смотреть картинку встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик.

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

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

Проверка исключения

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

встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик. картинка встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик. встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик фото. встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик видео. встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик смотреть картинку онлайн. смотреть картинку встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик.

В этом примере помощник по исправлению ошибок показывает исключение System.Argument и сообщение об ошибке, где сказано, что путь имеет недопустимую форму. Таким образом, мы знаем, что ошибка произошла в аргументе метода или функции.

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

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

Настройка отладки

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

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

встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик. картинка встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик. встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик фото. встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик видео. встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик смотреть картинку онлайн. смотреть картинку встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик.

Отладка интерактивных приложений ASP.NET в Службе приложений Azure

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

встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик. картинка встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик. встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик фото. встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик видео. встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик смотреть картинку онлайн. смотреть картинку встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик.

Просмотр моментальных снимков с помощью возврата на шаг назад в IntelliTrace (Visual Studio Enterprise)

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

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

Отладка проблем производительности

Если приложение работает слишком медленно или использует слишком много памяти, возможно, вам следует протестировать его с помощью средств профилирования на раннем этапе. Дополнительные сведения о средствах профилирования, таких как средство загрузки ЦП и анализатор памяти, см. в разделе Знакомство со средствами профилирования.

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

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

Use breakpoints in the Visual Studio debugger (Использование точек останова в отладчике Visual Studio)

Источник

Возможности встроенного отладчика Visual C++


Автор: Александр Шаргин
Источник: RSDN Magazine #0

Опубликовано: 27.01.2002
Исправлено: 13.03.2005
Версия текста: 3.0

встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик. картинка встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик. встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик фото. встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик видео. встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик смотреть картинку онлайн. смотреть картинку встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик.

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

Как работает отладчик


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

Точки останова (breakpoints) играют важную роль в отладке приложений. На самом деле, точка останова – это некоторое условие (например, достижение определённой команды в программе), при выполнении которого возбуждается исключение EXCEPTION_BREAKPOINT (0x80000003). Как мы уже знаем, исключение приводит к тому, что отлаживаемый процесс приостанавливается, а отладчик получает управление. В частности, он может считать текущие значения регистров процессора и ячеек памяти и выдать их на экран для анализа. После этого он может возобновить выполнение отлаживаемого процесса по команде программиста.

С помощью точек останова в отладчике Visual C++ реализовано множество полезных возможностей, например, пошаговая отладка (режим, в котором пользователь может выполнять по одной инструкции отлаживаемой программы за раз).

Отладочные символы

Конечно, возможность читать данные из памяти отлаживаемого процесса полезна. Но для программиста на C++ гораздо удобнее просматривать значения переменных, а не безликих ячеек памяти. Пошаговую отладку также гораздо удобнее выполнять по исходному тексту программы, а не по ассемблерному листингу. Чтобы это стало возможным, применяются отладочные символы (debugging symbols). Эти символы генерируются в процессе построения программы. Существуют различные форматы записи символов. По умолчанию Visual C++ записывает их в отдельный файл с расширением PDB, включая в приложение или DLL абсолютный путь к этому файлу.

PDB-файл содержит информацию, которая позволяет определить адрес любой переменной, функции или строки кода. Возможно и обратное преобразование. Кроме того, в PDB-файл включается информация о типах. Благодаря этому отладчик может не только считать из памяти значение переменной, но и выдать это значение на экран в определённом виде (в зависимости от типа переменной). Пошаговая отладка по исходному тексту также становится возможна (при условии, что у вас есть этот исходный текст, так как он не включается в PDB-файл).

Обратите внимание, что отладочные символы хранятся отдельно для каждого модуля (EXE или DLL). Вполне возможна ситуация, когда отладочные символы доступны для DLL, которую загружает приложение, но не для самого приложения. В этом случае код DLL можно будет отлаживать на уровне исходных текстов, а код приложения – на уровне ассемблера.

Настройка отладки

встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик. картинка встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик. встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик фото. встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик видео. встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик смотреть картинку онлайн. смотреть картинку встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик.
Рисунок 1. Настройка отладки, категория General

Здесь вы можете задать следующие параметры.

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

встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик. картинка встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик. встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик фото. встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик видео. встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик смотреть картинку онлайн. смотреть картинку встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик.
Рисунок 2. Настройка отладки, категория Additional DLLs

Запуск и прекращение отладки


Подключение к уже запущенному процессу

Команда Attach to Process из меню Debug открывает одноименный диалог, позволяющий подключить отладчик к любому уже запущенному процессу (рис. 3). Например, если написанная вами программа вдруг «зависла», можно тут же подключиться к ней и выяснить причину ошибки. Вы можете даже подключиться к оболочке Windows ( explorer.exe ), чтобы изучить её работу с помощью отладчика. Правда, в этом случае вам придётся работать с ассемблером, так как Микрософт не поставляет исходные тексты своей оболочки.

встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик. картинка встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик. встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик фото. встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик видео. встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик смотреть картинку онлайн. смотреть картинку встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик.
Рисунок 3. Окно Attach To Process

Just-in-time debugging

В Visual C++ начиная с версии 4.2 появилась возможность отладки «на лету» (Just-in-time debugging). Благодаря этой возможности отладчик можно подключить к программе именно в тот момент, когда она «упала» (например, из-за ошибки доступа). Вот как выглядит окно Application Error в Windows 2000 (рис. 4).

встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик. картинка встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик. встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик фото. встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик видео. встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик смотреть картинку онлайн. смотреть картинку встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик.
Рисунок 4. Окно Application Error

Завершение отладки

Сеанс отладки автоматически заканчивается, когда завершается отлаживаемая программа. Кроме этого, отладку можно прекратить в любой момент, вызвав команду Stop Debugging из меню Debug или нажав Shift+F5.

ПРИМЕЧАНИЕ

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

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

Как я уже говорил, точки останова играют важную роль в процессе отладки приложения. Visual C++ поддерживает множество разновидностей точек останова. Условием для прерывания программы может быть достижение некоторой команды, изменение глобальной переменной, приход заданного сообщения Windows и т. п. Приостановленную программу можно выполнять в пошаговом режиме, анализировать текущие значения переменных и даже вносить в программу изменения прямо «на лету», не прерывая сеанса отладки.

ПРИМЕЧАНИЕ

Самый простой способ приостановить программу – вызвать команду Break из меню Debug (ей соответствует команда Break Execution на панели инструментов). Иногда это бывает удобно. Если, к примеру, ваша программа вошла в бесконечный цикл, можно прервать её и посмотреть, почему это произошло. Однако в большинстве случаев такой способ недостаточно точен, и вместо него используются точки останова.

Позиционные точки останова

В простейшем случае точка останова жёстко привязывается к строке в программе (такие точки называются позиционными). Позиционную точку останова можно установить прямо в редакторе кода. Для этого нужно поместить курсор на нужной строчке и вызвать команду Debug->Insert/Remove Breakpoint (или нажать F9). Для удаления точки останова используется та же команда.

Установка точки останова на конкретную функцию (метод)


Установка точки останова на ассемблерную инструкцию

Такие точки останова устанавливаются в окне Disassembly (о нём мы поговорим немного ниже). Переместитесь к нужному адресу и нажмите F9.

СОВЕТ

Окно Edit->Breakpoints

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

Закладка Location

встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик. картинка встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик. встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик фото. встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик видео. встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик смотреть картинку онлайн. смотреть картинку встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик.
Рисунок 5. Закладка Location

На закладке Location (рис. 5) настраиваются позиционные точки останова. Все рассмотренные выше разновидности точек можно установить и с этой закладки. Местонахождение точки останова указывается в поле Break at в формате:

Бывают случаи, когда точку останова нужно пропустить несколько раз, прежде чем прерывать на ней программу. Специально для этого в окне Condition предусмотрено ещё одно поле, Skip count (в самом низу). С помощью этого поля можно, к примеру, пропустить 10 итераций цикла и прервать программу только на одиннадцатой.

Закладка Data

встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик. картинка встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик. встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик фото. встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик видео. встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик смотреть картинку онлайн. смотреть картинку встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик.
Рисунок 6. Закладка Data

На закладке Data (рис. 6) устанавливаются точки останова по данным. Их отличие состоит в том, что они могут сработать в любом месте программы, как только изменится (или станет истинным) введённое вами выражение.

Если выражение имеет смысл только в определённом контексте (например, в нём используются локальные переменные какой-либо функции), этот контекст необходимо указать в том же формате, что и для позиционной точки останова. Но здесь уже нужно указать имя функции, а не файла.

Visual C++ позволяет вам контролировать изменение не только отдельных переменных, но и массивов. Рассмотрим следующий фрагмент программы.

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

Точки останова по данным являются мощнейшим отладочным средством. К сожалению, они не всегда работают надёжно. Так, Visual C++ не может отследить изменение переменной-члена класса, если объект этого класса адресуется указателем. Рассмотрим небольшой пример.

Закладка Messages

встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик. картинка встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик. встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик фото. встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик видео. встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик смотреть картинку онлайн. смотреть картинку встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик.
Рисунок 7. Закладка Messages

На закладке Messages (рис. 7) устанавливаются точки останова на сообщения. В верхнем поле указывается имя функции окна, а в нижнем – сообщение, которое должно прийти в эту функцию для срабатывания точки останова. Обратите внимание, что функция окна должна иметь стандартный прототип:

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

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

Когда программа прервана, её можно выполнять в пошаговом режиме. Для этого в Visual C++ предусмотрено несколько команд из меню Debug (таблица 1).

Иногда в процессе отладки возникает необходимость перенести точку выполнения. Например, вы заметили ошибку и хотите «перескочить» через неё или, наоборот, хотите вернуться немного назад и выполнить фрагмент программы ещё раз. Чтобы это сделать, установите курсор в нужном месте и выберите команду Set Next Statement из контекстного меню (или нажмите Ctrl+Shift+F10).

Окна отладчика


Окно Variables

В окне Variables (Alt+4) автоматически отображаются значения локальных переменных (закладка Locals ) и переменных-членов класса, адресуемого указателем this (закладка This ). В нём же отображаются значения всех переменных, которые используются в предыдущей и текущей инструкциях программы (закладка Auto ). На закладке Auto также показываются возвращаемые значения функций.

ПРИМЕЧАНИЕ

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

Окно Watch

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

Регистры и псевдорегистры


Символы форматирования

Можно указать отладчику, в каком формате выводить значение переменной/выражения, используя символы форматирования. Эти символы добавляются к переменной или выражению через запятую. Большинство из них совпадает с символами форматирования функции printf : d – целое число со знаком, u – беззнаковое целое, f – число с плавающей точкой, c – символ, s – строка и т. д. Полный список символов форматирования приведён в таблице 3.

СимволОписание
d, iцелое со знаком
Uбеззнаковое целое
Oбеззнаковое восьмеричное целое
x, Xбеззнаковое шестнадцатеричное целое
l, h«длинное» или «короткое» целое (префиксы, используемые совместно с символами d, i, u, o, x, X)
Fвещественное число со знаком
Eвещественное число со знаком в научной нотации
Gвещественное число со знаком (нотация выбирается автоматически)
Ccимвол
Sстрока в кодировке ANSI
Suстрока в кодировке Unicode
Stстрока в кодировке ANSI или Unicode
HrHRESULT или код ошибки Win32
Wcфлаг класса окна
Wmкод сообщения
количество элементов массива
Таблица 3. Символы форматирования

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

Символы wm превращают код сообщения в его название, например:

Символы wc позволяют «расшифровать» стиль окна, например:

Символы hr переводят коды ошибок Win32 и значения HRESULT, возвращаемые функциями COM, в удобочитаемый вид, например:

Символы hr могут оказаться полезными во многих случаях. Например, можно применить их к псевдорегистру ERR, чтобы всегда иметь перед глазами описание последней ошибки при вызове функций Windows API. Можно также добавить в окно Watch строчку «EAX,hr». Поскольку COM-функции возвращают свой HRESULT через регистр EAX, вы сможете постоянно видеть описания ошибок COM, возникающих в отлаживаемой программе.

встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик. картинка встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик. встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик фото. встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик видео. встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик смотреть картинку онлайн. смотреть картинку встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик.
Рисунок 8. Использование символов форматирования wm, wc и hr

Наконец, число, задаваемое через запятую после указателя (рис. 9), позволяет просмотреть заданное количество элементов массива, адресуемого этим указателем (по умолчанию показывается всего один элемент). Допустим, мы выделили динамический массив из 10 целых чисел:

Чтобы просмотреть его содержимое в окне Watch, нужно ввести:

встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик. картинка встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик. встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик фото. встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик видео. встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик смотреть картинку онлайн. смотреть картинку встроенный отладчик в visual studio может работать как отладчик уровня исходного кода так и отладчик.
Рисунок 9. Просмотр массива в окне Watch

Окно Registers

Окно Registers (Alt+5) позволяет просматривать и изменять значения регистров процессора. В нём также отображаются все флаги процессора и содержимое стека. Любое значение в окне можно изменить. Для этого нужно переместить курсор ввода в нужное место и просто ввести новое значение поверх старого.

Команда Floating Point Registers из контекстного меню позволяет включить или выключить отображение регистров с плавающей точкой.

Окно Memory

Окно Memory (Alt+6) позволяет просматривать и изменять содержимое ячеек памяти. Содержимое памяти может отображаться в самых различных форматах. Из контекстного меню можно выбрать Byte Format (отдельные байты), Short Hex Format (слова в шестнадцатеричном виде) и Long Hex Format (двойные слова в шестнадцатеричном виде). Полный список форматов для окна Memory доступен в окне Tools->Options на закладке Debug (выпадающий список Format ).

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

Окно Call Stack

Окно Call Stack (Alt+7) показывает последовательность вызванных функций (стек вызовов). Используя контекстное меню, можно отобразить также типы (команда Parameter Types ) и значения (команда Parameter Values ) параметров этих функций. К тексту любой функции можно переместиться, сделав двойной щелчок на её имени. Кроме того, точки останова можно ставить прямо в этом окне.

Окно Disassembly

В окне Disassembly (Alt+8) отображается текст отлаживаемой программы на языке ассемблера. Иногда без помощи этого окна ошибку в программе найти не удаётся. Точки останова можно ставить прямо в этом окне. При этом обеспечивается позиционирование с точностью до команды процессора (в окне редактора кода такой точности достичь не удаётся).

ПРИМЕЧАНИЕ

При использовании Windows 9x попытка зайти в функцию WIn32 API приведет к появлению сообщения «Can not trace into system DLLs». В этой операционной системе заходить в функции API можно, только используя отладчик уровня ядра (например, WinDBG или SoftIce).

СОВЕТ

Диалоги отладчика


Quick Watch


Exceptions

Этот диалог позволяет настроить реакцию отладчика на возникновение системных и пользовательских исключений. Для каждого исключения можно выбрать действие Stop always (останавливаться всегда) или Stop if not handled (останавливаться, если исключение не обработано).

Threads

Этот диалог показывает список потоков, созданных вашей программой. Позволяет приостановить (suspend) или продолжить (resume) любой поток, а также установить на него фокус (то есть сделать его текущим). Этот диалог – практически единственное средство для отладки многопоточных приложений, которое предоставляет Visual C++.

Modules

Этот диалог показывает список загруженных модулей. Для каждого модуля выводится диапазон адресов и имя файла.

Edit and Continue

Функция Edit and Continue впервые появилась в Visual C++ 6.0. С её помощью вы можете вносить изменения в код программы и перестраивать её, не прерывая сеанса отладки.

Файл autoexp.dat

ПРЕДУПРЕЖДЕНИЕ

По формату autoexp.dat – это обычный ini-файл с несколькими секциями. Рассмотрим их более подробно.

Секция [AutoExpand]

Имя_типа – это имя класса или структуры. Оно может быть шаблоном. Параметры шаблона можно указать явно или использовать символ «*» для обозначения всех возможных параметров. Текст может быть произвольным. Чтобы вставить в него значение поля структуры, имя этого поля записывается в угловых скобках (возможно, с символом форматирования). Список возможных символов совпадает со списком символов для окна Watch (таблица 3) за одним исключением: задание числа элементов массива действовать не будет.

Кроме задания переменных-членов класса, можно вызывать и его методы. Благодаря этому можно написать для своих классов специальный метод форматирования, доступный только в отладочной версии приложения, и использовать его для представления данных в классе. Практика показывает, что этот метод нельзя реализовывать внутри класса. Это сбивает с толку вычислитель выражений Visual C++ (expression evaluator), и вместо вашей строки выводятся вопросительные знаки. Вот пример форматирующего метода.

Соответственно, в файле autoexp.dat следует написать:

Другой пример применения этой возможности – отображение строк STL.

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

Параметры функции имеют следующий смысл.

Чтобы получить данные объекта, для которого вызывается add-in, нужно воспользоваться функциями из структуры DEBUGHELPER :

Чтобы избавиться от искажения имён, используется DEF-файл:

Наконец, полученную DLL необходимо скопировать в каталог с файлом autoexp.dat и добавить в него строчку:

Секция [ExecutionControl]

В общем виде использование NoStepInto выглядит так:

В качестве имени функции можно использовать символ «*» для обозначения всех функций в данном пространстве имён или классе. Зачем всё это нужно, спросите вы. Рассмотрим следующий пример.

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

Источник

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

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