Задание точек останова в рабочих процессах
Область применения:Visual Studio Visual Studio для Mac
Visual Studio Code ![]()
При использовании конструктора рабочих процессов можно задать точки останова в графических рабочих процессах, как и в коде Visual Basic или C#. Как ожидалось, выполнение рабочего процесса останавливается в каждой заданной точке останова.
Точка останова имеет три состояния: ожидание, привязка и ошибка. При установке точки останова она имеет состояние «Ожидание», которое представлено сплошным красным значком. Когда среда выполнения загружает тип рабочего процесса, выполняется переход в состояние «Привязка». Если для точки останова задан неверный формат, например неправильное имя действия, то будет выдана ошибка. Точка останова останется в окне точек останова, но будет отмечена маленьким «х».
Задание точек останова в вызванных рабочих процессах не поддерживается.
Перед отладкой выберите параметр Включить только мой код (только управляемый) в меню «Параметры>отладки инструментов>«. Если параметр не выбран, и у вас есть две последовательности, вложенные в другую последовательность, и вы устанавливаете точку останова в первой внутренней последовательности, нажатие клавиши F11 не выполняет отладку во второй внутренней последовательности.
Точки останова в рабочем процессе не попадают, если полный путь к свойству файла XAML не является точным. Полный путь к XAML-файлу не является точным после перемещения проекта или решения в другую папку или на другой компьютер. Нажмите клавиши CTRL +S, чтобы сохранить и обновить свойство полного пути.
Задание точки останова в действии в конструкторе
- Выберите действие для прерывания отладчика.
- В меню отладки выберите пункт «Переключить точку останова». В верхней левой части действия появится красный значок. Кроме того, можно нажать клавишу F9 после выбора действия или щелкнуть действие правой кнопкой мыши и выбрать>точку останова вставить в меню правой кнопкой мыши.
См. также
- Отладка рабочих процессов с помощью конструктора рабочих процессов
- Как отлаживать XAML в конструкторе рабочих процессов
Отладка кода

В 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:

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 — набор многобайтных символов).
Использование точек останова в отладчике Visual Studio
Область применения:
Visual Studio Visual Studio для Mac
Visual Studio Code ![]()
Точки останова — это один из важнейших инструментов разработчика для выполнения отладки. Точки останова устанавливаются везде, где нужно приостановить выполнение отладчика. Например, вы хотите просмотреть состояние переменных кода или стек вызовов в определенной точке останова. Если вы пытаетесь разрешить предупреждение или проблему при использовании точек останова, см. раздел Устранение неполадок точек останова в отладчике Visual Studio.
Если вам известна задача или проблема, которую вы пытаетесь решить, но вы не знаете, какой тип точки останова следует использовать, см. статью Часто задаваемые вопросы. Поиск нужной функции отладки в Visual Studio.
Установка точек останова в исходном коде
Можно установить точку останова в любой строке исполняемого кода. Например, в следующем коде C# можно задать точку останова в строке кода с присвоением значения переменной ( int testInt = 1 ), в цикле for или любом коде в цикле for . Точка останова не может быть задана в сигнатурах метода, объявлениях пространства имен или класса, а также в объявлениях переменной, не содержащих присваивания и методов задания или получения.
Чтобы задать точку останова в исходном коде, сделайте следующее:
- Щелкните в крайнем левом поле рядом с строкой кода. Можно также выбрать строку и нажать клавишу F9, выбрать команду Отладка>Переключить точку останова или щелкнуть правой кнопкой мыши и выбрать команду Точка останова>Вставить точку останова. В месте установки точки останова в левом поле появится красная точка.
Для большинства языков, включая C#, точка останова и текущие строки выполнения выделяются автоматически. Для кода C++ можно включить выделение точек останова и текущих строк, выбрав Инструменты (или Отладка) >Параметры>Отладка>Выделить всю исходную строку для точек останова и текущий оператор (только C++).


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

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

