Как включить отладку на сервере 1С:Предприятия 8.3 и подключить к ней конфигуратор

· 9 мин

Содержание

Чтобы запустить сервер 1С в режиме отладки, агенту сервера ragent нужно добавить в строку запуска ключ -debug (для отладки по HTTP — -debug -http) и перезапустить службу. Без этого ключа конфигуратор видит только клиентские сеансы, а точки останова в серверных процедурах, фоновых заданиях и HTTP-сервисах не срабатывают.

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

Что подготовить до включения отладки на сервере

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

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

Перед стартом проверьте:

  • 🖥️ Версию платформы на сервере и у конфигуратора. Номер версии конфигуратора должен точно совпадать с номером сервера, например 8.3.24.1548 и там, и там.
  • 🔑 Права. Править параметры службы может только локальный администратор Windows или пользователь с sudo в Linux.
  • 🌐 Порты. Для отладки по TCP нужен доступ к агенту 1540, менеджеру кластера 1541 и диапазону рабочих процессов (по умолчанию 1560:1591). Для HTTP-отладки — порт сервера отладки, по умолчанию 1550, на машине разработчика.
  • 💾 Текущую строку запуска службы. Сохраните её в текстовый файл. Это ваш путь назад, если что-то пойдёт не так.

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

Где задаются параметры запуска сервера 1С

Отладку включают не в файлах кластера, а в командной строке агента ragent. Файлы реестра кластера в каталоге srvinfo (1CV8Clst.lst, 1CV8Reg.lst) руками не правят: там хранится список баз , рабочих серверов и администраторов. Повредите его — кластер не поднимется.

Типичная строка запуска службы в Windows выглядит так:

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

Что здесь что:

ПараметрНазначение
-srvcзапуск в режиме службы Windows
-agentпроцесс работает как агент сервера
-port 1540порт агента
-regport 1541порт менеджера кластера
-range 1560:1591диапазон портов рабочих процессов
-d "…\srvinfo"каталог с данными кластера
-debugвключает отладку на сервере (по умолчанию по TCP)
-debug -httpотладка по протоколу HTTP через сервер отладки

Порядок ключей не важен. Главное — чтобы -debug попал внутрь строки, а не после закрывающей кавычки пути к каталогу.

Если нужно разобрать не код, а поведение кластера (зависания, исключения, долгие запросы), отладчик не поможет. Для этого включают технологический журнал через файл logcfg.xml в каталоге conf платформы. Это отдельный инструмент, перезапуск службы ему не нужен.

Как запустить сервер 1С в режиме отладки под Windows

Есть три способа. Результат одинаковый, выбирайте тот, что удобнее.

Способ 1. Через редактор реестра

  1. Остановите службу: Win + R → services.msc → служба «1C:Enterprise 8.3 Server Agent (x86-64)» → «Остановить».
  2. Откройте regedit и перейдите в HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services.
  3. Найдите раздел службы агента 1С (имя начинается с 1C:Enterprise 8.3 Server Agent).
  4. Откройте параметр ImagePath и допишьте после ragent.exe" ключ -debug через пробел.
  5. Сохраните, закройте редактор и запустите службу.

Должно получиться так:

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

Способ 2. Командой sc config

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

sc query type= service state= all | findstr /i "1C:Enterprise"

Затем задайте новую строку запуска. Кавычки внутри экранируются обратной косой чертой, пробел после binPath= обязателен:

sc config "1C:Enterprise 8.3 Server Agent (x86-64)" binPath= "\"C:\Program Files\1cv8\8.3.24.1548\bin\ragent.exe\" -debug -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -d \"C:\Program Files\1cv8\srvinfo\""
net stop "1C:Enterprise 8.3 Server Agent (x86-64)"
net start "1C:Enterprise 8.3 Server Agent (x86-64)"

Способ 3. Разовый запуск агента из консоли

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

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

Сервер работает, пока открыто окно консоли. Закрыли окно — кластер остановился. Затем снова запустите службу, и сервер вернётся в обычный режим без правки реестра.

Каталог -d должен быть тем же, что у службы. Укажете другой — агент поднимет пустой кластер без баз.

Запуск сервера 1С в режиме отладки на Linux

На Linux порядок зависит от того, как установлен сервер.

Сервер со скриптом init.d (старые сборки 8.3)

Параметры запуска лежат в файле /etc/sysconfig/srv1cv83 (RHEL, CentOS) или /etc/default/srv1cv83 (Debian, Ubuntu). В нём есть переменная отладки:

SRV1CV8_DEBUG=1

Раскомментируйте строку, поставьте 1 и перезапустите сервер:

sudo service srv1cv83 restart

Сервер с unit-файлом systemd (8.3.21 и новее)

