Как установить точку останова на вызовы метода

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

Механизм работает следующим образом: во время исполнения приложения проверяются все вхождения записанного в точке останова текста в полное имя метода. Полным именем метода считается ПространствоИмен::ИмяТипа.ИмяМетода(). Для системных методов и методов встроенных типов, имеющих двуязычный вариант названия, остановка будет срабатывать также на вызове методов, имя которых записано на втором языке.

Механизм так же учитывает иерархию типов. Если метод унаследован от некоторого типа Базовый, то в точке останова может указываться как Наследник.Метод(), так и Базовый.Метод().

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

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

Чтобы остановить выполнение программы в момент, когда вызывается функция МояФункция, содержащаяся в конкретном модуле (например, Товары.Объект) определенной подсистемы (например, Товары), следует добавить точку останова с именем Товары::Товары.Объект.МояФункция(). После запуска отладки программа будет остановлена на вызове только той функции МояФункция, что содержится в модуле Товары.Объект подсистемы Товары.

Остановка на месте вызова любого метода известного модуля либо подсистемы

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

  • ПодсистемаТовары::СправочникТовары.Объект
  • СправочникТовары.Объект
  • СправочникТовары
  • ПодсистемаТовары

Остановка на вызове системного метода

Чтобы остановить исполнение программы на вызове системного метода, следует указать в точке останова название системного метода, например:
  • Стд::Массив::Добавить — таким образом можно узнать, в каком месте осуществляется добавление нового элемента в Массив
  • КонтекстДоступа::Привилегированный — таким образом можно узнать, в каком месте устанавливается привилегированный контекст доступа.

Остановка на изменении свойства компонента интерфейса

Останавливать исполнение приложения можно также в момент изменения свойств компонентов интерфейса.

К примеру, в проекте содержится документ Заказ. В форме документа ФормаЗаказа есть свойство СуммаЗаказа. Чтобы остановить исполнение программы на изменении данного свойства, следует указать в точке останова:

  • ФормаЗаказа.СуммаЗаказа
Однако может быть так, что в данной форме содержится не только свойство, но одновременно и метод с именем СуммаЗаказа. Тогда, чтобы остановить исполнение приложения во время изменения свойства, но не останавливать при вызове метода, в конце строки следует указать имя псевдометода — Установить():
  • ФормаЗаказа.СуммаЗаказа.Установить()
Если же требуется наоборот остановить исполнение приложения во время вызова метода, но не останавливать при изменении свойства, в конце строки следует указать скобки, обозначающие конец полного имени метода:
  • ФормаЗаказа.СуммаЗаказа()

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

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

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

Укажите имя метода, например Стд::Массив::Добавить:

После запуска отладки остановка будет срабатывать каждый раз при добавлении какого-либо значения в Массив.