Когда отладчик останавливается в точке останова, можно просмотреть текущее состояние приложения, включая значения переменных и стека вызова.
Ниже приведены некоторые общие инструкции по работе с точками останова.
- Точка останова представляет собой переключатель. Можно щелкнуть ее, нажать клавишу F9 или выбрать Отладка>Переключить точку останова, чтобы удалить или снова вставить ее.
- Чтобы отключить точку останова, не удаляя ее, наведите указатель мыши на нее или щелкните ее правой кнопкой мыши и выберите Отключить точку останова. Отключенные точки останова отображаются как пустые точки в левом поле или окне Точки останова. Чтобы повторно включить точку останова, наведите указатель мыши на нее или щелкните ее правой кнопкой мыши и выберите Включить точку останова.
- Задайте условия и действия, добавьте и измените метки или экспортируйте точку останова, щелкнув ее правой кнопкой мыши и выбрав нужную команду или наведя на нее курсор и нажав на значок Параметры.
Действия и точки трассировки точки останова
Точка трассировки — это точка останова, которая выводит сообщение в окно вывода. Точка трассировки может играть роль временного оператора трассировки в языке программирования и не приостанавливает выполнение кода. Вы создаете точку трассировки, задавая особое действие в окне Параметры точки останова. Подробные инструкции см. в разделе Использование точек трассировки в отладчике Visual Studio.
Условия точки останова
Можно управлять тем, где и когда выполняется точка останова, задавая условия. Условие может быть любым допустимым выражением, которое распознает отладчик. Дополнительные сведения о допустимых выражениях см. в разделе Выражения в отладчике.
Задание условия для точки останова.
-
Щелкните правой кнопкой мыши символ точки останова и выберите пункт Условия (или нажмите клавиши ALT + F9, C). Или наведите курсор на символ точки останова, выберите значок Параметры, а затем выберите Условия в окне Параметры точки останова.
Вы также можете щелкнуть правой кнопкой мыши в дальнем левом поле рядом со строкой кода и выбрать Вставить условную точку останова в контекстном меню, чтобы создать условную точку останова.
Можно также задать условия в окне Точки останова, щелкнув правой кнопкой мыши точку останова и выбрав пункт Параметры, а затем Условия.


Точки останова с установленными условиями отображаются с символом + в исходном коде и окне Точки останова.
Создание условного выражения
При выборе условного выражения можно выбрать между двумя условиями: значение true или при изменении. Выберите значение Имеет значение true, чтобы прервать выполнение при истинности выражения, или значение При изменении, если требуется прервать выполнение при изменении значения выражения.
В следующем примере задается применение точки останова, только если значение testInt равно 4:


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


