Настройка отладки серверного кода в платформе «1С:Предприятие» — одна из наиболее частых проблем, с которыми сталкиваются разработчики и системные администраторы. Особенно остро этот вопрос встает при кроссплатформенной работе, когда сам сервер приложений 1С функционирует под управлением операционной системы семейства Linux (например, Debian), СУБД развернута там же или на отдельном сервере, а конфигуратор запускается на локальном компьютере или терминальном сервере под управлением Windows. В такой схеме стандартные механизмы отладки часто дают сбой: точки останова в серверных модулях попросту игнорируются, хотя внешне все параметры запуска выглядят корректно.
В этой статье мы подробно разберем, почему возникает эта проблема, проанализируем внутренние механизмы взаимодействия отладчика 1С и предложим пошаговые инструкции по их настройке и устранению неполадок.
Для того чтобы эффективно устранить проблему, давайте разберемся, как конфигуратор взаимодействует с рабочими процессами сервера. Платформа 1С поддерживает два протокола отладки:
dbgs).В классической схеме TCP/IP кроется главная неочевидная проблема: соединение инициируется не только от клиента к серверу, но и в обратную сторону. Сервер приложений 1С (наш Debian) пытается установить входящее TCP-подключение к компьютеру разработчика (Windows), на котором запущен Конфигуратор. Для этого используется динамический диапазон портов (по умолчанию 1560:1591). Если на стороне Windows-клиента заблокированы входящие подключения по этим портам или клиент и сервер находятся в разных подсетях за NAT, отладка работать не будет, даже если флаг -debug успешно прописан в процессах сервера.
---
Прежде всего убедимся, что сервер 1С действительно запускается с необходимыми ключами отладки. Недостаточно просто дописать параметры в строку запуска вручную; необходимо правильно сконфигурировать демон (службу) операционной системы Linux.
Если сервер «1С:Предприятия» работает как демон в ОС Linux (Debian/Ubuntu), выполним следующие операции:
/etc/init.d/srv1cv83 stop
Примечание: на современных дистрибутивах с systemd команда может выглядеть так: systemctl stop srv1cv83.
/etc/default/srv1cv83 или /opt/1C/v8.3/i386/utils/srv1cv83.conf (путь может отличаться для x86_64 архитектуры).SRV1CV8_DEBUG и установим его значение в 1:
SRV1CV8_DEBUG=1
SRV1CV8_DEBUG="-debug -tcp"
/etc/init.d/srv1cv83 start
ps ax | grep rphost
В выводе команды мы должны увидеть процессы ragent, rmngr и rphost, в параметрах запуска которых в конце строки обязательно присутствует ключ -debug.
---
Если процессы сервера запущены с ключом отладки, но точки останова все равно не срабатывают, проанализируем сетевую доступность портов. Нам необходимо обеспечить беспрепятственное прохождение сетевых пакетов в обе стороны.
На стороне сервера Linux (Debian):
Убедимся, что порты отладки не блокируются локальным файрволом iptables или nftables. По умолчанию рабочие процессы используют порты главного сетевого диапазона. Нам необходимо открыть порты 1540, 1541, а также весь диапазон портов рабочих процессов (обычно это 1560:1591).
На стороне клиента (Windows):
Даже если брандмауэр Windows (Windows Firewall) выключен в панели управления, в системе могут продолжать действовать правила фильтрации трафика или политики безопасности (GPO). Более того, сторонние антивирусы со встроенными сетевыми экранами часто блокируют неинициализированные входящие соединения.
Для гарантированного решения проблемы на компьютере разработчика создадим явное входящее правило в брандмауэре Windows:
wf.msc).1560-1591.---
Очень частая и неочевидная проблема при работе с серверами на базе Linux — это чувствительность операционной системы к регистру символов (Case Sensitivity).
Давайте проанализируем следующую ситуацию. В кластере 1С база данных зарегистрирована под именем Trade_DB. При настройке списка баз в окне запуска 1С на клиентском компьютере разработчик прописал строку соединения следующим образом: Srvr="srvdb2";Ref="trade_db";.
Поскольку Windows нечувствителен к регистру, клиент успешно запустится, и пользователь сможет работать. Однако отладчик 1С ориентируется на точное строковое совпадение параметров соединения. Для Linux-сервера Trade_DB и trade_db — это две абсолютно разные базы данных. Из-за этого несовпадения Конфигуратор не сможет сопоставить запущенный на сервере процесс с сессией отладки, и точки останова обрабатываться не будут.
Как решить эту проблему:
СтрокаСоединенияИнформационнойБазы(). Она вернет эталонную строку подключения, которую использует сервер.srvdb2, а в клиенте указан IP-адрес 192.168.1.10, это также может препятствовать установке связи для целей отладки. Используйте одинаковое представление имени сервера везде.---
Чтобы сервер 1С мог подключиться обратно к конфигуратору по протоколу TCP/IP, он должен уметь сопоставлять сетевое имя компьютера разработчика с его IP-адресом.
Если на сервере Debian не настроена служба разрешения имен (DNS) или в локальной сети отсутствует DNS-сервер, обслуживающий зону локальных рабочих станций, сервер 1С не сможет найти компьютер разработчика по его NetBIOS-имени.
Чтобы исключить эту проблему, выполним принудительное сопоставление имен в файле конфигурации хостов:
/etc/hosts под учетной записью суперпользователя root.
192.168.1.150 developer-pc
C:\Windows\System32\drivers\etc\hosts от имени Администратора и добавим сопоставление для сервера 1С:
192.168.1.10 srvdb2
После этого проверим доступность командой ping srvdb2 с клиента и ping developer-pc с сервера. Обмен пакетами должен проходить успешно по доменным именам.
---
Если сетевая инфраструктура вашей организации достаточно сложная (используются различные подсети, VPN-туннели, маршрутизаторы с технологией NAT), настроить классическую TCP-отладку бывает крайне трудно из-за невозможности пробросить обратные порты к клиенту. В этом случае наиболее эффективным решением будет переход на современный механизм отладки по протоколу HTTP.
При использовании HTTP-отладки все компоненты (сервер приложений, рабочий процесс, конфигуратор) общаются через выделенную службу отладки dbgs. При этом конфигуратор сам инициирует подключение к серверу отладки, и необходимость во входящих соединениях к компьютеру разработчика полностью отпадает.
Разберем по шагам, как настроить HTTP-отладку на сервере Debian:
/etc/init.d/srv1cv83 stop
/etc/default/srv1cv83).
SRV1CV8_DEBUG="-debug -http"
Это указывает платформе на необходимость автоматического запуска локальной службы отладки dbgs на стандартном порту 1550.
/etc/init.d/srv1cv83 start
ps ax | grep dbgs
1550 на сервере Debian для входящих подключений со стороны компьютеров разработчиков.Теперь настроим параметры отладки в самом Конфигураторе на компьютере разработчика:
http://srvdb2:1550 (или укажем IP-адрес: http://192.168.1.10:1550).---
Иногда отладка не работает просто потому, что конфигуратор не «подцепил» серверные сеансы автоматически. Давайте проверим настройки подключения предметов отладки:
Применяя данные последовательные шаги по диагностике и настройке конфигурационных файлов, сетевых интерфейсов и параметров самой платформы «1С:Предприятие», мы гарантированно сможем запустить стабильную отладку кода на сервере под управлением операционной системы Linux.