Отладчик 1С:Предприятия 8.3 — от точки останова до сервера и замера производительности

· 10 мин

Содержание

Отладка в 1С 8.3 включается из Конфигуратора: откройте модуль, поставьте курсор на строку, нажмите F9 (точка останова), затем F5 (Отладка → Начать отладку). Конфигуратор сам запустит 1С:Предприятие в режиме отладки, и выполнение остановится на этой строке. Так работает файловая база и любая база, где код выполняется на клиенте.

Для серверной базы шагов больше: на сервере 1С нужно разрешить отладку ключом -debug, а в Конфигураторе подключиться к нужным предметам отладки. Простой вариант подходит для 80 строк обработки, серверный — когда ошибка воспроизводится только в фоновом задании, HTTP-сервисе или у конкретного пользователя.

Как включить отладчик 1С и выбрать протокол

В платформе 8.3 есть два протокола отладки:

ПротоколКак работаетКогда выбирать
HTTPЧерез отдельный сервер отладки dbgs.exe, по умолчанию порт 1550Основной вариант для 8.3; обязателен для отладки мобильных приложений и удобен через сетевые экраны
TCP/IPКонфигуратор напрямую соединяется с процессамиСтарые конфигурации стенда, где HTTP-отладку не настраивали

Протокол задаётся в Конфигураторе: Сервис → Параметры → Запуск 1С:Предприятия, поле «Отладка в режиме». Там же указывается адрес отладчика. Для локальной работы оставьте значение по умолчанию.

Протокол должен совпадать везде — в Конфигураторе, у сервера 1С и в публикации на веб-сервере. Если Конфигуратор настроен на HTTP, а сервер запущен с TCP-отладкой, предметы отладки просто не появятся в списке.

Запуск клиента в режиме отладки без Конфигуратора

Иногда нужно отладить уже открытый у пользователя сеанс или запустить клиент вручную. Для этого в командной строке клиента передают параметр /DEBUG:

"C:\Program Files\1cv8\8.3.24.1548\bin\1cv8c.exe" ENTERPRISE /F"D:\Bases\Test" /DEBUG -http -attach /DEBUGGERURL "http://localhost:1550"

Номер платформы в пути подставьте свой. Тот же параметр /DEBUG можно дописать в поле дополнительных параметров запуска базы в окне выбора информационных баз (кнопка «Изменить», последняя страница мастера).

Перед отладкой обновите конфигурацию базы (F7). Отладчик сверяет код в базе с открытым в Конфигураторе: если вы правили модуль и не обновили базу, точки останова на изменённых строках не сработают.

Управление выполнением: точки останова и пошаговый проход

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

Основные команды меню Отладка:

ДействиеКлавишиЧто делает
Начать отладку / ПродолжитьF5Запускает клиент или продолжает выполнение до следующей точки
Шагнуть вF11Заходит внутрь вызываемой процедуры или функции
Шагнуть черезF10Выполняет строку целиком, не заходя в вызовы
Шагнуть изShift+F11Дорабатывает текущую процедуру и останавливается в вызывающем коде
Идти до курсораShift+F10Выполняет код до строки, где стоит курсор
Точка останова с условиемCtrl+Shift+F9Останов только при истинном выражении
Список точек остановаAlt+F9Все точки по всем модулям: включить, отключить, удалить
Завершить отладкуShift+F5Прерывает отлаживаемый сеанс

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

Цикл на 5 000 строк табличной части, а ошибка — на одной конкретной. Нажимать F5 пять тысяч раз незачем. Поставьте условную точку (Ctrl+Shift+F9) и задайте выражение, например:

СтрокаТЧ.Номенклатура.Код = "00-00001234" И СтрокаТЧ.Количество = 0

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

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

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

Отключенные (серые) точки останова не мешают работе, а забытые активные — мешают. Перед передачей базы коллегам откройте Alt+F9 и удалите лишнее.

Просмотр переменных, табло и стек вызовов

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