Начиная с 8.3.21 платформа ставит unit-файл, а версия входит в имя службы. Посмотрите, как сейчас выглядит строка запуска:

systemctl list-units | grep srv1cv8
systemctl cat srv1cv8-8.3.24.1548@default.service

Не правьте исходный unit-файл напрямую: при обновлении платформы он перезапишется. Создайте переопределение:

sudo systemctl edit srv1cv8-8.3.24.1548@default.service

В открывшемся редакторе очистите ExecStart и задайте его заново — скопируйте исходную строку из вывода systemctl cat и допишьте -debug. Пустая строка ExecStart= обязательна, иначе systemd откажется запускать службу с двумя командами.

[Service]
ExecStart=
ExecStart=<исходная строка ragent из systemctl cat> -debug

Затем перечитайте конфигурацию и перезапустите службу:

sudo systemctl daemon-reload
sudo systemctl restart srv1cv8-8.3.24.1548@default.service

Подключение конфигуратора к отладке на сервере 1С

Сервер в режиме отладки сам ничего не отлаживает. Он лишь разрешает подключиться к своим рабочим процессам. Дальше работа идёт в конфигураторе.

  1. Откройте базу в конфигураторе под той же версией платформы, что и сервер.
  2. Проверьте протокол отладки в параметрах конфигуратора (Сервис → Параметры, раздел отладки). Он должен совпадать с тем, что задан на сервере: TCP при -debug, HTTP при -debug -http.
  3. Откройте меню Отладка → Подключение.
  4. Нажмите «Автоматическое подключение» и отметьте нужные предметы отладки: «Сервер», «Фоновое задание», «HTTP-сервис», «Web-сервис».
  5. Запустите клиент через Отладка → Начать отладку или зайдите в базу обычным клиентом.
  6. Поставьте точку останова в серверной процедуре и выполните действие, которое её вызывает.

Если всё настроено, в окне «Подключение» появится строка с предметом отладки «Сервер», а выполнение остановится на точке останова.

Отладка фоновых заданий и регламентных процедур

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

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

Когда нужен HTTP-протокол

HTTP-отладка (-debug -http) нужна, если вы отлаживаете веб-клиент, мобильный клиент или работаете через сеть, где закрыт широкий диапазон портов. В этом режиме конфигуратор поднимает сервер отладки dbgs (по умолчанию порт 1550), а рабочие процессы сами к нему подключаются. Из сервера 1С должен быть открыт путь до машины разработчика на этот порт.

Перед первой точкой останова на сервере
Выполнено: 0 / 6

Как проверить, что сервер работает в режиме отладки

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

Windows, в PowerShell от имени администратора:

Get-CimInstance Win32_Process -Filter "Name='ragent.exe'" | Select-Object CommandLine

Linux:

ps -ef | grep [r]agent

В выводе должен быть ключ -debug. Нет его — служба запущена со старыми параметрами. Чаще всего правку внесли, но службу не перезапустили.

Дальше проверьте, что порты слушаются:

netstat -ano | findstr ":1540 :1541 :1560"

На Linux то же самое делает ss -tlnp | grep -E '1540|1541|156'.

Если отладчик подключился, но точки останова не срабатывают, смотрите, где на самом деле выполняется код. Процедура с директивой &НаКлиенте выполняется на клиенте, и серверная отладка тут ни при чём. Точка останова в общем модуле с флажком «Вызов сервера» сработает только при подключённом предмете «Сервер».

Почему отладка на сервере 1С не подключается

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

Отдельный случай — несколько рабочих серверов в кластере. Ключ -debug нужно добавить на каждом сервере, где работают рабочие процессы. Иначе сеанс, попавший на сервер без отладки, отладчик не увидит.

Как вернуть сервер 1С в обычный режим после отладки

Закончили разбор — сразу выключайте отладку. Забытый -debug на рабочем сервере годами отъедает ресурсы и оставляет открытую возможность подключиться к коду.

  1. Снимите все точки останова в конфигураторе: Отладка → Список точек останова → удалить все.
  2. Отключите отладку в конфигураторе и закройте его.
  3. Уберите ключ -debug из строки запуска тем же способом, которым его добавляли: в ImagePath, через sc config, в /etc/sysconfig/srv1cv83 или удалите переопределение командой sudo systemctl revert <имя службы>.
  4. В согласованное окно перезапустите службу агента. Сеансы пользователей при этом снова оборвутся.
  5. Повторите проверку строки запуска процесса: ключа -debug в ней быть не должно.

Если запускали агент вручную из консоли (способ 3), достаточно закрыть окно и стартовать службу. Реестр вы не трогали, возвращать нечего.

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

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