Почему не работает отладка на сервере 1С под Linux и как её настроить?

Системный администратор 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Настройка отладки серверного кода в платформе «1С:Предприятие» — одна из наиболее частых проблем, с которыми сталкиваются разработчики и системные администраторы. Особенно остро этот вопрос встает при кроссплатформенной работе, когда сам сервер приложений 1С функционирует под управлением операционной системы семейства Linux (например, Debian), СУБД развернута там же или на отдельном сервере, а конфигуратор запускается на локальном компьютере или терминальном сервере под управлением Windows. В такой схеме стандартные механизмы отладки часто дают сбой: точки останова в серверных модулях попросту игнорируются, хотя внешне все параметры запуска выглядят корректно.

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

Выясняем причину: как устроен механизм отладки в 1С

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

  1. Отладка по протоколу TCP/IP (классическая). При использовании этого протокола устанавливается прямое двустороннее соединение между конфигуратором и рабочими процессами сервера.
  2. Отладка по протоколу HTTP. Это современный и более надежный способ (доступен начиная с версии 8.3.7), при котором взаимодействие происходит через специальный промежуточный сервер отладки (модуль dbgs).

В классической схеме TCP/IP кроется главная неочевидная проблема: соединение инициируется не только от клиента к серверу, но и в обратную сторону. Сервер приложений 1С (наш Debian) пытается установить входящее TCP-подключение к компьютеру разработчика (Windows), на котором запущен Конфигуратор. Для этого используется динамический диапазон портов (по умолчанию 1560:1591). Если на стороне Windows-клиента заблокированы входящие подключения по этим портам или клиент и сервер находятся в разных подсетях за NAT, отладка работать не будет, даже если флаг -debug успешно прописан в процессах сервера.

---

Шаг 1. Правильный запуск сервера 1С на Linux в режиме отладки

Прежде всего убедимся, что сервер 1С действительно запускается с необходимыми ключами отладки. Недостаточно просто дописать параметры в строку запуска вручную; необходимо правильно сконфигурировать демон (службу) операционной системы Linux.

Если сервер «1С:Предприятия» работает как демон в ОС Linux (Debian/Ubuntu), выполним следующие операции:

  1. Остановим службу сервера 1С: /etc/init.d/srv1cv83 stop Примечание: на современных дистрибутивах с systemd команда может выглядеть так: systemctl stop srv1cv83.
  2. Откроем конфигурационный файл службы. В зависимости от версии и дистрибутива, настройки демона находятся в файле /etc/default/srv1cv83 или /opt/1C/v8.3/i386/utils/srv1cv83.conf (путь может отличаться для x86_64 архитектуры).
  3. Найдем параметр SRV1CV8_DEBUG и установим его значение в 1: SRV1CV8_DEBUG=1
  4. Если требуется явно указать протокол отладки TCP, в некоторых версиях платформы может потребоваться передача дополнительных параметров. Для этого можно использовать переменную: SRV1CV8_DEBUG="-debug -tcp"
  5. Сохраним изменения в конфигурационном файле и запустим службу сервера: /etc/init.d/srv1cv83 start
  6. Проверим, что процессы сервера действительно запустились с флагом отладки. Для этого выполним в терминале Linux команду: ps ax | grep rphost В выводе команды мы должны увидеть процессы ragent, rmngr и rphost, в параметрах запуска которых в конце строки обязательно присутствует ключ -debug.

---

Шаг 2. Разрешение сетевого доступа и настройка брандмауэра

Если процессы сервера запущены с ключом отладки, но точки останова все равно не срабатывают, проанализируем сетевую доступность портов. Нам необходимо обеспечить беспрепятственное прохождение сетевых пакетов в обе стороны.

На стороне сервера Linux (Debian):

Убедимся, что порты отладки не блокируются локальным файрволом iptables или nftables. По умолчанию рабочие процессы используют порты главного сетевого диапазона. Нам необходимо открыть порты 1540, 1541, а также весь диапазон портов рабочих процессов (обычно это 1560:1591).

На стороне клиента (Windows):

Даже если брандмауэр Windows (Windows Firewall) выключен в панели управления, в системе могут продолжать действовать правила фильтрации трафика или политики безопасности (GPO). Более того, сторонние антивирусы со встроенными сетевыми экранами часто блокируют неинициализированные входящие соединения.

Для гарантированного решения проблемы на компьютере разработчика создадим явное входящее правило в брандмауэре Windows:

  1. Откроем «Монитор брандмауэра защитника Windows в режиме повышенной безопасности» (команда wf.msc).
  2. Перейдем в раздел «Правила для входящих подключений» и выберем «Создать правило».
  3. Укажем тип правила «Для порта», выберем протокол TCP и введем диапазон портов 1560-1591.
  4. Разрешим подключение для всех профилей сети и сохраним правило с понятным именем (например, «1C Debug Ports»).

---

Шаг 3. Идентичность строк подключения и учет регистра (Case Sensitivity)

Очень частая и неочевидная проблема при работе с серверами на базе Linux — это чувствительность операционной системы к регистру символов (Case Sensitivity).

Давайте проанализируем следующую ситуацию. В кластере 1С база данных зарегистрирована под именем Trade_DB. При настройке списка баз в окне запуска 1С на клиентском компьютере разработчик прописал строку соединения следующим образом: Srvr="srvdb2";Ref="trade_db";.