Вычислить выражение (Shift+F9). Выделите переменную или выражение и нажмите сочетание. Откроется окно с деревом значения: реквизиты объекта, строки таблицы значений, элементы структуры. Можно вычислять произвольные выражения: Выборка.Количество(), ТекущаяДата() - ДатаНачала, вызов своей функции модуля.

Табло (Отладка → Табло). Список выражений, которые пересчитываются на каждом шаге. Удобно, когда нужно следить за 3–5 переменными, пока идёте по циклу F10. Выражения раскладываются по вкладкам — для разных задач держите разные наборы.

Стек вызовов (Ctrl+Alt+C). Показывает цепочку: какая процедура какую вызвала, вплоть до обработчика события формы или проведения. Двойной щелчок по строке стека открывает код на месте вызова, и в «Вычислить выражение» становятся видны переменные этого уровня.

🔍 Практические приёмы при анализе значений:

  • 📋 Таблицу значений из окна вычисления можно открыть отдельной таблицей и отсортировать — так быстрее найти строку с пустым реквизитом.
  • 🧾 Для запроса вычислите Запрос.Выполнить().Выгрузить() — увидите фактический результат с текущими параметрами.
  • 🧭 Чтобы понять, где выполняется код, посмотрите на заголовок окна вычисления и на стек: серверные вызовы видны как переход в модуль с директивой &НаСервере.

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

Отладка серверного кода, фоновых заданий и внешних соединений

В файловой базе серверный код выполняется в том же процессе, что и клиент, и отлаживается по F5 без настройки. В клиент-серверной базе код с &НаСервере, модули объектов, проведение документов и регламентные задания работают в рабочем процессе кластера. Чтобы их отлаживать, серверу нужно разрешить отладку.

Шаг 1. Разрешить отладку на сервере 1С

Отладка включается ключом агента сервера -debug и протоколом (-http или -tcp). На Windows это делается в строке запуска службы агента:

  1. Откройте regedit и найдите ветку службы агента: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\<имя службы 1С>.
  2. В параметре ImagePath после ragent.exe допишите -debug -http (если ключа -debug ещё нет).
  3. Перезапустите службу агента сервера 1С.

Пример строки после правки:

"C:\Program Files\1cv8\8.3.24.1548\bin\ragent.exe" -debug -http -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -d "C:\Program Files\1cv8\srvinfo"

На Linux тот же ключ добавляют в параметры запуска ragent в unit-файле службы, после чего выполняют перезагрузку конфигурации systemd и рестарт службы.

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

Шаг 2. Подключить предметы отладки

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

Кнопка «Автоматическое подключение» в этом окне позволяет отметить типы предметов, к которым Конфигуратор подключается сам: тонкий клиент, сервер, фоновое задание, HTTP-сервис, веб-сервис, внешнее соединение. Для разбора регламентного задания отметьте фоновые задания, поставьте точку в его процедуре и дождитесь запуска или запустите задание вручную из консоли регламентных заданий.

Отладка HTTP- и веб-сервисов

Для сервисов, опубликованных на Apache или IIS, отладку разрешают в файле публикации default.vrd, внутри элемента point:

<debug enable="true" protocol="http" url="http://192.168.1.10:1550"/>

В url укажите адрес машины, где запущен Конфигуратор с сервером отладки. После правки перезапустите веб-сервер, включите в автоматическом подключении типы «HTTP-сервис» или «Веб-сервис» и отправьте запрос, например из Postman.

Отладка внешних соединений

COM-соединение и внешнее соединение (V83.COMConnector) отлаживаются так же: в автоматическом подключении отметьте тип внешнего соединения, а в строке соединения у вызывающей стороны база должна быть на сервере с включённой отладкой. Код, вызванный через COM, остановится на точке останова, как обычный серверный код.

Внешние обработки и расширения

Внешнюю обработку (.epf) откройте в Конфигураторе через Файл → Открыть, поставьте точки в её модуле и откройте ТОТ ЖЕ файл в 1С:Предприятии, запущенном в режиме отладки. Если открыть копию из другой папки, отладчик её не свяжет с модулем. Код расширений конфигурации отлаживается так же, как основной: точки ставятся в модулях расширения.