Если условие точки останова имеет недопустимый синтаксис, появится предупреждающее сообщение. Если указать условие для точки останова с недопустимой семантикой, но допустимым синтаксисом, предупреждающее сообщение появится при достижении точки останова в первый раз. В любом случае отладчик прерывает выполнение при попадании на недопустимую точку останова. Точка останова пропускается, только если условие допустимо и принимает значение false .
Для поля При изменении отладчик не обрабатывает первое вычисление условия как изменение, поэтому при первом вычислении выражения точка останова не сработает.
Использование идентификаторов объектов в условных выражениях (только C# и F#)
Иногда возникает необходимость наблюдать за поведением определенного объекта. Например, может потребоваться выяснить, почему объект был вставлен в коллекцию несколько раз. В C# и F# можно создавать идентификаторы объектов для определенных экземпляров ссылочных типов и использовать их в условиях точек останова. Идентификатор объекта создается службами отладки среды CLR и связан с объектом.
Создание идентификатора объекта
- Установите точку останова в коде после создания объекта.
- Запустите отладку и, когда выполнение приостановится на точке останова, выберите Отладка>Windows>Локальные (или нажмите клавиши CTRL + ALT + V, L), чтобы открыть окно Локальные. Найдите конкретный экземпляр объекта в окне Локальные, щелкните его правой кнопкой мыши и выберите Сделать идентификатор объекта. В окне $ вы должны увидеть символ Локальные . Это и есть идентификатор объекта.
- Добавьте новую точку останова в точке, которую нужно исследовать, например в точке добавления объекта в коллекцию. Щелкните правой кнопкой мыши точку останова и выберите пункт Условие.
- Используйте идентификатор объекта в поле Условное выражение. Например, если переменная item является объектом, который должен быть добавлен в коллекцию, выберите Is true и введите item == $ , где — идентификатор объекта. Выполнение прервется в точке добавления объекта в коллекцию. Чтобы удалить идентификатор объекта, щелкните правой кнопкой мыши переменную в окне Локальные и выберите пункт Удалить идентификатор объекта.
Идентификаторы объектов создают слабые ссылки и не предотвращают сборку мусора для объекта. Они действительны только в рамках текущего сеанса отладки.
Установка условия количества обращений
Если есть подозрение, что цикл в коде начинает неправильно вести себя после определенного числа итераций, можно установить точку останова для остановки выполнения после указанного количества обращений, вместо того чтобы многократно нажимать клавишу F5 для достижения этой итерации.
В разделе Условия в окне Параметры точки останова выберите Количество обращений, а затем укажите число итераций. В следующем примере задается выполнение точки останова при каждой второй итерации:


Задание условия фильтра
Вы можете ограничить точку останова, сделав ее срабатывание возможным лишь на определенных устройствах или в определенных процессах или потоках.
В разделе Условия в окне Параметры точки останова выберите Фильтр, а затем введите одно или несколько из следующих выражений.
- MachineName = «имя»
- ProcessId = значение
- ProcessName = «имя»
- ThreadId = значение
- ThreadName = «имя»
Значения строк следует заключить в двойные кавычки. Для комбинации условий можно использовать знаки & (И), || (ИЛИ), ! (НЕ) и скобки.
Установка точек останова функции
Выполнение можно прерывать при вызове функции. Это полезно, например, если известно имя функции, но не ее расположение. Это также полезно, если у вас есть функции с одинаковым именем и вы хотите приостановить их все (например, перегруженные функции или функции в разных проектах).
Установка точки останова функции:
- Выберите Отладка>Создать точку останова>Точка останова функции или нажмите клавиши CTRL + K, B. Можно также выбрать Создать>Точка останова функции в окне Точки останова.
- В диалоговом окне Новая точка останова функции заполните поле Имя функции. Чтобы уточнить функцию, сделайте следующее.
- Используйте полное имя функции. Пример: Namespace1.ClassX.MethodA()
- Добавьте типы параметров перегруженной функции. Пример: MethodA(int, string)
- Используйте символ «!», чтобы указать модуль. Пример: App1.dll!MethodA
- Используйте оператор контекста в машинном коде C++. [+] Пример: +2
- В раскрывающемся списке Язык выберите язык функции.
- Нажмите ОК.
Задание точки останова функции по адресу памяти (только в машинном коде C++)
Вы можете использовать адрес объекта, чтобы установить точку останова функции в методе, вызываемом для конкретного экземпляра класса. Например, если имеется адресуемый объект типа my_class , вы можете задать точку останова функции в методе my_method , вызываемом экземпляром.
- Установите точку останова после создания экземпляра класса.
- Найдите адрес экземпляра (например, 0xcccccccc ).
- Выберите Отладка>Создать точку останова>Точка останова функции или нажмите клавиши CTRL + K, B.
- В поле Имя функции добавьте следующий текст и выберите язык C++.
((my_class *) 0xcccccccc)->my_method
Задание точек останова в данных (.NET Core 3.x или .NET 5 или более поздних версий)
Точки останова в данных прерывают выполнение при изменении свойства конкретного объекта.
Задание точки останова в данных

- В проекте .NET Core начните отладку и подождите, пока не будет достигнута точка останова.
- В окне Видимые, Контрольные значения или Локальные щелкните правой кнопкой мыши свойство и выберите Прервать выполнение при изменении значения в контекстном меню.
Точки останова в данных в .NET Core не будут работать для следующих элементов:
- Свойства, которые не могут быть расширены в подсказках, окнах «Локальные», «Видимые» или «Контрольные значения»
- Статические переменные
- Классы с атрибутом DebuggerTypeProxy
- Поля внутри структур
Задание точек останова в данных (только машинный код C++)
Точки останова в данных приостанавливают выполнение, когда изменяется значение, хранящееся в указанном адресе памяти. Если значение только считывается, но не изменяется, выполнение программы не прерывается.
Задание точки останова в данных
- В проекте C++ начните отладку и подождите, пока не будет достигнута точка останова. В меню Отладка выберите команду Создать точку останова>Точка останова в данных. Можно также выбрать Создать>Точка останова в данных в окне Точки останова или щелкнуть правой кнопкой мыши элемент Видимые, Контрольные значения или Локальные и выбрать Прервать выполнение при изменении значения в контекстном меню.
- В поле Адрес введите адрес памяти или выражение, результатом вычисления которого будет адрес памяти. Например, для прерывания при изменении содержимого переменной &avar введите avar .
- В раскрывающемся списке Счетчик байтов введите количество байтов, за которыми должен наблюдать отладчик. Например, если выбрать 4, отладчик будет наблюдать за четырьмя байтами начиная с &avar и выполнит прерывание, если какой-либо из этих байтов изменит значение.
Точки останова в данных не работают при следующих условиях.
- Процесс, для которого не выполняется отладка, производит запись в область памяти.
- Область памяти совместно используется двумя или более процессами.
- Область памяти обновляется в ядре. Например, если память передается в функцию ReadFile 32-разрядной версии Windows, то память будет обновляться из режима ядра и отладчик не будет прерывать выполнение при обновлении.
- Контрольное значение превышает 4 байта на 32-разрядном оборудовании и 8 байт на 64-разрядном оборудовании. Это ограничение архитектуры x86.
- Точки останова в данных зависят от конкретных адресов памяти. Адрес переменной меняется между сеансами отладки, поэтому точки останова в данных автоматически отключаются в конце каждого сеанса отладки.
- Если установить точку останова по данным на локальную переменную, точка останова остается включенной при завершении выполнения функции, но адрес памяти больше не применяется, поэтому поведение точки останова будет непредсказуемым. Если установить точку останова в данных на локальную переменную, рекомендуется удалить или отключить точку останова до окончания функции.
Добавление зависимой точки останова
Зависимые точки останова могут сработать только при условии срабатывания другой точки останова. Поэтому в сложном сценарии, таком как отладка многопоточного приложения, вы можете настроить дополнительные точки останова после первого срабатывания другой точки останова. Это упрощает отладку кода по часто используемым путям, например для игрового цикла или служебного API, так как точки останова в таких функциях можно настроить для включения только в случае вызова функции в определенной части приложения.
Чтобы задать зависимую точку останова, сделайте следующее:
- Наведите указатель мыши на символ точки останова, щелкните значок Параметры, а затем выберите Включить только при срабатывании следующей точки останова в окне «Параметры точек останова».
- В раскрывающемся списке выберите необходимую точку останова, от которой будет зависеть текущая точка останова.

Выберите Закрыть или нажмите клавиши CTRL+ВВОД, чтобы закрыть окно «Параметры точки останова». Или в окне «Точки останова» выберите ОК, чтобы закрыть диалоговое окно.
Чтобы задать зависимую точку останова, вы также можете воспользоваться контекстным меню по щелчку правой кнопкой мыши.

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

- Наведите указатель мыши на символ точки останова, щелкните значок Параметры, а затем выберите Удалить точку останова после срабатывания в окне «Параметры точек останова».
- Выберите Закрыть или нажмите клавиши CTRL+ВВОД, чтобы закрыть окно «Параметры точки останова». Или в окне «Точки останова» выберите ОК, чтобы закрыть диалоговое окно.
Чтобы задать временную точку останова, вы также можете воспользоваться контекстным меню по щелчку правой кнопкой мыши.

- Щелкните правой кнопкой мыши в крайнем левом поле рядом со строкой кода и выберите в контекстном меню пункт Вставить временную точку останова.
Или просто используйте сочетание клавиш F9 + SHIFT+ ALT, T и задайте временную точку останова в строке.
Управление точками останова в окне точек останова
Используйте окно Точки останова для просмотра всех точек останова в вашем решении и управления ими. Это централизованное расположение особенно полезно в больших решениях или сложных сценариях отладки, в которых точки останова являются критически важными.
В окне Точки останова можно выполнять поиск, сортировку, фильтрацию, включение, отключение или удаление точек останова. Можно также задать условия и действия или добавить новую функцию или точку останова в данных.
Чтобы открыть окно Точки останова, выберите Отладка>Windows>Точки останова или нажмите клавиши CTRL+ALT+B.


Чтобы выбрать столбцы для отображения в окне Точки останова, выберите Показать столбцы. Выберите заголовок столбца, чтобы отсортировать список точек останова по этому столбцу.
Метки точки останова
Используйте метки для сортировки и фильтрации списка точек останова в окне Точки останова.
- Чтобы добавить метку к точке останова, щелкните правой кнопкой мыши точку останова в исходном коде или в окне Точки останова, а затем выберите Изменить метки. Добавьте новую метку или выберите существующую, а затем выберите ОК.
- Отсортируйте список точек останова в окне Точки останова, выбрав Метки, Условия или другие заголовки столбцов. Можно выбрать отображаемые столбцы, нажав Показать столбцы на панели инструментов.
Экспорт и импорт точек останова
Чтобы сохранить или предоставить состояние и расположение точек останова, их можно экспортировать или импортировать.
- Чтобы экспортировать одну точку останова в XML-файл, щелкните правой кнопкой мыши точку останова в исходном коде или окне Точки останова и выберите Экспорт или Экспорт выбранных. Выберите расположение экспорта и щелкните Сохранить. Расположением по умолчанию является папка решения.
- Чтобы экспортировать несколько точек останова, в окне Точки останова установите флажки рядом с точками останова или введите условия поиска в поле поиска. Нажмите на значок Экспортировать все точки останова, соответствующие текущим критериям поиска и сохраните файл.
- Чтобы экспортировать все точки останова, снимите все флажки и оставьте поле поиска пустым. Нажмите на значок Экспортировать все точки останова, соответствующие текущим критериям поиска и сохраните файл.
- Чтобы импортировать точки останова, в окне Точки останова выберите значок Импортировать точки останова из файла, перейдите к расположению XML-файла и нажмите Открыть.
Установка точек останова из окон отладчика
Можно также задать точки останова из окон отладчика Стек вызовов и Дизассемблирование.
Задание точки останова в окне стека вызовов
Чтобы прервать выполнение на инструкции или строке, к которой возвращается вызывающая функция, установите соответствующую точку останова в окне Стек вызовов.
Задание точки останова в окне стека вызовов
- Чтобы открыть окно Стек вызовов, необходимо приостановить процесс отладки. Выберите Отладка>Windows>Стек вызовов или нажмите клавиши CTRL+ALT+C.
- В окне Стек вызовов щелкните правой кнопкой мыши вызывающую функцию и выберите Точка останова>Вставить точку останова или нажмите F9. В левом поле стека вызовов рядом с именем вызова функции появится символ точки останова.
В окне Точки останова точка останова стека вызова будет представлена как адрес с областью памяти, который соответствует следующей исполняемой инструкции в функции.
Отладчик приостанавливает выполнение на этой инструкции.
Сведения о визуальном отслеживании точек останова во время выполнения кода см. в разделе Сопоставление методов в стеке вызовов при отладке.
Задание точки останова в окне дизассемблирования
- Чтобы открыть окно Дизассемблирование, необходимо приостановить процесс отладки. Выберите Отладка>Windows>Дизассемблирование или нажмите клавиши CTRL+ALT+D.
- В окне Дизассемблирование щелкните в левом поле инструкции, на которой нужно прервать выполнение. Можно также выбрать строку и нажать клавишу F9 или щелкнуть правой кнопкой мыши и выбрать Точка останова>Вставить точку останова.
См. также
- Что такое отладка?
- Улучшение кода C# с помощью Visual Studio
- Первое знакомство с отладкой
- Устранение неполадок с точками останова в отладчике Visual Studio
Условные точки останова в C#: Введение и основы


В программировании на C# (как и в других языках) отладка является ключевой частью разработки. Точки останова — это один из инструментов отладчика, позволяющих «приостановить» выполнение программы в определённом месте. Условные точки останова в C# уходят ещё дальше, позволяя останавливать выполнение программы, когда выполняется специфическое условие. Это очень полезно, когда нужно изучить поведение программы в определенных ситуациях или при определенных значениях переменных.
Пример:
Допустим, у нас есть цикл, который проходит через большой массив данных. Мы хотим установить точку останова, когда определенный элемент массива имеет конкретное значение. Вместо того чтобы вручную останавливать выполнение на каждой итерации, мы можем установить условие для точки останова.
Как установить условную точку останова?
Предположим, у нас есть следующий код:
for (int i = 0; i < 1000; i++) < Console.WriteLine($"Текущее значение i: "); // Здесь мы хотим установить точку останова >
Чтобы установить условную точку останова в Visual Studio:
- Установите обычную точку останова. Нажмите слева от номера строки в редакторе кода или просто кликните по строке и нажмите F9 .
- Откройте настройки точки останова. Двойной клик по иконке точки останова или правый клик и выбор «Condition…».
- Введите условие. Например, i == 500 .
Теперь выполнение программы будет приостановлено, только когда i равно 500.
Почему это полезно?
Использование условных точек останова полезно во многих случаях:
- В больших циклах или при обработке массивов данных. Как в нашем примере с массивом, это может помочь сэкономить время и сделать отладку более эффективной.
- При отладке специфических сценариев. Например, если ошибка происходит только при определенных значениях переменных.
- Для проверки логики с определенными условиями. Это помогает увидеть, как ведет себя ваша программа в различных «сложных» случаях.
Читайте так же Инкапсуляция в C#: 2 поясняющих примера
Расширенные примеры
Сложные условия
Условия для точек останова не ограничиваются простыми проверками равенства. Вы можете использовать логические операторы, такие как && (И) и || (ИЛИ), чтобы создать сложные условия.
Пример:
for (int i = 0; i < 1000; i++) < for (int j = 0; j < 100; j++) < // Условная точка останова с более сложным условием Console.WriteLine($"Текущие значения i: , j: "); > >
Вы можете установить точку останова с условием i == 500 && j == 50 , чтобы остановиться, когда обе переменные достигнут специфических значений.
Использование условных точек останова для анализа ошибок
При диагностировании ошибок, которые происходят только при определенных условиях, условные точки останова могут значительно облегчить процесс. Например, если у вас есть информация о том, что ошибка происходит при определенном значении переменной, вы можете установить точку останова, чтобы она срабатывала только при этом значении.
Использование выражений
Вы не ограничены только проверкой значений переменных. Вы также можете использовать выражения. Например, если у вас есть массив объектов, и вы хотите остановить выполнение, когда определенное свойство объекта имеет конкретное значение.
Пример:
public class MyObject < public int Id < get; set; > public string Name < get; set; > > MyObject[] objects = // предположим, что это массив объектов for (int i = 0; i < objects.Length; i++) < // Условная точка останова, которая проверяет свойство объекта Console.WriteLine($"Объект ID: , Name: "); >
Условие может быть таким: objects[i].Name == «ИскомыйОбъект» .
Таблица применения условных точек останова
| Сценарий использования | Пример условия | Примечания |
|---|---|---|
| Простые проверки в циклах | i == 100 | Используется для остановки на определенной итерации цикла |
| Сложные условные выражения | i == 100 && j == 50 | Полезно при работе с вложенными циклами или множественными условиями |
| Отладка специфических ошибок | variable == «errorValue» | Особенно полезно, когда известно, при каких значениях возникает ошибка |
| Работа с объектами и свойствами | objects[i].Name == «ИскомыйОбъект» | Позволяет отслеживать состояние определенных объектов в массивах или коллекциях |
Читайте так же Конструкторы при наследовании в C#
Заключение
Условные точки останова — мощный инструмент в арсенале разработчика C#. Их использование упрощает процесс отладки, делая его более целенаправленным и эффективным. Применяя сложные условия и понимая контекст выполнения программы, разработчики могут значительно сократить время, необходимое для поиска и исправления ошибок.
Экспериментируйте с различными типами условий в зависимости от ваших потребностей в отладке, чтобы повысить свою продуктивность и качество кода.
