Как поставить точку останова visual studio 2019
Перейти к содержимому

Как поставить точку останова visual studio 2019

  • автор:

Точки останова в Visual Studio 2019

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

Отслеживать
задан 25 ноя 2019 в 7:18
DiMaAgalakov DiMaAgalakov
353 1 1 серебряный знак 14 14 бронзовых знаков
В меню вид поищи в окнах watch.
25 ноя 2019 в 7:38

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

Всё же я хотел увидеть вот такой вывод:

введите сюда описание изображения

Во время отладки можно ввести слово «Локальные» в поиск на верхней панели VS, либо сочетание клавиш: Ctrl+Alt+V, L

Отслеживать
ответ дан 25 ноя 2019 в 7:46
DiMaAgalakov DiMaAgalakov
353 1 1 серебряный знак 14 14 бронзовых знаков

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

Отслеживать
ответ дан 25 ноя 2019 в 7:24
Sergej Kalva Sergej Kalva
51 8 8 бронзовых знаков

  • отладка
  • visual-studio-2019
    Важное на Мете
Похожие

Подписаться на ленту

Лента вопроса

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.10.27.43697

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

Отладка кода

В C#, как и в других появившихся до .NET языках, главная методика по отладке состоит в добавлении точек останова и изучении того, что происходит в коде в конкретные моменты во время его выполнения.

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

Точку останова (breakpoint) в Visual Studio можно помещать на любую строку кода, которая в действительности выполняется. Самый простой способ — щелчок на необходимой строке в окне редактора кода внутри затененной области вдоль левого края окна документа (или выделение нужной строки и нажатие клавиши ). Это приводит к размещению в данной строке точки останова, которая вызывает прерывание процесса выполнения и передачу управления отладчику. Как и в предыдущих версиях Visual Studio, точка останова обозначается большим кружком слева от соответствующей строки в окне редактора кода. Кроме того, Visual Studio выделяет саму строку, отображая ее текст и фон разными цветами. Щелчок на кружке приводит к удалению точки останова.

Если останов на определенной строке каждый раз не подходит для решения имеющейся проблемы, можно создать так называемую условную точку останова. Для этого выберите в меню Debug (Отладка) пункт Windows — Breakpoints (Окнo — Точки останова). Откроется диалоговое окно, позволяющее указать желаемые детали для точки останова. В этом окне можно выполнять следующие действия:

  • Указать, что выполнение должно прерываться лишь после прохождения точки останова определенное количество раз.
  • Указать, что точка останова должна вступать в действие при каждом n-ном достижении строки, например, при каждом 20-м ее выполнении (это удобно при отладке больших циклов).
  • Задать точки останова относительно переменных, а не команд. В таком случае наблюдение будет вестись за значением указанной переменной, и точки останова будут активизироваться при каждом изменении значения этой переменной. Однако этот вариант может сильно замедлить выполнение кода, поскольку на проверку, не изменилось ли значение отслеживаемой переменной после выполнения каждой очередной инструкции, будет тратиться дополнительное время процессора.

Слежения

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

Для просмотра значений переменных можно также использовать окно Autos (Автоматические). Окно Autos представляет собой окно с вкладками, которое появляется лишь тогда, когда программа выполняется в режиме отладки. Если вы его не видите, попробуйте выбрать в меню Debug (Отладка) пункт Windows — Autos (Окна — Автоматические).

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

Три предлагаемых в этом окне вкладки предназначены для наблюдения за переменными трех разных категорий:

  • Вкладка Autos (Автоматические) позволяет просматривать значения нескольких последних переменных, к которым осуществлялся доступ в процессе выполнения программы.
  • Вкладка Locals (Локальные) позволяет просматривать значения переменных, к которым получается доступ в методе, выполняемом в текущий момент
  • Вкладка Watch (Слежение) позволяет просматривать значения любых интересующих переменных за счет явного указания их имен непосредственно в окне Watch.

Исключения

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

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

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

На самом деле в Visual Studio предлагается очень действенное решение. Если заглянуть в меню Debug (Отладка), то можно будет обнаружить там пункт Exceptions (Исключения). В случае выбора этого пункта открывается диалоговое окно Exceptions (Исключения). Это окно позволяет указывать, что должно происходить при выдаче исключения. Здесь можно указать, что выполнение должно продолжаться или же останавливаться с переходом в режим отладки, в случае чего произойдет останов, а отладчик окажется прямо на самом операторе throw:

Окно Exceptions

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

Дополнительные команды отладки исходного кода

Компиляция практически всего коммерческого программного обеспечения на стадии отладки и на стадии подготовки окончательной версии продукта должна проводиться немного по-разному. Среда Visual Studio способна понимать это, поскольку сохраняет информацию обо всех параметрах, которые ей надлежит передавать компилятору. Для поддержки разных вариантов компоновки проекта Visual Studio потребуется сохранять подобную информацию в более чем одном экземпляре. Разные экземпляры такой информации называются конфигурациями. При создании проекта Visual Studio автоматически предлагает на выбор две таких конфигурации, которые называются, соответственно, Debug (Отладка) и Release (Выпуск):

  • Конфигурация Debug обычно указывает, что никакие операции по оптимизации выполняться не должны, в исполняемом коде должна присутствовать дополнительная отладочная информация, а компилятор должен предполагать, что в коде определен препроцессорный символ отладки Debug, если только он не был явно отменен с помощью директивы #undefined.
  • Конфигурация Release указывает, что компилятор должен проводить в отношении компилируемого кода оптимизацию, в исполняемом коде не должно присутствовать никакой дополнительной информации, а компилятор не должен предполагать наличие препроцессорного символа Debug.