Замер производительности: где тратится время

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

  1. Запустите отладку, дойдите в 1С:Предприятии до места перед медленным действием.
  2. В Конфигураторе включите Отладка → Замер производительности.
  3. Выполните медленное действие — проведите документ, сформируйте отчёт.
  4. Снова выберите Отладка → Замер производительности, чтобы остановить замер.

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

🔍 Что обычно видно в замере:

  • 🔁 Запрос внутри цикла: строка Запрос.Выполнить() с количеством выполнений, равным числу строк документа. Решение — один запрос до цикла.
  • 🔗 Обращение через точку (Документ.Контрагент.ОсновнойДоговор.Валюта) в цикле — каждый переход читает объект из базы.
  • 🖥 Частые серверные вызовы из клиентского кода — переписка клиент-сервер видна по множеству коротких вызовов &НаСервере.

Результат замера сохраняется в файл .pff — его можно открыть позже или сравнить «до» и «после» оптимизации.

Замер в отладчике показывает время выполнения кода, но не блокировки и не план запроса в СУБД. Если медленная строка — сам запрос, следующий шаг — технологический журнал (события DBMSSQL, TLOCK) или профайлер СУБД.

Отладка на рабочей базе: что учесть

Отлаживать проще всего на копии. Когда ошибка воспроизводится только в рабочей базе, держите в голове три вещи:

  • ⏸ Точка останова в серверном коде останавливает сеанс пользователя, который этот код выполнил. Пока вы смотрите переменные, у него «висит» программа, а его транзакция может держать блокировки и тормозить других.
  • 🐢 Включённая на сервере отладка (-debug) сама по себе добавляет накладные расходы. Держите её включённой только на время разбора.
  • 🔒 Подключиться к отладке может любой, у кого есть Конфигуратор и доступ к серверу. В рабочем кластере это вопрос безопасности, а не только скорости.

Безопасный порядок: снять копию базы , развернуть её на тестовом сервере с -debug, воспроизвести ошибку там. На рабочем сервере — только если по-другому никак, в окно минимальной нагрузки и с условными точками, чтобы останавливать один нужный сеанс, а не всех.

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

Большинство проблем с отладкой — это несовпадение настроек или кода. Найдите свой симптом:

Диагностика: выберите симптом

Если ничего не помогло

Когда отладчик подключить не удаётся (нет прав на сервер, нельзя перезапускать службу), остаётся отладка без отладчика:

  1. Запись промежуточных значений в журнал регистрации через ЗаписьЖурналаРегистрации() с понятным именем события — потом фильтруйте журнал по этому имени.
  2. Технологический журнал на сервере с событием EXCP — покажет все исключения с текстом и контекстом.
  3. Перенос базы в файловый вариант: если ошибка воспроизводится в файловой копии, отладка там работает без настройки сервера.

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

Частые вопросы

Можно ли отлаживать без Конфигуратора?
Да, в 1С:EDT есть свой отладчик с теми же возможностями: точки останова, переменные, стек, замер производительности. Протокол отладки — HTTP, сервер отладки тот же.
Почему в клиент-серверной базе не видно переменных серверной процедуры?
Отладчик подключён только к клиенту. Подключите серверный предмет отладки в окне Отладка → Подключение или включите автоподключение к серверу.
Нужно ли перезапускать сервер после каждого изменения кода?
Нет. Сервер перезапускают один раз — при включении ключа -debug. После правки кода достаточно обновить конфигурацию базы и начать новый сеанс.
Можно ли отлаживать мобильное приложение?
Да, но только по протоколу HTTP: устройство подключается к серверу отладки по сети, поэтому порт 1550 должен быть доступен с телефона.
Почему отладка тормозит программу?
Включённая отладка добавляет служебный обмен на каждом шаге, а условные точки вычисляют выражение на каждом проходе. Отключайте лишние точки и сервер отладки, когда закончили.