1с стек вызовов как пользоваться
Перейти к содержимому

1с стек вызовов как пользоваться

  • автор:

1с стек вызовов как пользоваться

Большинство программистов 1С знакомы как минимум с двумя методиками отладки: точки останова и узнать значение. Отладка очень полезна и эти две функции позволяют ей пользоваться на 90%.

Одна из проблем отладки – легкая возможность заблудиться. Множество общих модулей, подписки на событие, рекурсия и прочее. Кто с этим не сталкивался – попробуйте отладить типовую обработку «ОбменДаннымиXML». Очень веселое занятие.

Как найти себя в этой массе кода?

Инструкция по поиску себя

1. Установить точку останова в нужном месте.

2. Если Вы уже это сделали и успешно прошагали неизвестное количество вызова функций и заблудились – то нужно остановиться и отдышаться.

3. В меню конфигуратора «Отладка / Стек вызовов» открыть окно стека.

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

На указанном примере, сначала была вызвана функция «Обработка проведения», в которой вызвали «ПроверитьЗаполнениеШапки», а из которой вызвали ту функцию где мы сейчас.

5. На каждую функцию в стеке можно кликнуть два раза мышкой и посмотреть на строку кода, где и был произведен вызов.

Отладчик

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

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

  • отладка приложений, исполняемых на удаленных компьютерах, доступных по протоколу TCP/IP или HTTP,
  • отладка кода, исполняемого рабочим процессом кластера серверов 1С:Предприятия 8; при этом поддерживается сквозной стек вызовов для клиента и сервера, и сквозная пошаговая отладка клиента и сервера;
  • отладка кода, исполняемого в таких видах соединений как внешнее соединение, фоновое задание и WS-соединение?
  • отладка мобильных приложений.

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

Отладчик позволяет установить на конкретную строку модуля специальный маркер — точку останова, — при достижении которой исполнение программного модуля останавливается и управление передается отладчику. Точки останова могут быть безусловными или с параметрами. При достижении безусловной точки останова исполнение программного модуля останавливается в любом случае:

Отладчик

  • Условия останова по имени метода, расположенного выше по стеку при вызове текущей процедуры (имя метода может быть задано регулярным выражением). Это позволит, например, останавливаться в функции или процедуре только когда она вызвана из конкретного метода.
  • Условие останова по количеству попаданий в строку, в которой установлена точка останова, прежде чем она сработает. Это поможет, в частности, при отладке циклов, когда останов необходим только при заданном проходе цикла.

Отладчик

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

Отладчик

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

Отладчик

Пошаговое выполнение

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

Отладчик

Просмотр выражений

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

Отладчик

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

Отладчик

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

Табло и локальные переменные

Результаты вычислений, которые требуется просматривать на протяжении выполнения некоторой части модуля, можно вывести в отдельное окно — табло, — в котором есть возможность распределить все просматриваемые выражения по четырем страницам:

Отладчик

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

Изменение значений переменных

Значения примитивных типов можно изменить прямо в ячейке Значение.

Отладчик

В этом окне полностью функционирует контекстная подсказка.

Отладчик

Стек вызовов

Отладчик позволяет использовать стек вызовов, который показывает последовательность вызовов процедур и функций, приведшую к строке модуля, которая отлаживается в данный момент:

Отладчик

Двойным щелчком мыши на имени процедуры в стеке вызова можно перейти в соответствующую строку процедуры.

Остановка по ошибке

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

Отладчик

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

Пять эффективных инструментов отладки в конфигураторе 1С

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

Стек вызовов

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

 Стек вызова запуск через главное меню

Или, используя панель «Отладка конфигурации»

Стек вызова запуск через панель отладка конфигурации

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

Стек вызова

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

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

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

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

Подключение отладки

Обычно, разработчики запускают отладку кода в конфигураторе 1С, используя кнопку «Начать отладку».

Кнопка Начать отладку

Этот метод очень удобен, и, конечно же, имеет право на жизнь. Но очень часто могут возникать следующие ситуации:

  • 1С: Предприятие уже запущенно и в нем выполняется какой-то процесс, остановить Вы его не можете
  • Нужно отладить работу программы под пользователем, у которого нет прав на работу с конфигуратором

В этом случае, после открытия конфигуратора 1С необходимо подключить отладку к уже запущенному сеансу. Сделать это можно при помощи команды «Подключение» меню «Отладка».

Команда подключение меню отладка

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

Окно предметы отладки

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

Подключение отладки в клиентском контексте

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

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

Подключение отладки в серверном контексте

Подробно о клиентском и серверном контексте формы читайте в моей книге: Основы разработки в 1С: Такси. Разработка управляемого приложения за 12 шагов