Можно также определять собственные конфигурации. Это необходимо, например, для компоновки приложения с несколькими отличающимися версиями. Раньше из-за проблем, связанных с поддержкой кодировки Unicode в Windows NT, но не в Windows 95, для многих проектов на С++ было принято создавать две конфигурации — одну для Unicode, а вторую для (multibyte character set — набор многобайтных символов).

Урок №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».

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

Не работает точка останова при отладке

Возникла проблема, когда я пытался настроить публикацию проекта в свойствах поковырялся, после чего при запуске проекта не срабатывает точка останова (выглядит пустой коричневый кружок с жёлтым восклицательным знаком). При на ведении выводит сообщение — «в настоящий момент попадание в точку, остановка не произойдёт. Нет загруженных символов для этого документа.» Загружаю другой проект — всё нормально остановка происходит. Подогнал свойства проекта как в том, где всё ок, но проблема не решается. Может у кого была такая проблема подскажите что не так? Какие могут быть символы не загружены?
студия 12.

Добавлено через 11 минут
Включил анализ кода при построении проекта, выдало сообщение что нет отладочной информации, включите pdb файл. Он действительно пропал, но не знаю где его теперь искать.

Добавлено через 5 часов 27 минут
Кто-нибудь знает как создать файл .pdb в папке Debug ?

94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Не работает (?) точка останова
Ставлю ее перед return, а окно все равно мигом закрывается. Как быть?

Как работает точка останова Отладчика?
Что такое точка останова Отладчика, и как она работает? Зачем нажимать F8, у меня только красная.

Каким образом можно при отладке в модульном проекте поставить точку останова в библиотеки JSTL — Intellij Idea
Каким образом можно при отладке в модульном проекте поставить точку останова в библиотеки JSTL .

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

Регистрация: 25.05.2011
Сообщений: 308
Попробуй перестроить проэкт
Регистрация: 14.04.2012
Сообщений: 249

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

Добавлено через 12 часов 22 минуты
В общем все танцы с бубном не помогли. Студия не хочет создавать файл отладки в процессе работы с проектом. Создаёт только при создании проекта. Пришлось создать новый проект и создать все формы и классы нужного проекта и потом перезаписать сами файлы этих форм и классов файлами прошлого проекта. После этого отладка заработала.

26 / 26 / 14
Регистрация: 09.06.2014
Сообщений: 162
Environment какая стоит?)) Если Production то может из-за этого)) 2 года прошло)

Эксперт .NET

17413 / 12809 / 3355
Регистрация: 17.09.2011
Сообщений: 21,086

ЦитатаСообщение от kostrorod Посмотреть сообщение

нет отладочной информации, включите pdb файл

Откройте свойства проекта и перейдите в закладку Build (вторая сверху), там в самом низу жамкните кнопку Advanced, в открывшемся диалоге в списке Debug Info выберите pdb-only или full.

Заодно в меню Debug ткните Options и в закладке General убедитесь, что стоит галка Enable Just My Code.

Регистрация: 13.12.2016
Сообщений: 13

Та же проблема с контрольной точкой! В инете пишут, что такое бывает, если есть проекты с одинаковыми именами. Но я всё поубирал, а проекту пофиг! Причём только Debug, Release работает исправно.

Добавлено через 8 часов 7 минут
Нашёл причину! Я для отладки переводил время вперёд, при этом получился проект более поздний по времени, чем я редактировал. Решение — почистить папку Debug и заново откомпелировать.

Регистрация: 26.10.2015
Сообщений: 44

у меня была такая же штука изменил конфигурацию решения с release на debug и точка остановы заработала

Регистрация: 23.04.2019
Сообщений: 1

Это может происходить при наличии одинаковых проектов. Я решил эту проблему переносом папки с проектом в другое место дискового пространства с последующей перестройкой проекта. Также помогает переименование самой папки (через проводник).

419 / 233 / 139
Регистрация: 21.02.2011
Сообщений: 4,629

ЦитатаСообщение от centsk Посмотреть сообщение

с release на debug и точка остановы заработала
Интересно, зачем отлаживать в Release, когда для этого есть Debug.
Регистрация: 20.04.2014
Сообщений: 7

Попробуйте проверить параметр «Активная конфигурация решения» в «Диспетчере конфигураций».
У меня активным был Release, и ничего не помогало. Все заработало, после того, как поменял на Debug

Регистрация: 12.04.2015
Сообщений: 74

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

Например, если у вас проект WinFormsProject, в котором есть ссылка на сборку FormsLibrary.dll, то надо исключить из ссылок проекта FormsLibrary.DLL и добавить ссылку на проект FormsLibrary из solution (.sln). После этого при запуске WinFormsProject и при вызове методов FormsLibrary, проект будет содержать отладочную информацию из проекта FormsLibrary, а не просто включенный DLL, который, возможно, собирался на другом компьютере или вообще имеет другую разрядность кода (x86/x64).

Добавлено через 5 минут
Ну либо проделать обратную операцию, собирать проекты отдельно (сделать unit-тестовый проект для каждой библиотеки), потом включать dll от каждого отлаженного проекта по отдельности в основной проект.

87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

Невразумительная точка останова при выводе double
Возникла небольшая проблемка в коде: void main() < int* mass;.

Не работает F10 при отладке
Здравствуйте. При отладке клавиша f10 вместо перехода на следующую строчку открывает настройки.

Цикл работает правильно только при точках останова
Есть метод public static string WordPicker(), который возвращает случайное слово из текстового.

Не работает печать с формы при отладке
Доброго времени. Создал ВПФ "Универсальный передаточный документ" для бух 3.0 . Если подцепить ее к.

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

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