Почему не работает отладка серверных процедур в конкретной базе 1С и как это исправить

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

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

Разбор симптомов и первичная диагностика

Прежде чем приступать к сложным манипуляциям, проанализируем ситуацию. Если отладка работает на клиенте, но «пролетает» мимо серверных процедур, это означает, что механизм подключения предметов отладки (в данном случае rphost) не может корректно связаться с вашим Конфигуратором. Рассмотрим ключевые факторы, которые нужно проверить в первую очередь:

  1. Режим запуска службы сервера: Убедимся, что служба 1C:Enterprise 8.3 Server Agent запущена с ключом -debug. Без этого ключа серверная отладка не будет работать ни в одной базе.
  2. Настройки в Конфигураторе: Проверим, что в меню «Сервис — Параметры — Отладка» выбран правильный протокол (обычно это TCP/IP) и стоит флаг автоматического подключения серверных модулей.
  3. Видимость предметов отладки: Откроем окно «Отладка — Подключение — Предметы отладки». Если серверный сеанс там виден, но отладка не срабатывает, проблема кроется в особенностях взаимодействия процессов.

Решение 1: Обход бага платформы (ручное переподключение)

Начиная с версии платформы 8.3.10 и вплоть до некоторых релизов ветки 8.3.13, наблюдается специфический глюк. Суть его в том, что автоматическое подключение предметов отладки для серверных вызовов срабатывает некорректно при первом запуске сеанса. Проанализируем алгоритм действий для этого случая:

Если вы столкнулись с тем, что отладка «оживает» только после определенных манипуляций, выполните следующие шаги:

  1. Запустите базу в режиме отладки из Конфигуратора.
  2. Перейдите в меню Отладка — Подключение.
  3. В списке подключенных предметов найдите ваш серверный сеанс, выделите его и нажмите Отключить.
  4. Затем в этом же окне в списке доступных предметов снова выделите сервер и нажмите Подключить.

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

Решение 2: Переход на протокол HTTP

Рассмотрим более современный и стабильный способ — отладку по протоколу HTTP. В отличие от TCP/IP, где сервер сам пытается инициировать соединение с Конфигуратором (что часто блокируется брандмауэрами или сетевыми экранами), протокол HTTP работает иначе. В этом режиме Конфигуратор выступает в роли активного узла, что снимает 90% проблем с сетевой видимостью.

Разберем, как перевести сервер на HTTP-отладку без использования веб-сервера (IIS или Apache):

  1. Остановим службу сервера 1С.
  2. В реестре или в параметрах запуска службы заменим ключ -debug на -http.
  3. Запустим службу.
  4. В Конфигураторе в настройках отладки выберем Отладка по протоколу HTTP. В поле адрес отладчика укажем адрес сервера отладки (обычно это адрес вашего сервера приложений и порт 1560).

Важно: При использовании HTTP-отладки возможности отладчика расширяются, например, становится проще отлаживать фоновые задания, запущенные на разных рабочих процессах.

Решение 3: Глубокая очистка серверного кэша

Иногда проблема локализуется в одной базе из-за «мусора» в серверных метаданных. Удаление базы из списка консоли администрирования и повторное добавление не всегда полностью вычищает файлы на диске. Проанализируем процесс полной очистки:

Выясним расположение папки с данными сервера. Обычно это C:\Program Files\1cv8\srvinfo. Внутри находятся папки с GUID баз. Чтобы решить проблему, выполним следующие шаги:

  1. Остановим службу сервера 1С (это обязательно, иначе файлы будут заблокированы процессом rmngr).
  2. Найдем папку snccntx внутри директории нужной информационной базы.
  3. Удалим содержимое папок snccntx и reg_1541 (кроме конфигурационных файлов).
  4. Запустим службу сервера.

Это заставит сервер заново перестроить карту скомпилированных модулей для отладки, что часто исправляет «избирательную» неработоспособность точек останова.

Решение 4: Проверка сетевых имен и IPv6

Посмотрим на ситуацию со стороны сетевого взаимодействия. Механизм TCP-отладки чувствителен к разрешению имен (DNS). Если сервер видит ваш компьютер под одним именем (или IP), а Конфигуратор сообщает серверу другое, соединение не установится.

Проанализируем файл hosts на сервере и на рабочей станции разработчика. Рекомендуется жестко прописать соответствие IP-адреса и имени сервера. Также крайне важно проверить настройки протокола IPv6. В некоторых случаях 1С пытается передать параметры отладки через адрес ::1, который не прослушивается службой отладки. Попробуем временно отключить IPv6 в свойствах сетевого адаптера на обеих сторонах.

Решение 5: Работа с расширениями и фоновыми заданиями

Если в вашей проблемной базе активно используются расширения конфигурации, это может вносить дополнительные сложности. Модули расширений компилируются сервером отдельно, и отладчик иногда теряет связь между исходным кодом в Конфигураторе и исполняемым кодом в памяти rphost.

Рассмотрим вариант временного отключения расширений:

  1. Снимите флаги активности со всех расширений в базе.
  2. Перезапустите сеанс и проверьте работу отладки в основной конфигурации.
  3. Если отладка заработала — подключайте расширения по одному, чтобы найти проблемное.

Для отладки фоновых заданий также важно, чтобы строка соединения в Конфигураторе и в параметрах базы на сервере совпадала до символа. Любое различие (например, использование IP вместо имени сервера) может привести к тому, что фоновое задание не будет «подцеплено» отладчиком. Используйте метод ЖдатьЗавершение или аналогичные приемы для отладки фоновых процессов в файловом режиме для локализации ошибок в самом коде.

Использование файла debugcfg.xml для тонкой настройки

В сложных случаях, когда стандартные диалоги не помогают, можно принудительно задать параметры отладки через файл конфигурации. Создадим текстовый файл debugcfg.xml в каталоге bin\conf сервера 1С.

Разберем пример содержания этого файла:


<config xmlns="http://v8.1c.ru/7.4/config/debugconfig">
    <debugProtocol>tcp</debugProtocol>
    <address>192.168.1.100</address>
</config>

В этом примере мы жестко указываем протокол и IP-адрес, который сервер должен использовать для поиска отладчика. Это помогает в сетях с несколькими сетевыми интерфейсами или сложной маршрутизацией.

Подводя итог, можно сказать: если отладка не работает в одной базе при работающих остальных — в 90% случаев это либо кэш конкретной базы на сервере, либо баг платформы, требующий ручного переподключения предметов отладки. Переход на HTTP-протокол является наиболее долгосрочным и надежным решением, избавляющим от большинства перечисленных проблем.

← На главную