Обычно, нельзя подключиться к пользовательскому сеансу. Чтобы это стало возможным, необходимо в параметрах пользовательского приложения 1С включить возможность отладки. Установить в параметр «Откладка в текущем сеансе» значение «Разрешена (протокол TCP/IP)» , когда отлаживаем работу по локальной сети.

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

Включение отладки в сеансе пользователя по протоколу TCP/IP

В этом случае отладка будет включена единовременно. Если мы хотим, чтобы под этим пользователем всегда была включена отладка, то нужно в параметр «Отладка при перезапуске» установить значение «Разрешена (протокол TCP/IP)»

Включение отладки при перезапуске TCP/IP

Точка останова с условием

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

Точка останова с условием

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

Точка останова с условием булево выражение

Можно задать различные комбинации условий

Точка останова с условием булево выражение комбинация

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

Список точек останова

Очень часто в процессе отладки программист может поставить так много точек останова, что сам забудет, где и что ставил. Быстро сориентироваться во всех поставленных точках останова поможет список точек останова. Открыть его можно через главное меню: Главное меню – Отладка – Список точек останова.

Главное меню – Отладка – Список точек останова

Или с помощью комбинации клавиш Alt + F9

Список точек останова

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

У формы списка точек останова есть очень интересные возможности сохранения и последующей загрузки сохраненных точек останова, которые осуществляются при помощи кнопок «Сохранить» и «Открыть файл»

Кнопки сохранения и загрузки точек останова

Остановка по ошибке

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

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

Включить остановку по ошибке достаточно просто: Главное меню – Отладка- Остановка по ошибке.

Главное меню – Отладка- Остановка по ошибке

В открывшемся окне нужно установить флаг «Остановка по ошибке» и нажать на кнопку «Ок».

Остановка по ошибке

Теперь, если в процессе выполнения программы платформой будет сгенерирована ошибка, то программа остановиться на той строке модуля, код которой приводит к ошибке.

Остановка по ошибке в модуле

Остановка по ошибке в модуле

И Вы при помощи табло (или Вычислить выражение) сможете проанализировать значения переменных, которые, возможно, привели к ошибке.
Изучайте основы конфигурирования в 1С и учитесь программировать в «1С: Предприятии» с помощью моих книг: «Программировать в 1С за 11 шагов» и «Основы разработки в 1С: Такси»

Изучайте программирование в 1С в месте с моей книги «Программировать в 1С за 11 шагов»

  1. Книга написана понятным и простым языком — для новичка.
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Научитесь понимать архитектуру 1С;
  4. Станете писать код на языке 1С;
  5. Освоите основные приемы программирования;
  6. Закрепите полученные знания при помощи задачника;

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

  1. Очень доступный и понятный язык изложения
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Поймете идеологию управляемого приложения 1С
  4. Узнаете, как разрабатывать управляемое приложение;
  5. Научитесь разрабатывать управляемые формы 1С;
  6. Сможете работать с основными и нужными элементами управляемых форм
  7. Программирование под управляемым приложением станет понятным

Промо-код на скидку в 15% — 48PVXHeYu


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

можно оплатить вручную:

Яндекс.Деньги — 410012882996301
Web Money — R955262494655

Трассировка кода

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

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

меню отладка

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

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

    <F11> — Пошаговое выполнение кода

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

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

Допустим, что мы зашли в функцию по F11 и увидели, что ничего интересного в ней нет. Тогда можно спокойно нажать <Shift> + <F11> и выйти из этой функции в предыдущую.

Эта команда позволяет выполнить код от текущего положения указателя до места где установлен курсор. То есть если мы прокрутили вниз пару страниц кода от текущего положения указателя и увидели долгожданную строку кода и соответственно хотим дойти до нее, то просто кликаем мышью по этой строчке, чтобы установить на нее курсор и жмем <Shift> + <F10>.

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

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

Стек вызовов

Нажав сочетание клавиш <Ctrl> + <Alt> + <C> или соответствующую кнопку в меню
Кнопка стека вызовов
мы можем открыть окно со стеком вызовов процедур и функций в котором отображается последовательность их выполнения.
Окно стека процедур
По двойному щелчку на строчке в окне стека открывается соответствующий модуль и курсор позиционируется на строке из которой происходил вызов следующей процедуры (которая в окне стека вызовов стоит на строчку выше)

Замер производительности для просмотра вызываемых процедур

Код модуля формы

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

Стек вызова процедур формы

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

Мы видим в окне стека всего лишь две процедуры модуля формы.

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

А происходит это потому, что у нас для справочника Склады установлена подписка на событие ПриУстановкеНовогоКода
Подписка на событие

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

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

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