Отладка по HTTP в 1С 8.3: включаем dbgs и подключаем конфигуратор

· 10 мин

Содержание

Сервер отладки 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

  1. Откройте services.msc и найдите службу агента сервера 1С:Предприятия 8.3. Имя обычно начинается с «Агент сервера 1С:Предприятия 8.3».
  2. В свойствах службы посмотрите «Исполняемый файл». Это строка запуска ragent.exe.
  3. Остановите службу. Предупредите пользователей заранее.
  4. Откройте regedit и перейдите в HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\. Найдите раздел службы, имя совпадает с «Именем службы» на вкладке «Общие».
  5. В параметре ImagePath добавьте ключи -debug -http после пути к ragent.exe.
  6. Запустите службу.

Строка запуска до и после:

:: было
"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 занят.

  1. Откройте командную строку и перейдите в каталог платформы:
cd "C:\Program Files\1cv8\8.3.24.1467\bin"
  1. Посмотрите список параметров своей версии:
dbgs.exe --help
  1. Запустите сервер отладки на нужном адресе и порту:
dbgs.exe --addr=192.168.1.20 --port=1555
  1. Не закрывайте окно. Пока процесс работает, сервер отладки доступен. Закрыли окно — сервер остановился.

Адрес 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

  1. В конфигураторе откройте Сервис → Параметры, вкладку «Отладка».
  2. Выберите отладку по протоколу HTTP.
  3. Укажите адрес сервера отладки. Для файловой базы на своём компьютере достаточно варианта по умолчанию: конфигуратор запустит локальный dbgs.exe сам. Для удалённого сервера впишите адрес вида http://192.168.1.20:1550.
  4. Нажмите «ОК».

Шаг 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 — адрес сервера отладки. Те же ключи можно вписать в дополнительные параметры запуска базы в окне выбора баз.

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

Ошибки при запуске и подключении отладчика 1С

Ошибки отладки почти всегда сводятся к одному из трёх: сервер отладки не запущен, до него не доходит сеть, или стороны говорят на разных протоколах.

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

Ещё одна частая причина — смешение протоколов. Если кластер запущен с -debug -tcp или просто -debug в старой версии, а конфигуратор настроен на HTTP, стороны друг друга не увидят. Ключи в строке агента и выбор в параметрах конфигуратора должны совпадать.

Безопасность и остановка сервера отладки

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

Правила, которые стоит соблюдать:

  • 🔒 Не держите ключ -debug в строке запуска рабочего кластера постоянно. Включили для поиска ошибки — выключили после.
  • 🧱 Порт сервера отладки открывайте только для адресов разработчиков, а не для всей сети.
  • 🧪 По возможности отлаживайте копию базы на тестовом сервере.
  • 👥 Не подключайте автоматически предметы типа «Сервер» на рабочей базе в часы работы пользователей.

Как остановить отладку

Что запущеноКак остановить
Сеанс отладки в конфигуратореОтладка → Завершить отладку или Shift+F5
Ручной dbgs.exeЗакрыть окно командной строки или Ctrl+C в нём
Сервер отладки кластераУбрать -debug -http из ImagePath и перезапустить службу агента

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

Завершать процесс dbgs.exe кластера через диспетчер задач не стоит: агент его перезапустит или кластер начнёт сообщать об ошибках подключения отладки. Чистый путь — убрать ключ из строки запуска.

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

Нужен ли сервер отладки для файловой базы?
Нужен, но запускать его руками не придётся. При отладке по HTTP конфигуратор сам поднимает локальный dbgs.exe, когда вы нажимаете F5.
Можно ли отлаживать базу из EDT через тот же сервер отладки?
Да. 1C:Enterprise Development Tools работает только с отладкой по HTTP и подключается к тому же серверу отладки по адресу и порту.
Как понять, на каком порту работает сервер отладки кластера?
Найдите PID процесса dbgs.exe в диспетчере задач и выполните netstat -ano. Строка с этим PID и статусом LISTENING покажет порт.
Влияет ли включённая отладка на скорость работы пользователей?
Сам ключ -debug нагрузку почти не добавляет. Тормозят сеансы, подключённые к отладчику, особенно когда стоят точки останова в часто вызываемом серверном коде.
Можно ли отлаживать одну базу двум разработчикам одновременно?
Можно, если каждый подключает свои предметы отладки. Но один и тот же сеанс в один момент подключён только к одному отладчику.