В процессе разработки на платформе 1С:Предприятие 8.3 программисты часто сталкиваются с ситуацией, когда механизмы отладки ведут себя нестабильно. Особенно остро эта проблема проявляется при работе в терминальном режиме с большим количеством информационных баз, развернутых на клиент-серверном варианте. Типичный симптом: в Конфигураторе видны подключенные предметы отладки (и клиентское приложение, и сервер), однако точка останова, установленная в серверном модуле, упорно игнорируется системой. При этом на одной базе отладка может работать безупречно, а на соседней — полностью отсутствовать.
В данной статье мы подробно разберем, почему «отваливается» серверная отладка, и рассмотрим пошаговые инструкции по восстановлению работоспособности этого важного инструмента разработчика.
Проанализируем наиболее простое и эффективное решение, которое часто помогает в случаях, когда связь между Конфигуратором и рабочим процессом сервера rphost была нарушена или инициализирована некорректно. Иногда Конфигуратор «думает», что он подключен к серверу, но фактической передачи отладочной информации не происходит.
Разберем алгоритм действий:
Как показывает практика, такая «встряска» механизмов подключения позволяет заново инициализировать отладочный канал, и точки останова начинают срабатывать мгновенно.
Выясним еще одну распространенную причину. Часто серверный код выполняется не в основном сеансе пользователя, а инициируется через ФоновыеЗадания. По умолчанию Конфигуратор не «подхватывает» новые фоновые задания, которые создаются сервером в процессе работы.
Посмотрим на настройки, которые необходимо проверить:
Без этой настройки любая процедура, вызванная через ФоновыеЗадания.Выполнить(), будет проходить мимо отладчика, даже если точка останова стоит в правильном месте.
Начиная с версии платформы 8.3.7, компания 1С представила новый протокол отладки на основе HTTP. Если на сервере часть баз работает на старом протоколе (TCP/IP), а часть — на новом, или если настройки протоколов в Конфигураторе и на сервере различаются, отладка работать не будет.
Проанализируем ситуацию с портами. При использовании классического протокола TCP/IP сервер 1С динамически выделяет порты из диапазона 1560–1591. Если на сервере запущено более 20-30 информационных баз или работает много разработчиков одновременно, портов из этого диапазона может банально не хватить. В этом случае отладка на «лишних» базах просто не запустится.
Если вы используете протокол HTTP, необходимо убедиться в следующем:
-http.dbgs.Рассмотрим ситуацию, когда сервер 1С и терминальный сервер разработчика находятся на разных физических или виртуальных машинах. Это критический момент, так как отладка требует «двусторонней» связи.
При отладке по TCP/IP сервер приложений должен иметь возможность инициировать соединение с клиентским компьютером (терминалом) по портам из диапазона 1560–1591. Если между серверами стоит брандмауэр, который блокирует входящие соединения на терминальный сервер, то отладчик «увидит» серверный сеанс, но не сможет передать команду на остановку выполнения кода.
Рекомендация: Попробуйте временно отключить Firewall на обеих машинах для диагностики. Если отладка заработает — необходимо добавить весь диапазон портов 1540, 1541, 1560-1591 в исключения.
Проанализируем механизм идентификации. Сервер 1С идентифицирует клиентские машины по их именам. Если терминальный сервер называется TERM-SRV, то сервер 1С при попытке начать отладку будет искать именно это имя в сети. Если в вашей сети есть проблемы с DNS или сервер 1С видит терминал под одним IP-адресом, а обратное разрешение имени дает другой результат — отладка не сработает.
Для устранения этой неопределенности выполните следующие действия:
C:\Windows\System32\drivers\etc\hosts.Это исключит влияние сетевых задержек и ошибок DNS на процесс поиска предметов отладки.
Иногда «избирательность» проблемы (работает в одной базе и не работает в другой) объясняется накопленными ошибками в кэш-файлах. Рассмотрим, что нужно очистить:
Local\1C\1cv8 и Roaming\1C\1cv8).C:\Program Files\1cv8\srvinfo\reg_1541) есть подкаталоги типа snccntx.... В них хранятся данные сеансов. В исключительных случаях (при полной остановке службы сервера) очистка этих данных помогает восстановить корректную работу отладчика для «проблемных» баз.Если вы столкнулись с тем, что отладка на сервере работает выборочно, в первую очередь примените метод переподключения серверных сеансов в окне «Подключение». Если это не помогает, переходите к проверке настроек фоновых заданий и анализу сетевой доступности портов. Помните, что для стабильной работы в крупной среде (20+ баз) лучше переходить на протокол HTTP-отладки, так как он менее чувствителен к ограничениям по портам и легче настраивается через прокси и сетевые экраны.