Отладчик 1С:Предприятия 8.3 — от точки останова до сервера и замера производительности
Содержание
Отладка в 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 это делается в строке запуска службы агента:
- Откройте
regeditи найдите ветку службы агента:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\<имя службы 1С>. - В параметре
ImagePathпослеragent.exeдопишите-debug -http(если ключа-debugещё нет). - Перезапустите службу агента сервера 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С:Предприятии до места перед медленным действием.
- В Конфигураторе включите
Отладка → Замер производительности. - Выполните медленное действие — проведите документ, сформируйте отчёт.
- Снова выберите
Отладка → Замер производительности, чтобы остановить замер.
Откроется таблица по модулям и строкам: сколько раз выполнялась строка, сколько времени заняла всего, доля в процентах от общего времени и чистое время без вложенных вызовов. Сортируйте по проценту и спускайтесь от верхних строк. Двойной щелчок открывает строку в модуле.
🔍 Что обычно видно в замере:
- 🔁 Запрос внутри цикла: строка
Запрос.Выполнить()с количеством выполнений, равным числу строк документа. Решение — один запрос до цикла. - 🔗 Обращение через точку (
Документ.Контрагент.ОсновнойДоговор.Валюта) в цикле — каждый переход читает объект из базы. - 🖥 Частые серверные вызовы из клиентского кода — переписка клиент-сервер видна по множеству коротких вызовов
&НаСервере.
Результат замера сохраняется в файл .pff — его можно открыть позже или сравнить «до» и «после» оптимизации.
Замер в отладчике показывает время выполнения кода, но не блокировки и не план запроса в СУБД. Если медленная строка — сам запрос, следующий шаг — технологический журнал (события DBMSSQL, TLOCK) или профайлер СУБД.
Отладка на рабочей базе: что учесть
Отлаживать проще всего на копии. Когда ошибка воспроизводится только в рабочей базе, держите в голове три вещи:
- ⏸ Точка останова в серверном коде останавливает сеанс пользователя, который этот код выполнил. Пока вы смотрите переменные, у него «висит» программа, а его транзакция может держать блокировки и тормозить других.
- 🐢 Включённая на сервере отладка (
-debug) сама по себе добавляет накладные расходы. Держите её включённой только на время разбора. - 🔒 Подключиться к отладке может любой, у кого есть Конфигуратор и доступ к серверу. В рабочем кластере это вопрос безопасности, а не только скорости.
Безопасный порядок: снять копию базы
, развернуть её на тестовом сервере с -debug, воспроизвести ошибку там. На рабочем сервере — только если по-другому никак, в окно минимальной нагрузки и с условными точками, чтобы останавливать один нужный сеанс, а не всех.
Почему отладчик не останавливается: частые проблемы
Большинство проблем с отладкой — это несовпадение настроек или кода. Найдите свой симптом:
Если ничего не помогло
Когда отладчик подключить не удаётся (нет прав на сервер, нельзя перезапускать службу), остаётся отладка без отладчика:
- Запись промежуточных значений в журнал регистрации через
ЗаписьЖурналаРегистрации()с понятным именем события — потом фильтруйте журнал по этому имени. - Технологический журнал на сервере с событием
EXCP— покажет все исключения с текстом и контекстом. - Перенос базы в файловый вариант: если ошибка воспроизводится в файловой копии, отладка там работает без настройки сервера.
После разбора уберите отладочную запись в журнал из кода, чтобы не засорять журнал регистрации.