В процессе разработки на платформе 1С:Предприятие 8.3 (особенно на версиях линейки 8.3.17) программисты часто сталкиваются с неприятной ситуацией: точки останова в серверных процедурах и функциях срабатывают через раз или не срабатывают вовсе. При этом отладка клиентского кода может работать безупречно. Это создает серьезные трудности при поиске ошибок в сложной бизнес-логике, выполняемой на стороне сервера.
В этой статье мы подробно разберем причины такого поведения платформы и составим пошаговый план настройки окружения для стабильной работы отладчика. Рассмотрим как базовые настройки параметров запуска сервера, так и более тонкие нюансы, связанные с сетевыми протоколами и особенностями авторизации.
Прежде всего, проанализируем фундаментальное условие работы серверной отладки. Если сервер запущен без специального ключа, точки останова на сервере не будут работать в принципе. Однако, если они работают "через раз", это может свидетельствовать о неправильной конфигурации этого ключа или конфликтах при подключении.
Для включения возможности отладки в реестре Windows (для службы 1C:Enterprise 8.3 Server Agent) в строке запуска должен присутствовать параметр -debug. Рассмотрим, как это выглядит в строке запуска:
"C:\Program Files\1cv8\8.3.17.XXXX\bin\ragent.exe" -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -d "C:\Program Files\1cv8\srvinfo" -debug
Если вы используете современные версии платформы, крайне рекомендуется рассмотреть переход на HTTP-отладку. Она работает стабильнее в сложных сетях. Для этого вместо ключа -debug используется ключ -http. Это позволяет отладчику взаимодействовать с сервером через протокол HTTP, что снимает многие проблемы, связанные с блокировкой портов TCP.
Выясним причину, по которой отладка может срабатывать нестабильно. Одной из частых проблем является ограниченный диапазон портов. Когда мы запускаем отладку, каждый сеанс требует выделения свободного порта из заданного диапазона (по умолчанию это 1560:1591).
Проанализируем ситуацию: если на сервере работает много разработчиков или запущено множество фоновых заданий, которые также пытаются инициализировать отладочные соединения, свободные порты могут закончиться. В этом случае новый сеанс отладки просто не сможет "зацепиться" за серверный процесс. Рекомендуется расширить диапазон портов в настройках службы сервера, например, до 1560:1691, чтобы обеспечить достаточный запас для всех соединений.
Рассмотрим действия со стороны клиента. Иногда точка останова не срабатывает из-за того, что конфигуратор не "подхватил" нужный серверный процесс (rphost). Это часто происходит в кластерах с несколькими рабочими процессами.
Разберем по шагам, как настроить автоматическое подключение:
F5.Если проблема сохраняется, попробуйте вручную отключиться от всех предметов отладки в этом же окне и подключиться к ним заново. В некоторых версиях платформы 8.3.17 наблюдался баг, когда автоматическое переподключение "зависало".
Проанализируем сетевые аспекты. Платформа 1С иногда некорректно обрабатывает разрешение имен при включенном протоколе IPv6. Отладчик может пытаться подключиться к серверу по адресу IPv6, в то время как сервер ожидает соединение по IPv4 (или наоборот).
Для обеспечения стабильности рекомендуется отключить IPv6 в настройках сетевого адаптера как на стороне сервера, так и на стороне клиента. Также полезно проверить файл hosts на наличие записей, которые могут дублировать соответствие имени сервера разным IP-адресам. Убедитесь, что сервер и клиент однозначно "видят" друг друга по именам.
Посмотрим на ситуацию с точки зрения прав доступа и сеансов. Существует зафиксированная практика, когда при использовании доменной авторизации (Active Directory) отладка серверного кода работает нестабильно. Попробуйте создать в информационной базе пользователя с авторизацией по логину и паролю 1С и запустить конфигуратор от его имени. Часто это решает проблему "невидимости" серверных процессов.
Не забудем и про классический метод — очистку кеша. На стороне клиента некорректные данные в локальном кеше могут приводить к тому, что конфигуратор использует устаревшую версию метаданных и "не попадает" в нужные строки кода на сервере. Очистите папку %AppData%\1C\1cv8 и повторите попытку.
Разберем еще один сложный момент. Если в кластере 1С настроено несколько процессов rphost, ваш пользовательский сеанс может исполняться в одном процессе, а конфигуратор будет пытаться отлаживать другой. Хотя автоматическое подключение должно решать эту проблему, на практике это не всегда работает идеально.
В качестве временной меры для стабильной отладки можно настроить сервер 1С так, чтобы в рабочем сервере был разрешен только один рабочий процесс. Это гарантирует, что и ваш сеанс приложения, и конфигуратор будут работать в рамках одного и того же процесса rphost, что сводит вероятность потери связи к минимуму.
Подводя итог, для стабильной отладки в 17-й платформе необходимо обеспечить наличие ключа -debug (или -http), достаточный диапазон свободных портов, корректные настройки автоматического подключения и отсутствие сетевых коллизий, вызванных IPv6 или сложностями доменной авторизации.