Отладка по HTTP в 1С 8.3: включаем dbgs и подключаем конфигуратор
Содержание
Сервер отладки 1С — это процесс dbgs.exe из каталога bin платформы. Для файловой базы его вручную запускать не нужно: конфигуратор поднимает его сам, когда вы нажимаете F5 при включённой отладке по HTTP. Для клиент-серверной базы нужно другое: добавить в строку запуска агента сервера ragent.exe ключи -debug -http и перезапустить службу, после чего сервер отладки стартует вместе с кластером. По умолчанию он слушает порт 1550.
Третий вариант — запустить dbgs.exe вручную на нужном адресе и порту. Он нужен, когда отлаживаете базу на другой машине, когда порт 1550 занят или когда хотите один сервер отладки на несколько разработчиков. Ниже — все три сценария, проверка порта, настройка конфигуратора и разбор ошибок.
Что подготовить перед запуском отладки
Отладка по протоколу HTTP появилась в платформе 8.3.7 и для 8.3 стала основной. Старый протокол TCP ещё работает, но с ним нельзя отлаживать мобильные приложения, а часть предметов отладки подключается хуже. Дальше речь только про HTTP.
Проверьте до начала:
- 🧩 Версии совпадают. Конфигуратор, сервер отладки и платформа, на которой работает база, должны быть одной версии.
dbgs.exeберите из каталогаbinтой же сборки, напримерC:\Program Files\1cv8\8.3.24.1467\bin\. - 🔑 Права в базе. Чтобы открыть конфигуратор , у пользователя должна быть роль с правом «Администрирование» или «Конфигуратор» (в типовых — «Полные права»).
- 🖥️ Права в Windows. Чтобы изменить строку запуска службы агента, нужен локальный администратор сервера 1С. Для ручного запуска
dbgs.exeна своём компьютере права администратора не нужны. - 🌐 Сеть. Если сервер отладки и конфигуратор на разных машинах, порт сервера отладки должен быть открыт во входящих правилах брандмауэра.
- 🗂️ Копия базы. Отладку удобнее вести на копии. На рабочей базе точка останова в общем модуле остановит не только ваш сеанс, но и сеансы пользователей, если отладчик к ним подключён.
Для клиент-серверной базы проще всего развернуть отдельный тестовый кластер с копией базы. Тогда перезапуск службы и включённый режим отладки никому не мешают.
Какой способ выбрать
| Сценарий | Как запускается сервер отладки | Что нужно сделать |
|---|---|---|
| Файловая база на вашем компьютере | Конфигуратор запускает dbgs.exe сам | Включить отладку по HTTP в параметрах конфигуратора |
| Клиент-серверная база | Агент кластера ragent.exe с ключами -debug -http | Изменить строку запуска службы и перезапустить её |
| Удалённая файловая база или общий сервер отладки | Ручной запуск dbgs.exe | Запустить процесс с адресом и портом, открыть порт |
Запуск сервера отладки 1С на кластере: ключи ragent
На сервере 1С предметы отладки (серверные вызовы, фоновые задания, HTTP-сервисы) создаёт кластер. Поэтому отладку разрешают в самом агенте: без ключа -debug кластер не отдаёт свои процессы отладчику, даже если всё остальное настроено верно.
Перезапуск службы агента обрывает все сеансы пользователей на этом сервере. Делайте его вне рабочего времени или на тестовом кластере.
Windows
- Откройте
services.mscи найдите службу агента сервера 1С:Предприятия 8.3. Имя обычно начинается с «Агент сервера 1С:Предприятия 8.3». - В свойствах службы посмотрите «Исполняемый файл». Это строка запуска
ragent.exe. - Остановите службу. Предупредите пользователей заранее.
- Откройте
regeditи перейдите вHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\. Найдите раздел службы, имя совпадает с «Именем службы» на вкладке «Общие». - В параметре
ImagePathдобавьте ключи-debug -httpпосле пути кragent.exe. - Запустите службу.
Строка запуска до и после:
:: было
"C:\Program Files\1cv8\8.3.24.1467\bin\ragent.exe" -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -d "C:\Program Files\1cv8\srvinfo"
:: стало
"C:\Program Files\1cv8\8.3.24.1467\bin\ragent.exe" -debug -http -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -d "C:\Program Files\1cv8\srvinfo"
Тот же результат даёт команда sc config, но в ней легко ошибиться с кавычками. Через реестр надёжнее: видно всю строку целиком.
Не меняйте в строке порты -port, -regport, -range и каталог -d. Ошибка в них приведёт к тому, что кластер не поднимется или поднимется «пустым», без зарегистрированных баз.
После старта службы в диспетчере задач должен появиться процесс dbgs.exe. Его запускает сам агент, вручную трогать не нужно.
Linux
На Linux ключи те же: -debug -http дописываются в строку запуска ragent. Где лежит эта строка, зависит от способа установки. В старых сборках с init-скриптом отладку включали переменной SRV1CV8_DEBUG=1 в файле /etc/sysconfig/srv1cv83. В новых сборках с systemd ключи добавляют в команду запуска в unit-файле службы, затем выполняют systemctl daemon-reload и перезапуск службы.
Ручной запуск dbgs.exe из командной строки
Ручной запуск нужен в двух случаях. Первый — файловая база лежит на другой машине, и отлаживать её нужно оттуда. Второй — вы хотите поднять сервер
отладки на нестандартном порту, потому что 1550 занят.
- Откройте командную строку и перейдите в каталог платформы:
cd "C:\Program Files\1cv8\8.3.24.1467\bin"
- Посмотрите список параметров своей версии:
dbgs.exe --help
- Запустите сервер отладки на нужном адресе и порту:
dbgs.exe --addr=192.168.1.20 --port=1555
- Не закрывайте окно. Пока процесс работает, сервер отладки доступен. Закрыли окно — сервер остановился.
Адрес localhost разрешит подключения только с этой же машины. Чтобы подключались с других компьютеров, укажите IP сетевого интерфейса.
Если запускаете dbgs.exe регулярно, положите команду в bat-файл на рабочий стол. Так не придётся каждый раз вспоминать каталог платформы и номер порта.
Как проверить, что сервер отладки слушает порт
На машине с сервером отладки:
netstat -ano | findstr :1550
Строка со статусом LISTENING значит, что порт занят процессом. Последнее число в строке — PID; сверьте его с PID процесса dbgs.exe в диспетчере задач.
С компьютера разработчика:
Test-NetConnection 192.168.1.20 -Port 1550
TcpTestSucceeded : True — порт доступен по сети. False — мешает брандмауэр, неверный адрес или сервер отладки не запущен.
Порт и адрес сервера отладки: настройка подключения
Сервер отладки — посредник. К нему подключаются две стороны: отладчик (конфигуратор или EDT) и предметы отладки (клиентские сеансы, серверные процессы). Поэтому адрес сервера отладки должен быть одинаково доступен и тем и другим.
| Параметр | Значение по умолчанию | Когда менять |
|---|---|---|
| Порт | 1550 | Порт занят другим процессом или вторым сервером отладки |
| Адрес | локальный | Конфигуратор и сервер отладки на разных машинах |
| Протокол | HTTP | Не меняйте без причины; TCP оставлен для совместимости |
На одной машине можно держать несколько серверов отладки, если у каждого свой порт. Так делают, когда на одном сервере работают два кластера разных версий платформы.
Брандмауэр Windows
Чтобы разработчики подключались по сети, создайте входящее правило для порта:
New-NetFirewallRule -DisplayName "1C debug server" -Direction Inbound -Protocol TCP -LocalPort 1550 -Action Allow -RemoteAddress 192.168.1.0/24
Параметр -RemoteAddress ограничивает круг адресов. Не открывайте порт для всей сети и тем более для интернета.
Подключение конфигуратора к серверу отладки
Сервер отладки запущен. Теперь нужно сказать конфигуратору, куда подключаться и какие предметы отладки брать.
Шаг 1. Включить отладку по HTTP
- В конфигураторе откройте
Сервис → Параметры, вкладку «Отладка». - Выберите отладку по протоколу HTTP.
- Укажите адрес сервера отладки. Для файловой базы на своём компьютере достаточно варианта по умолчанию: конфигуратор запустит локальный
dbgs.exeсам. Для удалённого сервера впишите адрес видаhttp://192.168.1.20:1550. - Нажмите «ОК».
Шаг 2. Запустить отладку
F5илиОтладка → Начать отладку— конфигуратор запустит клиент 1С:Предприятия и сразу подключит его к сеансу отладки.Отладка → Подключение— окно со списком доступных предметов отладки. Отсюда подключают уже работающие сеансы.
Шаг 3. Настроить автоматическое подключение серверных предметов
Чтобы отладчик останавливался в серверном коде, фоновых заданиях и HTTP-сервисах, их нужно подключить. В окне Отладка → Подключение откройте настройку автоматического подключения и отметьте нужные типы предметов: сервер, фоновое задание, веб-сервис, HTTP-сервис. После этого новые предметы этих типов будут подключаться сами.
Если отметить «Сервер» на рабочем кластере, точка останова в общем серверном модуле поймает вызовы других пользователей. Их сеансы зависнут, пока вы не продолжите выполнение.
Подключение клиента из командной строки
Сеанс пользователя можно сразу отправить на нужный сервер отладки. Это полезно, когда ошибка воспроизводится только у конкретного сотрудника:
"C:\Program Files\1cv8\8.3.24.1467\bin\1cv8c.exe" ENTERPRISE /S"srv1c\buh" /DEBUG -http -attach /DEBUGGERURL "http://192.168.1.20:1550"
Ключ /DEBUG включает режим отладки, -http задаёт протокол, /DEBUGGERURL — адрес сервера отладки. Те же ключи можно вписать в дополнительные параметры запуска базы в окне выбора баз.
Ошибки при запуске и подключении отладчика 1С
Ошибки отладки почти всегда сводятся к одному из трёх: сервер отладки не запущен, до него не доходит сеть, или стороны говорят на разных протоколах.
Ещё одна частая причина — смешение протоколов. Если кластер запущен с -debug -tcp или просто -debug в старой версии, а конфигуратор настроен на HTTP, стороны друг друга не увидят. Ключи в строке агента и выбор в параметрах конфигуратора должны совпадать.
Безопасность и остановка сервера отладки
Отладчик даёт много власти. Через окно вычисления выражений можно выполнить код на сервере в контексте чужого сеанса и прочитать любые данные, доступные этому сеансу. Поэтому открытый сервер отладки на рабочем кластере — дыра.
Правила, которые стоит соблюдать:
- 🔒 Не держите ключ
-debugв строке запуска рабочего кластера постоянно. Включили для поиска ошибки — выключили после. - 🧱 Порт сервера отладки открывайте только для адресов разработчиков, а не для всей сети.
- 🧪 По возможности отлаживайте копию базы на тестовом сервере.
- 👥 Не подключайте автоматически предметы типа «Сервер» на рабочей базе в часы работы пользователей.
Как остановить отладку
| Что запущено | Как остановить |
|---|---|
| Сеанс отладки в конфигураторе | Отладка → Завершить отладку или Shift+F5 |
Ручной dbgs.exe | Закрыть окно командной строки или Ctrl+C в нём |
| Сервер отладки кластера | Убрать -debug -http из ImagePath и перезапустить службу агента |
Перезапуск службы после удаления ключей снова оборвёт сеансы пользователей. Планируйте его на то же окно обслуживания.
Завершать процесс dbgs.exe кластера через диспетчер задач не стоит: агент его перезапустит или кластер начнёт сообщать об ошибках подключения отладки. Чистый путь — убрать ключ из строки запуска.