Как включить отладку на сервере 1С:Предприятия 8.3 и подключить к ней конфигуратор
Содержание
Чтобы запустить сервер 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. Через редактор реестра
- Остановите службу:
Win + R→services.msc→ служба «1C:Enterprise 8.3 Server Agent (x86-64)» → «Остановить». - Откройте
regeditи перейдите вHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services. - Найдите раздел службы агента 1С (имя начинается с
1C:Enterprise 8.3 Server Agent). - Откройте параметр
ImagePathи допишьте послеragent.exe"ключ-debugчерез пробел. - Сохраните, закройте редактор и запустите службу.
Должно получиться так:
"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С
Сервер в режиме отладки сам ничего не отлаживает. Он лишь разрешает подключиться к своим рабочим процессам. Дальше работа идёт в конфигураторе.
- Откройте базу в конфигураторе под той же версией платформы, что и сервер.
- Проверьте протокол отладки в параметрах конфигуратора (
Сервис → Параметры, раздел отладки). Он должен совпадать с тем, что задан на сервере: TCP при-debug, HTTP при-debug -http. - Откройте меню
Отладка → Подключение. - Нажмите «Автоматическое подключение» и отметьте нужные предметы отладки: «Сервер», «Фоновое задание», «HTTP-сервис», «Web-сервис».
- Запустите клиент через
Отладка → Начать отладкуили зайдите в базу обычным клиентом. - Поставьте точку останова в серверной процедуре и выполните действие, которое её вызывает.
Если всё настроено, в окне «Подключение» появится строка с предметом отладки «Сервер», а выполнение остановится на точке останова.
Отладка фоновых заданий и регламентных процедур
Фоновые задания стартуют без участия пользователя, поэтому подключать их вручную неудобно. Флажок «Фоновое задание» в автоматическом подключении решает это: каждое новое задание базы сразу попадает под отладчик.
Для регламентного задания удобнее не ждать расписания. Запустите его вручную из обработки управления регламентными заданиями в пользовательском режиме, предварительно поставив точку останова.
Когда нужен HTTP-протокол
HTTP-отладка (-debug -http) нужна, если вы отлаживаете веб-клиент, мобильный клиент или работаете через сеть, где закрыт широкий диапазон портов. В этом режиме конфигуратор поднимает сервер отладки dbgs (по умолчанию порт 1550), а рабочие процессы сами к нему подключаются. Из сервера 1С должен быть открыт путь до машины разработчика на этот порт.
Как проверить, что сервер работает в режиме отладки
Не полагайтесь на то, что правка «должна была сработать». Проверьте фактическую строку запуска процесса.
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 на рабочем сервере годами отъедает ресурсы и оставляет открытую возможность подключиться к коду.
- Снимите все точки останова в конфигураторе:
Отладка → Список точек останова→ удалить все. - Отключите отладку в конфигураторе и закройте его.
- Уберите ключ
-debugиз строки запуска тем же способом, которым его добавляли: вImagePath, черезsc config, в/etc/sysconfig/srv1cv83или удалите переопределение командойsudo systemctl revert <имя службы>. - В согласованное окно перезапустите службу агента. Сеансы пользователей при этом снова оборвутся.
- Повторите проверку строки запуска процесса: ключа
-debugв ней быть не должно.
Если запускали агент вручную из консоли (способ 3), достаточно закрыть окно и стартовать службу. Реестр вы не трогали, возвращать нечего.