В процессе разработки на платформе 1С:Предприятие 8.3 (особенно в версиях ветки 8.3.13 и 8.3.14) многие программисты сталкиваются с неприятной особенностью: после закрытия отладочного приложения в конфигураторе продолжает висеть активный серверный сеанс. Этот сеанс невозможно завершить стандартными средствами, он не отображается в консоли администрирования кластера в разделе «Сеансы», но при этом блокирует повторную отладку или вносит путаницу в список подключенных предметов отладки. Разберем подробно, почему это происходит и как эффективно бороться с этим явлением без перезагрузки всего сервера приложений.
Для начала проанализируем ситуацию: почему сеанс «зависает»? В версиях 8.3.13.1664 и смежных релизах механизмы взаимодействия между Конфигуратором, Сервером приложений и Сервером отладки (dbgs) претерпели изменения. Основные причины кроются в следующем:
Рассмотрим пошагово способы решения этой проблемы, начиная от самых простых и заканчивая системными методами.
Прежде чем переходить к радикальным мерам, попробуем заставить конфигуратор перепроверить состояние соединений. Разберем следующие действия:
Использование горячих клавиш. Попробуем принудительно остановить все текущие процессы отладки. Для этого в конфигураторе нажмем комбинацию Shift + F5. В некоторых случаях это посылает сигнал на сервер о завершении всех связанных потоков, включая фоновые задания, которые могли удерживать сеанс.
Повторное подключение. Рассмотрим алгоритм «перехвата» сеанса:
Shift + F5 для корректного завершения.Если манипуляции с меню отладки не помогли, наиболее быстрым локальным решением будет перезапуск самого Конфигуратора. Несмотря на то что пользователь в сообщении (2) просил обойтись без перезагрузок, важно понимать: конфигуратор хранит локальный кэш состояния отладочной сессии. Закрытие и открытие конфигуратора разрывает связь с локальным процессом отладки и заставляет клиентское приложение инициализировать новый список соединений при следующем запуске.
Если сеанс продолжает висеть и мешает работе, а доступа к перезагрузке всего сервера 1С нет, мы можем воздействовать на конкретный процесс, отвечающий за отладку. Проанализируем работу службы сервера 1С. За отладку отвечает отдельный процесс или поток dbgs.exe (в случае выноса отладки на отдельный сервер).
Если в параметрах запуска службы сервера 1С используется флаг -debug, то на сервере функционирует менеджер отладки. Выясним причину зависания через диспетчер задач на сервере приложений:
dbgs.exe (если он запущен как отдельный процесс).Автор темы указал, что в разделе «Сеансы» консоли администрирования пусто. Однако платформа 1С разделяет понятия Сеанс и Соединение. Посмотрим на ситуацию глубже:
Откроем консоль администрирования кластеров 1С, перейдем в дерево нашего кластера и выберем пункт Соединения (Connections). Очень часто «фантомный» сеанс отладки отображается именно здесь как низкоуровневое TCP-соединение. Проанализируем колонку «Приложение» — там будет указано «Отладчик» или «Debugger». Удаление этого соединения принудительно разорвет связь сервера с зависшим предметом отладки.
Для предотвращения подобных ситуаций в будущем, особенно на релизах 8.3.13 и выше, рекомендуется сменить протокол отладки с TCP на HTTP. Рассмотрим, почему это эффективнее:
Для включения HTTP-отладки необходимо выполнить следующие шаги:
-http."C:\Program Files\1cv8\8.3.13.1664\bin\ragent.exe" -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -d "C:\Program Files\1cv8\srvinfo" -debug -http.Мы разобрали ситуацию с зависанием отладочных сеансов, которая является следствием архитектурных особенностей платформы 1С версии 8.3.13. Подведем итог: если вы столкнулись с такой «фичей», первым делом используйте Shift + F5 и проверку окна «Подключения». Если это не помогает, проверьте раздел Соединения в консоли кластера. В долгосрочной перспективе лучшим решением станет переход на протокол HTTP, который минимизирует вероятность появления подобных фантомных сеансов.