Не работают breakpoint visual studio

Содержание
  1. Устранение неполадок с точками останова в отладчике Visual Studio
  2. Предупреждения точек останова
  3. «Нет загруженных символов для этого документа»
  4. «… текущий исходный код отличается от версии, построенной в. «
  5. Точка останова была установлена успешно (без предупреждения), но не сработала
  6. После удаления точки останова она по-прежнему применяется при запуске отладки
  7. Не работает точка останова при отладке
  8. Использование точек останова в отладчике Visual Studio
  9. Задание точек останова в исходном коде
  10. Действия точки останова и точки трассировки
  11. Условия точки останова
  12. Создание условного выражения
  13. Использование идентификаторов объектов в условных выражениях (только C# и F#)
  14. Установка условия количества обращений
  15. Задание условия фильтра
  16. Задание точек останова функции
  17. Задание точки останова функции по адресу памяти (только в машинном коде C++)
  18. Задание точек останова в данных (.NET Core 3.0 или более поздней версии)
  19. Задание точек останова в данных (только машинный код C++)
  20. Управление точками останова в окне «Точки останова»
  21. Метки точки останова
  22. Экспорт и импорт точек останова
  23. Установка точек останова из окон отладчика
  24. Задание точки останова в окне стека вызовов
  25. Задание точки останова в окне дизассемблирования

Устранение неполадок с точками останова в отладчике Visual Studio

Предупреждения точек останова

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

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

Читайте также:  Не работают электрозеркала пассат б4

«Нет загруженных символов для этого документа»

Перейдите в окно Модули (Отладка > Окна > Модули) и проверьте, загружен ли модуль.

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

  • Если символы не загружены, проверьте состояние символов для диагностики проблемы. В контекстном меню модуля в окне Модули щелкните Сведения о загрузке символов. , чтобы узнать, откуда отладчик пытался загрузить символы. Дополнительные сведения о загрузке символов см. в статье Указание файлов символов (.pdb) и исходных файлов.
  • Если символы загружены, PDB-файл не содержит сведений об исходных файлах. Возможно несколько причин.
    • Если исходные файлы были добавлены недавно, убедитесь в том, что загружается последняя версия модуля.
    • Можно создать очищенные PDB-файлы с помощью параметра компоновщика /PDBSTRIPPED. Очищенные PDB-файлы не содержат сведений об исходных файлах. Убедитесь в том, что вы работаете с полным, а не очищенным PDB-файлом.
    • PDB-файл частично поврежден. Удалите файл и выполните чистую сборку модуля, чтобы попытаться устранить проблему.

Если модуль не загружен, проверьте следующее, чтобы найти причину:

  • Убедитесь в том, что выполняется отладка правильного процесса.
  • Проверьте, выполняется ли отладка соответствующего кода. Узнать, для отладки какого типа кода настроен отладчик, можно в окне Процессы (Отладка >Окна >Процессы). Например, если вы пытаетесь выполнить отладку кода на C#, убедитесь в том, что ваш отладчик настроен для соответствующего типа и версии .NET (например, «Управляемый код (версия 4*)» «Управляемый код (версия 2* или версия 3*)» или «Управляемый код (CoreCLR)»).

«… текущий исходный код отличается от версии, построенной в. «

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

Читайте также:  Как проверить гирлянду если она не работает

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

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

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

Точка останова была установлена успешно (без предупреждения), но не сработала

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

Вот несколько моментов, которые следует проверить.

  1. Если код выполняется в нескольких процессах или на нескольких компьютерах, убедитесь в том, что отлаживается нужный процесс на нужном компьютере.
  2. Убедитесь в том, что код выполняется. Чтобы проверить, выполняется ли код, добавьте вызов System.Diagnostics.Debugger.Break (C# или VB) либо __debugbreak (C++) в строку кода, в которой вы пытаетесь установить точку останова, а затем перестройте проект.
  3. При отладке оптимизированного кода убедитесь в том, что функция, в которой установлена точка останова, не встраивается в другую функцию. Описанный ранее тест Debugger.Break можно использовать для проверки и этой проблемы.

После удаления точки останова она по-прежнему применяется при запуске отладки

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

Источник

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

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

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

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

Помощь в написании контрольных, курсовых и дипломных работ здесь.

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

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

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

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

Источник

Использование точек останова в отладчике Visual Studio

Точки останова — это один из важнейших инструментов разработчика для выполнения отладки. Точки останова устанавливаются везде, где нужно приостановить выполнение отладчика. Например, вы хотите просмотреть состояние переменных кода или стек вызовов в определенной точке останова. Если вы пытаетесь разрешить предупреждение или проблему при использовании точек останова, см. раздел Устранение неполадок точек останова в отладчике Visual Studio.

Если вам известна задача или проблема, которую вы пытаетесь решить, но вы не знаете, какой тип точки останова следует использовать, см. статью Часто задаваемые вопросы. Поиск нужной функции отладки в Visual Studio.

Задание точек останова в исходном коде

Можно установить точку останова в любой строке исполняемого кода. Например, в следующем коде C# можно задать точку останова в строке кода с присвоением значения переменной ( int testInt = 1 ), в цикле for или любом коде в цикле for . Точка останова не может быть задана в сигнатурах метода, объявлениях пространства имен или класса, а также в объявлениях переменной, не содержащих присваивания и методов задания или получения.

Чтобы задать точку останова в исходном коде, щелкните в крайнем левом поле рядом со строкой кода. Можно также выбрать строку и нажать клавишу F9, выбрать команду Отладка > Переключить точку останова или щелкнуть правой кнопкой мыши и выбрать команду Точка останова > Вставить точку останова. В месте установки точки останова в левом поле появится красная точка.

Для большинства языков, включая C#, точка останова и текущие строки выполнения выделяются автоматически. Для кода C++ можно включить выделение точек останова и текущих строк, выбрав Сервис (или Отладка) > Параметры > Отладка > Выделить всю исходную строку для точек останова и текущий оператор (только C++) .

При отладке выполнение приостанавливается в точке останова до выполнения кода в этой строке. Символ точки останова отображается с желтой стрелкой.

В точке останова в следующем примере значение testInt по-прежнему равно 1. Таким образом, значение не изменилось с момента инициализации переменной (значение 1), так как инструкция, выделенная желтым, еще не была выполнена.

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

Ниже приведены некоторые общие инструкции по работе с точками останова.

Точка останова представляет собой переключатель. Можно щелкнуть ее, нажать клавишу F9 или выбрать Отладка > Переключить точку останова, чтобы удалить или снова вставить ее.

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

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

Действия точки останова и точки трассировки

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

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

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

Задание условия для точки останова.

Щелкните правой кнопкой мыши символ точки останова и выберите пункт Условия (или нажмите клавиши ALT + F9, C). Или наведите курсор на символ точки останова, выберите значок Параметры, а затем выберите Условия в окне Параметры точки останова.

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

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

Выберите Закрыть или нажмите клавиши CTRL+ВВОД, чтобы закрыть окно Параметры точки останова. Или в окне Точки останова выберите ОК, чтобы закрыть диалоговое окно.

Точки останова с установленными условиями отображаются с символом + в исходном коде и окне Точки останова.

Создание условного выражения

Если вы выбрали Условное выражение, можно выбрать одно из двух условий: Имеет значение true или При изменении. Выберите значение Имеет значение true, чтобы прервать выполнение при истинности выражения, или значение При изменении, если требуется прервать выполнение при изменении значения выражения.

В следующем примере задается применение точки останова, только если значение testInt равно 4:

В следующем примере задается применение точки останова, только если значение testInt меняется:

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

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

Использование идентификаторов объектов в условных выражениях (только C# и F#)

Иногда возникает необходимость наблюдать за поведением определенного объекта. Например, может потребоваться выяснить, почему объект был вставлен в коллекцию несколько раз. В C# и F# можно создавать идентификаторы объектов для определенных экземпляров ссылочных типов и использовать их в условиях точек останова. Идентификатор объекта создается службами отладки среды CLR и связан с объектом.

Создание идентификатора объекта

Установите точку останова в коде после создания объекта.

Запустите отладку и, когда выполнение приостановится на точке останова, выберите Отладка > Windows > Локальные (или нажмите клавиши CTRL + ALT + V, L), чтобы открыть окно Локальные.

Найдите конкретный экземпляр объекта в окне Локальные, щелкните его правой кнопкой мыши и выберите Сделать идентификатор объекта.

В окне $ вы должны увидеть символ Локальные . Это и есть идентификатор объекта.

Добавьте новую точку останова в точке, которую нужно исследовать, например в точке добавления объекта в коллекцию. Щелкните правой кнопкой мыши точку останова и выберите пункт Условие.

Используйте идентификатор объекта в поле Условное выражение. Например, если переменная item является объектом, который должен быть добавлен в коллекцию, выберите Имеет значение true и введите item == $ , где — номер идентификатора объекта.

Выполнение прервется в точке добавления объекта в коллекцию.

Чтобы удалить идентификатор объекта, щелкните правой кнопкой мыши переменную в окне Локальные и выберите пункт Удалить идентификатор объекта.

Идентификаторы объектов создают слабые ссылки и не предотвращают сборку мусора для объекта. Они действительны только в рамках текущего сеанса отладки.

Установка условия количества обращений

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

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

Задание условия фильтра

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

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

  • MachineName = «имя»
  • ProcessId = значение
  • ProcessName = «имя»
  • ThreadId = значение
  • ThreadName = «имя»

Значения строк следует заключить в двойные кавычки. Для комбинации условий можно использовать знаки & (И), || (ИЛИ), ! (НЕ) и скобки.

Задание точек останова функции

Выполнение можно прерывать при вызове функции. Это полезно, например, если известно имя функции, но не ее расположение. Это также полезно, если у вас есть функции с одинаковым именем и вы хотите приостановить их все (например, перегруженные функции или функции в разных проектах).

Установка точки останова функции:

Выберите Отладка > Создать точку останова > Точка останова функции или нажмите клавиши CTRL + K, B.

Можно также выбрать Создать > Точка останова функции в окне Точки останова.

В диалоговом окне Новая точка останова функции заполните поле Имя функции.

Чтобы уточнить функцию, сделайте следующее.

Используйте полное имя функции.

Добавьте типы параметров перегруженной функции.

Пример: MethodA(int, string)

Используйте символ «!», чтобы указать модуль.

Используйте оператор контекста в машинном коде C++.

В раскрывающемся списке Язык выберите язык функции.

Нажмите кнопку ОК.

Задание точки останова функции по адресу памяти (только в машинном коде C++)

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

Установите точку останова после создания экземпляра класса.

Найдите адрес экземпляра (например, 0xcccccccc ).

Выберите Отладка > Создать точку останова > Точка останова функции или нажмите клавиши CTRL + K, B.

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

Задание точек останова в данных (.NET Core 3.0 или более поздней версии)

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

Задание точки останова в данных

В проекте .NET Core начните отладку и подождите, пока не будет достигнута точка останова.

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

Точки останова в данных в .NET Core не будут работать для следующих элементов:

  • Свойства, которые не могут быть расширены в подсказках, окнах «Локальные», «Видимые» или «Контрольные значения»
  • Статические переменные
  • Классы с атрибутом DebuggerTypeProxy
  • Поля внутри структур

Задание точек останова в данных (только машинный код C++)

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

Задание точки останова в данных

В проекте C++ начните отладку и подождите, пока не будет достигнута точка останова. В меню Отладка выберите команду Создать точку останова > Точка останова в данных.

Можно также выбрать Создать > Точка останова в данных в окне Точки останова или щелкнуть правой кнопкой мыши элемент Видимые, Контрольные значения или Локальные и выбрать Прервать выполнение при изменении значения в контекстном меню.

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

В раскрывающемся списке Счетчик байтов введите количество байтов, за которыми должен наблюдать отладчик. Например, если выбрать 4, отладчик будет наблюдать за четырьмя байтами начиная с &avar и выполнит прерывание, если какой-либо из этих байтов изменит значение.

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

  • Процесс, для которого не выполняется отладка, производит запись в область памяти.
  • Область памяти совместно используется двумя или более процессами.
  • Область памяти обновляется в ядре. Например, если память передается в функцию ReadFile 32-разрядной версии Windows, то память будет обновляться из режима ядра и отладчик не будет прерывать выполнение при обновлении.
  • Контрольное значение превышает 4 байта на 32-разрядном оборудовании и 8 байт на 64-разрядном оборудовании. Это ограничение архитектуры x86.

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

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

Управление точками останова в окне «Точки останова»

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

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

Чтобы открыть окно Точки останова, выберите Отладка > Windows > Точки останова или нажмите клавиши CTRL+ALT+B.

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

Метки точки останова

Используйте метки для сортировки и фильтрации списка точек останова в окне Точки останова.

  1. Чтобы добавить метку к точке останова, щелкните правой кнопкой мыши точку останова в исходном коде или в окне Точки останова, а затем выберите Изменить метки. Добавьте новую метку или выберите существующую, а затем выберите ОК.
  2. Отсортируйте список точек останова в окне Точки останова, выбрав Метки, Условия или другие заголовки столбцов. Можно выбрать отображаемые столбцы, нажав Показать столбцы на панели инструментов.

Экспорт и импорт точек останова

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

  • Чтобы экспортировать одну точку останова в XML-файл, щелкните правой кнопкой мыши точку останова в исходном коде или окне Точки останова и выберите Экспорт или Экспорт выбранных. Выберите расположение экспорта и щелкните Сохранить. Расположением по умолчанию является папка решения.
  • Чтобы экспортировать несколько точек останова, в окне Точки останова установите флажки рядом с точками останова или введите условия поиска в поле поиска. Нажмите на значок Экспортировать все точки останова, соответствующие текущим критериям поиска и сохраните файл.
  • Чтобы экспортировать все точки останова, снимите все флажки и оставьте поле поиска пустым. Нажмите на значок Экспортировать все точки останова, соответствующие текущим критериям поиска и сохраните файл.
  • Чтобы импортировать точки останова, в окне Точки останова выберите значок Импортировать точки останова из файла, перейдите к расположению XML-файла и нажмите Открыть.

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

Можно также задать точки останова из окон отладчика Стек вызовов и Дизассемблирование.

Задание точки останова в окне стека вызовов

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

Задание точки останова в окне стека вызовов

Чтобы открыть окно Стек вызовов, необходимо приостановить процесс отладки. Выберите Отладка > Windows > Стек вызовов или нажмите клавиши CTRL+ALT+C.

В окне Стек вызовов щелкните правой кнопкой мыши вызывающую функцию и выберите Точка останова > Вставить точку останова или нажмите F9.

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

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

Отладчик приостанавливает выполнение на этой инструкции.

Более подробную информацию о стеке вызовов см. в разделе Практическое руководство. Использование окна стека вызова.

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

Задание точки останова в окне дизассемблирования

Чтобы открыть окно Дизассемблирование, необходимо приостановить процесс отладки. Выберите Отладка > Windows > Дизассемблирование или нажмите клавиши CTRL+ALT+D.

В окне Дизассемблирование щелкните в левом поле инструкции, на которой нужно прервать выполнение. Можно также выбрать строку и нажать клавишу F9 или щелкнуть правой кнопкой мыши и выбрать Точка останова > Вставить точку останова.

Источник

Оцените статью