Поскольку Windows нечувствителен к регистру, клиент успешно запустится, и пользователь сможет работать. Однако отладчик 1С ориентируется на точное строковое совпадение параметров соединения. Для Linux-сервера Trade_DB и trade_db — это две абсолютно разные базы данных. Из-за этого несовпадения Конфигуратор не сможет сопоставить запущенный на сервере процесс с сессией отладки, и точки останова обрабатываться не будут.

Как решить эту проблему:

  1. Откроем Конфигуратор нашей информационной базы.
  2. В режиме предприятия или через отладочную консоль выполним функцию СтрокаСоединенияИнформационнойБазы(). Она вернет эталонную строку подключения, которую использует сервер.
  3. Сравним полученное значение со строкой, прописанной в свойствах подключения базы в окне запуска 1С. Они должны совпадать символ в символ, включая регистр букв.
  4. Также обратим внимание на имя сервера. Если на сервере прописано имя srvdb2, а в клиенте указан IP-адрес 192.168.1.10, это также может препятствовать установке связи для целей отладки. Используйте одинаковое представление имени сервера везде.

---

Шаг 4. Настройка разрешения имен (DNS и файл hosts)

Чтобы сервер 1С мог подключиться обратно к конфигуратору по протоколу TCP/IP, он должен уметь сопоставлять сетевое имя компьютера разработчика с его IP-адресом.

Если на сервере Debian не настроена служба разрешения имен (DNS) или в локальной сети отсутствует DNS-сервер, обслуживающий зону локальных рабочих станций, сервер 1С не сможет найти компьютер разработчика по его NetBIOS-имени.

Чтобы исключить эту проблему, выполним принудительное сопоставление имен в файле конфигурации хостов:

  1. На сервере Debian откроем файл /etc/hosts под учетной записью суперпользователя root.
  2. Добавим строку сопоставления IP-адреса компьютера разработчика и его сетевого имени: 192.168.1.150 developer-pc
  3. На Windows-компьютере разработчика откроем файл C:\Windows\System32\drivers\etc\hosts от имени Администратора и добавим сопоставление для сервера 1С: 192.168.1.10 srvdb2

После этого проверим доступность командой ping srvdb2 с клиента и ping developer-pc с сервера. Обмен пакетами должен проходить успешно по доменным именам.

---

Шаг 5. Переход на HTTP-отладку (Рекомендуемый способ)

Если сетевая инфраструктура вашей организации достаточно сложная (используются различные подсети, VPN-туннели, маршрутизаторы с технологией NAT), настроить классическую TCP-отладку бывает крайне трудно из-за невозможности пробросить обратные порты к клиенту. В этом случае наиболее эффективным решением будет переход на современный механизм отладки по протоколу HTTP.

При использовании HTTP-отладки все компоненты (сервер приложений, рабочий процесс, конфигуратор) общаются через выделенную службу отладки dbgs. При этом конфигуратор сам инициирует подключение к серверу отладки, и необходимость во входящих соединениях к компьютеру разработчика полностью отпадает.

Разберем по шагам, как настроить HTTP-отладку на сервере Debian:

  1. Остановим сервер 1С: /etc/init.d/srv1cv83 stop
  2. Откроем конфигурационный файл службы сервера 1С (например, /etc/default/srv1cv83).
  3. В параметрах отладки заменим стандартное значение на использование HTTP-протокола: SRV1CV8_DEBUG="-debug -http" Это указывает платформе на необходимость автоматического запуска локальной службы отладки dbgs на стандартном порту 1550.
  4. Запустим службу сервера 1С: /etc/init.d/srv1cv83 start
  5. Убедимся, что процесс сервера отладки успешно запущен, выполнив команду: ps ax | grep dbgs
  6. Откроем порт 1550 на сервере Debian для входящих подключений со стороны компьютеров разработчиков.

Теперь настроим параметры отладки в самом Конфигураторе на компьютере разработчика:

  1. Запустим Конфигуратор и перейдем в меню Сервис — Параметры.
  2. Откроем вкладку Отладка.
  3. В группе параметров «Протокол отладки» установим переключатель в положение HTTP.
  4. В поле «Адрес сервера отладки» укажем адрес нашего сервера 1С с указанием порта 1550, например: http://srvdb2:1550 (или укажем IP-адрес: http://192.168.1.10:1550).
  5. Нажмем кнопку «Применить» и перезапустим Конфигуратор.

---

Шаг 6. Настройка автоматического подключения предметов отладки

Иногда отладка не работает просто потому, что конфигуратор не «подцепил» серверные сеансы автоматически. Давайте проверим настройки подключения предметов отладки:

  1. В Конфигураторе выберем пункт меню Отладка — Подключение....
  2. В открывшемся окне обратим внимание на список «Доступные предметы отладки». Если там отображаются серверные сессии (например, фоновые задания или серверный контекст вашего сеанса клиента), но они находятся в верхней таблице, значит, автоматическое подключение для них не настроено.
  3. Нажмем кнопку Настройка автоматического подключения....
  4. Установим флажки напротив пунктов «Серверные процедуры в фоновом задании» и «Серверные процедуры в тонком/толстом клиенте».
  5. Нажмем «ОК» и закроем форму. Теперь при выполнении кода серверные процессы будут автоматически подключаться к нашему отладчику, и точки останова начнут корректно срабатывать.

Применяя данные последовательные шаги по диагностике и настройке конфигурационных файлов, сетевых интерфейсов и параметров самой платформы «1С:Предприятие», мы гарантированно сможем запустить стабильную отладку кода на сервере под управлением операционной системы Linux.

← На главную