Разработка и Конфигурация · 12 мин
Отладка кода 1С на сервере: настройка и практика
Как включить и настроить отладку на сервере 1С: флаг debug, агент сервера, предметы отладки, типичные ошибки подключения и способы их решения.
Клиент-серверный режим работы 1С переносит исполнение значительной части кода из клиентского приложения в рабочие процессы сервера. Из-за этого привычная отладка «на клиенте» перестаёт останавливаться на точках останова в серверных процедурах и модулях: конфигуратор просто не видит эти сеансы, пока сервер не запущен в специальном режиме. Понимание того, где именно исполняется код и как подключиться к серверному сеансу, — основа продуктивной отладки в кластере 1С.
Отладка на сервере требуется в нескольких типовых ситуациях: ошибка воспроизводится только в клиент-серверной базе, нужно проверить запросы и транзакции в серверных процедурах, не работает код в фоновых заданиях или веб-сервисах. Во всех этих случаях действие сводится к одному: запустить агент сервера с параметром отладки, перезапустить рабочие процессы и подключить нужный предмет отладки в конфигураторе.
Ниже разобран полный цикл: настройка службы агента, выбор протокола, подключение предметов отладки, работа с фоновыми заданиями и веб-публикациями, а также типичные ошибки, из-за которых точки останова «не срабатывают».
Когда код исполняется на сервере и почему он не останавливается
В конфигурации 1С контекст исполнения определяется директивами компиляции: &НаСервере, &НаКлиенте, серверные общие модули, модули объектов и менеджеров. Весь этот код в клиент-серверной базе выполняется внутри рабочих процессов rphost на сервере приложений. Отладчик конфигуратора по умолчанию подключается только к клиентскому сеансу, поэтому точки останова в серверных модулях игнорируются.
Дополнительная сложность — рабочие процессы не принимают отладочные подключения, если агент сервера запущен без соответствующего флага. Это сделано намеренно: режим отладки замедляет исполнение кода и увеличивает нагрузку, поэтому по умолчанию он отключён. Признак ситуации простой: конфигуратор сообщает, что сервер не поддерживает отладку, или в списке предметов отладки отсутствуют серверные сеансы.
Перед настройкой убедитесь, что ошибка действительно находится в серверном коде. Быстрый способ проверки — временно добавить вывод в журнал регистрации или сообщение в серверной процедуре: если запись появляется, код исполняется на сервере и требует серверной отладки.
Включение режима отладки на агенте сервера
Главный шаг — запуск агента сервера 1С с параметром отладки. На Windows это делается через изменение параметров службы, на Linux — через правку скрипта запуска или unit-файла systemd. Ключевой параметр командной строки агента: -debug. Для отладки через HTTP (актуально при удалённой работе и в новых версиях платформы) добавляется -http.
На Windows откройте реестр или свойства службы «Агент сервера 1С:Предприятия» и допишите в строку запуска параметр -debug. Более надёжный путь — найти службу в реестре по пути HKLM\SYSTEM\CurrentControlSet\Services, отредактировать значение ImagePath и перезапустить службу. Учтите, что перезапуск агента завершает все сеансы пользователей — планируйте работу вне рабочего времени или заранее предупредите сотрудников.
На Linux параметр добавляется в скрипт запуска агента (например, srv1cv8) или в unit systemd. После правки выполните перезапуск службы и проверьте в списке процессов, что ragent действительно стартовал с нужными ключами.
net stop "1C:Enterprise 8.3 Server Agent" && sc config "1C:Enterprise 8.3 Server Agent" binPath= "\"C:\Program Files\1cv8\8.3.22.1750\bin\ragent.exe\" -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -d \"C:\Program Files\1cv8\srvinfo\" -debug -http" && net start "1C:Enterprise 8.3 Server Agent"Отладка по TCP и по HTTP: что выбрать
Платформа поддерживает два протокола отладки: классический TCP и более новый HTTP. TCP-отладка работает «из коробки» после флага -debug, но требует сетевой доступности портов отладки между компьютером разработчика и сервером. HTTP-отладка включается ключом -http и работает через стандартный порт, что удобно при работе через VPN, брандмауэры и в распределённых инфраструктурах.
Выбор протокола задаётся в конфигураторе: «Сервис → Параметры → Отладка», где указывается используемый протокол. Важно, чтобы настройка конфигуратора совпадала с тем, как запущен агент: если сервер стартовал только с -debug, а конфигуратор настроен на HTTP, подключение не установится.
Сравнение протоколов отладки
Классический вариант, подходит для локальной сети. Требует открытых портов диапазона отладки; через строгие брандмауэры и VPN часто не работает.
Работает через стандартный веб-порт, проходит через брандмауэры и прокси. Рекомендуется для удалённой отладки и новых версий платформы; требует согласованной настройки в конфигураторе.
Подключение предметов отладки в конфигураторе
После перезапуска сервера откройте конфигуратор, подключённый к той же базе, и перейдите в «Отладка → Подключение». В окне появятся доступные предметы отладки: клиентские и серверные сеансы, фоновые задания, соединения. Отметьте нужные типы флажками — в частности, включите автоматическое подключение серверных сеансов и фоновых заданий, чтобы не ловить их вручную.
Практический приём: включите автоподключение всех типов предметов, запустите клиентское приложение из конфигуратора (F5 или «Начать отладку») и воспроизведите ошибку. Отладчик остановится на точке останова в серверной процедуре так же, как привыкли разработчики файловых баз. Дальше доступны пошаговое исполнение, просмотр переменных, табло, стек вызовов и вычисление выражений.
Если в списке предметов пусто, проверьте три вещи: агент запущен с -debug, протокол в конфигураторе совпадает с параметрами запуска, и сеанс пользователя открыт после перезапуска сервера — старые сеансы, созданные до включения отладки, не отлаживаются.
- 1Добавьте -debug (и -http при необходимости) в параметры запуска агента сервера
- 2Перезапустите службу агента, предупредив пользователей
- 3В конфигураторе откройте «Сервис → Параметры → Отладка» и выберите нужный протокол
- 4Откройте «Отладка → Подключение» и включите автоподключение серверных сеансов и фоновых заданий
- 5Запустите клиентское приложение из конфигуратора и воспроизведите ошибку
- 6Убедитесь, что отладчик остановился на точке останова в серверном модуле
Отладка фоновых заданий и веб-сервисов
Фоновые задания исполняются в отдельных сеансах рабочих процессов и не привязаны к клиентскому приложению. Чтобы их отладить, включите в окне подключения автоматическое подключение фоновых заданий, затем запустите задание — отладчик подхватит его сеанс при старте. Для регламентных заданий, которые трудно поймать по расписанию, удобно временно запускать их принудительно из консоли заданий или через вызов метода в толстом клиенте.
Отладка HTTP-сервисов и веб-сервисов устроена иначе: код исполняется в сеансах, которые создаёт веб-сервер при обращении к публикации. В этом случае в настройках публикации или в файле default.vrd включается режим отладки (параметр debug), а в конфигураторе подключается соответствующий тип предмета отладки. После этого отправьте тестовый запрос к сервису — исполнение остановится на точке останова в модуле сервиса.
Ограничение, о котором часто забывают: сеансы веб-сервисов живут недолго и могут переиспользоваться пулом. Если точка останова не сработала, проверьте, что запрос действительно дошёл до сервера (например, по журналу веб-сервера) и что публикация указывает на ту же базу, к которой подключён конфигуратор.
Типичные проблемы и их диагностика
Самая частая жалоба — «точка останова не срабатывает». Причины почти всегда одни и те же: сервер не перезапущен после добавления флага, отлаживаемый код исполняется в другом сеансе, чем подключённый, конфигурация в базе отличается от конфигурации в конфигураторе (забыли обновить конфигурацию базы данных). Последний случай коварен: строки смещаются, и остановка происходит не там, где ожидается, либо не происходит вовсе.
Вторая группа проблем — сетевые. При TCP-отладке брандмауэр блокирует порты отладки, при HTTP-отладке неверно указан адрес сервера отладки в параметрах конфигуратора. Диагностируется просто: если список предметов отладки пуст при гарантированно включённом режиме, проблема в сети или протоколе.
Третья группа — попытка отладить код, который исполняется не в том контексте. Например, код в привилегированном модуле, вызванный из фонового задания, живёт в сеансе задания, а не пользователя. Всегда уточняйте, какой именно сеанс исполняет проблемный код, через журнал регистрации или вывод номера сеанса.
Проверка результата и безопасное завершение
После завершения отладки на продуктивном сервере режим следует отключить: уберите -debug и -http из параметров запуска и перезапустите службу в нерабочее время. Работа сервера в отладочном режиме заметно снижает производительность, а открытые порты отладки расширяют поверхность для несанкционированного доступа к сеансам.
Контрольные точки помогут убедиться, что всё настроено верно как при включении, так и при отключении режима.
Как проверить результат
Видны серверные сеансы и фоновые задания, точки останова срабатывают
Список пуст или содержит только клиентский сеанс — проверяйте флаг -debug и протокол
В командной строке процесса присутствует -debug (при включённой отладке)
Флага нет — служба запущена со старыми параметрами, нужен перезапуск
После завершения работ режим отладки выключен, служба перезапущена без -debug
Режим оставлен включённым — пользователи жалуются на замедление
Что важно запомнить
Серверная отладка в 1С включается флагом -debug у агента сервера с обязательным перезапуском службы. Подключайте серверные сеансы и фоновые задания через «Отладка → Подключение», следите за совпадением протокола (TCP или HTTP) и актуальностью конфигурации базы. На продуктивном сервере режим отладки включайте временно и выключайте после завершения работ.
Частые вопросы
Можно ли отлаживать код на сервере без перезапуска службы агента?
Нет. Флаг -debug читается агентом только при старте, поэтому перезапуск службы обязателен. Чтобы не прерывать работу пользователей, можно развернуть отдельный тестовый кластер или копию базы и отлаживаться там, не трогая продуктивный сервер.
Почему отладчик останавливается не на той строке, где стоит точка останова?
Почти всегда это признак рассинхронизации конфигураций: конфигурация базы данных отличается от той, что открыта в конфигураторе. Обновите конфигурацию базы данных и убедитесь, что отлаживаемый сеанс работает с актуальной версией кода.
Как отладить код, который выполняется только под правами другого пользователя?
Подключение предметов отладки не зависит от того, под каким пользователем запущен сеанс: включите автоподключение серверных сеансов, попросите коллегу воспроизвести действие — отладчик подхватит его сеанс. Альтернатива — временно запустить сеанс под нужной учётной записью самостоятельно в тестовой базе.
Отладка замедляет работу пользователей. Это нормально?
Да, режим отладки добавляет накладные расходы на исполнение кода в рабочих процессах, и на нагруженных системах это ощутимо. Поэтому на продуктиве отладку включают точечно и на короткое время, а основную работу ведут на тестовой копии базы.
Можно ли отладить внешнюю обработку, запущенную на сервере?
Да, если обработка открыта через конфигуратор («Файл → Открыть») и её модуль загружен в отладчик. Точки останова в модуле внешней обработки сработают как в клиентском, так и в серверном контексте при условии, что сервер запущен в режиме отладки и сеанс подключён.
Что делать, если сервер на Linux, а конфигуратор на Windows?
Это штатная схема: включите -debug в скрипте запуска агента на Linux, для надёжности добавьте -http и настройте HTTP-отладку в конфигураторе — она лучше проходит через сетевые границы. Убедитесь, что версия платформы конфигуратора совпадает с версией сервера, иначе подключение может быть отклонено.