Разработка и Конфигурация · 13 мин
Как включить серверную отладку в 1С: пошаговая инструкция
Как включить серверную отладку в 1С: запуск сервера 1С с ключом -debug, настройка конфигуратора, отладка серверных процедур и фоновых заданий.
Серверная отладка в 1С нужна, когда ошибка или логика находится в коде, который выполняется на сервере 1С:Предприятия: серверные процедуры и функции общих модулей, серверные обработчики форм, фоновые задания, регламентные операции. Без специального ключа запуска серверный кластер не устанавливает связь с отладчиком, и точки останова в серверном коде просто игнорируются — конфигуратор показывает, что предмет отладки недоступен.
Механика включения зависит от того, как развёрнута ваша система. Для клиент-серверного варианта работы с кластером 1С достаточно перезапустить агент сервера с параметром -debug — после этого любой разработчик сможет подключиться к серверным процедурам из конфигуратора. Для файловой базы отдельной «серверной» отладки нет: весь код выполняется в одном процессе и отлаживается напрямую.
Ниже разобраны все основные сценарии: включение отладки на сервере под Windows и Linux, отладка через конфигуратор, работа с фоновыми заданиями и веб-сервисами, а также типичные проблемы — когда точка останова не срабатывает, хотя всё вроде бы настроено.
Когда нужна серверная отладка и как она работает
В клиент-серверной архитектуре 1С код делится на клиентский и серверный. Клиентская часть выполняется в процессе тонкого или толстого клиента на компьютере пользователя, серверная — в рабочих процессах кластера (rphost). Отладчик конфигуратора по умолчанию подключается только к тем процессам, которые запущены в режиме отладки. Клиентское приложение, запущенное из конфигуратора, отлаживается автоматически, а вот кластер серверов нужно явно перевести в отладочный режим.
Признак того, что серверная отладка выключена, характерный: точка останова в серверной процедуре отображается с восклицательным знаком или перечёркнута, а при наведении появляется подсказка «Точка останова недоступна». При этом клиентский код останавливается нормально. Это значит, что агент сервера запущен без ключа -debug, и рабочие процессы не регистрируются в механизме отладки.
Важно понимать и ограничение: режим отладки снижает производительность кластера и увеличивает потребление памяти, потому что процессы поддерживают постоянное соединение с отладчиком и передают служебную информацию. Поэтому на продуктивных серверах отладку включают временно — на период поиска проблемы, а затем обязательно выключают.
Включение отладки на сервере 1С под Windows
На Windows параметр запуска агента сервера 1С хранится в реестре, в свойствах службы. Самый надёжный способ — изменить строку запуска службы вручную. Для этого откройте редактор реестра и найдите ветку HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services, где расположен раздел вашей службы агента сервера — обычно он называется примерно как «1C:Enterprise 8.3 Server Agent» с указанием версии платформы и порта.
В разделе службы найдите параметр ImagePath — это полная строка запуска исполняемого файла ragent.exe со всеми аргументами. Добавьте в конец строки через пробел параметр -debug, не удаляя существующие ключи (-srvc, -agent, -regport, -port, -range, -d и другие). После изменения реестра перезапустите службу: через оснастку «Службы» (services.msc) или командой.
net stop "1C:Enterprise 8.3 Server Agent (x86-64)" && net start "1C:Enterprise 8.3 Server Agent (x86-64)"Альтернативный способ без правки реестра — остановить службу и запустить агент сервера как обычное приложение из командной строки с нужными параметрами. Это удобно для разовой отладочной сессии: после закрытия окна консоли агент остановится, и можно снова запустить штатную службу. Однако для длительной работы такой вариант не подходит — консольное приложение завершится при завершении сеанса пользователя.
- 1Остановите службу агента сервера 1С через services.msc или командную строку
- 2Откройте реестр и найдите раздел службы в HKLM\SYSTEM\CurrentControlSet\Services
- 3В параметре ImagePath добавьте в конец строки запуска ключ -debug через пробел
- 4Запустите службу заново и убедитесь, что она стартовала без ошибок
- 5В конфигураторе откройте Отладка → Подключение и проверьте, что серверные предметы отладки доступны
Включение отладки на сервере 1С под Linux
На Linux агент сервера 1С обычно запускается через systemd-юнит или скрипт инициализации. Параметр -debug добавляется в строку запуска в файле юнита — как правило, это файл вида srv1cv83.service в каталоге /etc/systemd/system/ или /usr/lib/systemd/system/. Найдите директиву ExecStart и допишите ключ -debug к аргументам запуска ragent.
После правки юнита обязательно выполните перечитывание конфигурации systemd и перезапуск службы, иначе изменения не применятся. Проверить, что агент запустился с нужным ключом, можно через список процессов: в выводе ps aux | grep ragent должна быть видна строка запуска с параметром -debug.
sudo systemctl daemon-reload && sudo systemctl restart srv1cv83 && ps aux | grep ragentЕсли сервер 1С на Linux запускается вручную скриптом, достаточно отредактировать сам скрипт и перезапустить агент. Обратите внимание на права: служба должна запускаться от того же пользователя, что и раньше (обычно usr1cv8), иначе возможны проблемы с доступом к каталогу служебных файлов кластера.
Подключение к серверной отладке из конфигуратора
После перезапуска кластера в отладочном режиме откройте конфигуратор и перейдите в меню «Отладка → Подключение». В окне подключения выберите тип предмета отладки — для серверного кода это обычно «Сервер» или конкретный вид: «Фоновое задание», «HTTP-сервис», «Web-сервис». Если автоматический поиск не показывает нужные процессы, укажите в настройках имя сервера и порт кластера.
В настройках отладки («Отладка → Настройка») проверьте протокол отладки: современные версии платформы используют протокол HTTP, для которого нужно указать адрес сервера отладки. Если в вашей инфраструктуре между конфигуратором и сервером есть файрвол или разные подсети, убедитесь, что порты отладки доступны — это частая причина ситуации, когда кластер запущен с -debug, но конфигуратор процессы не видит.
Для отладки кода, который выполняется в сеансе другого пользователя, включите в настройках отладки флажок «Искать предметы отладки на удалённом компьютере» и при необходимости отметьте «Устанавливать режим разрешения отладки» для нужных видов предметов. После подключения точки останова в серверных модулях станут активными и выполнение остановится при первом обращении к коду.
Отладка фоновых заданий и веб-сервисов
Фоновые задания выполняются в отдельных сеансах на сервере, поэтому их отладка требует явного подключения. В окне «Отладка → Подключение» выберите тип предмета отладки «Фоновое задание» и установите режим разрешения отладки. Когда задание запустится (по расписанию или программно), отладчик подхватит его сеанс и остановит выполнение на точке останова. Учтите, что короткие задания могут завершиться раньше, чем вы успеете подключиться, — в таком случае временно добавьте в код паузу или запускайте задание принудительно.
Отладка HTTP-сервисов и веб-сервисов работает похожим образом: сеанс создаётся при входящем запросе от веб-сервера. Включите разрешение отладки для соответствующего типа предмета, отправьте тестовый запрос — и выполнение остановится в модуле сервиса. Здесь важно, чтобы публикация на веб-сервере указывала на ту же базу, к которой подключён конфигуратор, иначе вы будете ждать срабатывания в одной базе, а запросы будут приходить в другую.
Отдельный случай — отладка кода, выполняемого в привилегированном режиме и в обработчиках подписок на события. Такой код тоже выполняется на сервере и отлаживается стандартно, но легко пропустить вызов, если точка останова стоит не в том модуле. Полезный приём — поставить точку останова в самом начале цепочки вызовов и дальше двигаться по шагам с заходом в процедуры.
Если фоновое задание падает с ошибкой раньше, чем вы успеваете подключиться, временно оберните его код в попытку и запишите текст ошибки в журнал регистрации через ЗаписьЖурналаРегистрации. Часто этого достаточно, чтобы локализовать проблему без полноценной отладочной сессии.
Типичные проблемы и их решение
Самая распространённая ситуация — после добавления -debug служба не стартует. Почти всегда причина в синтаксисе строки запуска: потерянная кавычка, лишний пробел внутри пути или случайно удалённый существующий параметр. Проверьте, что путь к ragent.exe остался заключённым в кавычки, а -debug стоит за их пределами. Детали ошибки смотрите в журнале событий Windows или в выводе systemctl status на Linux.
Вторая частая проблема — служба работает, но конфигуратор не видит серверные предметы отладки. Здесь проверяйте по цепочке: действительно ли процесс ragent запущен с ключом (видно в диспетчере задач через отображение командной строки или в ps), совпадает ли версия платформы конфигуратора и сервера, не блокирует ли сетевой экран порты отладки, правильный ли сервер указан в настройках подключения.
Ещё один неочевидный момент: если используется несколько рабочих серверов в кластере, отладочный режим должен быть включён на том сервере, где фактически выполняется код. При распределении нагрузки сеанс может попасть на другой рабочий сервер, и точка останова не сработает. Временно ограничьте кластер одним рабочим сервером или включите отладку на всех.
Отключение отладки после завершения работ
После завершения поиска проблемы серверную отладку следует выключить: уберите ключ -debug из строки запуска службы и перезапустите агент тем же способом, каким включали. Проверьте, что служба стартовала и пользователи могут подключаться к базам. Это вернёт кластеру штатную производительность и закроет техническую возможность подключения отладчика к серверным процессам — что важно и с точки зрения безопасности, поскольку отладка даёт доступ к данным, обрабатываемым в коде.
Если отладка включалась временным запуском агента из командной строки, достаточно завершить консольный процесс и запустить штатную службу. Убедитесь, что не осталось «висящих» процессов ragent с отладочным ключом — два агента на одних портах конфликтуют, и кластер может работать нестабильно.
Что важно запомнить
Серверная отладка включается ключом -debug в строке запуска агента сервера 1С с последующим перезапуском службы. Подключение выполняется из конфигуратора через «Отладка → Подключение» с выбором нужного типа предмета отладки. После работы ключ следует убрать, чтобы не деградировала производительность кластера.
Частые вопросы о серверной отладке 1С
Нужна ли серверная отладка для файловой базы?
Нет. В файловом варианте работы нет кластера серверов — весь код, включая «серверные» процедуры, выполняется внутри процесса клиентского приложения. Достаточно запустить базу из конфигуратора в режиме отладки, и точки останова будут работать в любом модуле.
Служба не запускается после добавления -debug. Что делать?
Проверьте синтаксис строки запуска: путь к ragent.exe должен остаться в кавычках, а ключ -debug — стоять снаружи через пробел. Восстановите изначальное значение ImagePath, если сохраняли его, и добавьте ключ заново аккуратно. Детали ошибки ищите в журнале событий Windows или в выводе systemctl status.
Точка останова в серверном коде перечёркнута. Почему?
Это признак того, что серверный процесс недоступен отладчику: либо агент запущен без -debug, либо конфигуратор не подключился к нужному предмету отладки. Проверьте наличие ключа в командной строке процесса ragent и настройки подключения в меню «Отладка → Подключение».
Можно ли включить отладку только для одной базы в кластере?
Нет, ключ -debug применяется ко всему агенту сервера, то есть ко всем базам кластера. Если нужно изолировать отладку, вынесите тестируемую базу в отдельный кластер или на отдельный сервер.
Влияет ли режим отладки на работу пользователей?
Да. В отладочном режиме рабочие процессы передают служебную информацию отладчику, что увеличивает нагрузку и время отклика. Кроме того, сработавшая точка останова приостанавливает выполнение кода. Поэтому на продуктиве отладку включают кратковременно и выключают сразу после диагностики.
Как отладить регламентное задание, которое выполняется раз в час?
Не ждите расписания: запустите задание принудительно из консоли заданий или программно через метод Выполнить после того, как включили разрешение отладки для типа «Фоновое задание». Отладчик подхватит сеанс при старте задания и остановится на точке останова.