Почему не работает отладка 1С в терминальном режиме (RDP) и как это исправить?

Программист IT и автоматизация бизнеса
← На главную

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

Настройка портов и решение конфликтов в RDP

Первое, что мы рассмотрим — это сетевые ограничения и порты. В терминальном сервере работает множество пользователей одновременно, что часто приводит к конфликтам портов. По умолчанию конфигуратор 1С использует диапазон портов для отладки 1560-1591.

Если несколько разработчиков запустят свои конфигураторы на одном сервере, стандартный диапазон будет занят. Отладчик просто не сможет подключиться. Разберем по шагам, что нужно сделать:

  1. Откроем в конфигураторе меню Отладка, далее пункт Подключение....
  2. Перейдем в настройки и зададим индивидуальный, не пересекающийся с другими пользователями диапазон портов (например, 1600-1650 для одного, 1651-1700 для другого).
  3. Проверим, не блокирует ли порты брандмауэр (Firewall). Нужно открыть порты входящие на сервере отладки и исходящие на терминальном сервере для настроенного диапазона.
  4. Откроем командную строку Windows от имени администратора и проверим, слушает ли конфигуратор порты. Выполним команду netstat -a -n Найдем в списке порты из нашего диапазона и убедимся, что они имеют статус LISTENING.

Серверная отладка и ключ запуска службы

Выясним причину, почему точки останова могут игнорироваться, если база клиент-серверная (SQL). Часто код выполняется на сервере 1С:Предприятия, а по умолчанию сервер 1С запускается без поддержки отладки из соображений безопасности и производительности.

Для отладки серверных процедур нам необходимо включить режим отладки на самом сервере приложений:

  1. Зайдем на сервер, где установлена служба 1С:Предприятия.
  2. Откроем редактор реестра Windows (regedit).
  3. Найдем ветку службы 1С. Обычно она находится по пути HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\1C:Enterprise 8.3 Server Agent.
  4. Найдем параметр ImagePath. В его значении находится строка запуска службы.
  5. Добавим в конец строки параметр -debug.
  6. Перезапустим службу сервера 1С:Предприятия через оснастку "Службы".

Если нет возможности перезапускать рабочий сервер с ключом отладки (так как это влияет на производительность и множество пользователей), развернем тестовую копию базы в файловом варианте или на выделенном тестовом сервере.

Автоматическое подключение и смена протокола

Рассмотрим настройки самого конфигуратора. Часто отладчик игнорирует запуск нового сеанса из-за некорректных внутренних параметров.

Проверим настройки подключения:

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

Если стандартный протокол по TCP/IP (через сокеты) в условиях терминала работает нестабильно, поменяем протокол отладки на HTTP. В современных версиях платформы это позволяет легко обходить ограничения брандмауэров. Зайдем в Сервис — Параметры — закладка Отладка и переключим Протокол отладки на HTTP.

Изоляция сессий RDP и решение проблемы "зависших" сеансов

Проанализируем специфику Windows Server. Пользовательские сеансы RDP жестко изолированы друг от друга. Если вы запустили конфигуратор, затем свернули окно, переподключились к серверу (создав новый RDP-сеанс с другим ID) и попытались запустить 1С в режиме предприятия — отладка работать не будет. Конфигуратор и клиентское приложение должны работать строго внутри одной терминальной сессии.

Если вы столкнулись с зависшими сеансами, которые не удается закрыть из конфигуратора, попробуем следующие шаги:

  1. Сделаем полный выход (Log off) из терминальной сессии, а не просто "Крестик" (Disconect). Это принудительно завершит все фоновые процессы 1С.
  2. Если база файловая, отладчик и клиент общаются на одной машине. При активном IPv6 адрес localhost может резолвиться некорректно. В окне подключения предметов отладки вручную впишем локальный IPv4-адрес сервера или 127.0.0.1 и нажмем "Искать".
  3. В некоторых случаях (ограничения UAC) полезно запустить сам конфигуратор внутри RDP от имени Администратора, чтобы он получил права на открытие прослушивающих сетевых портов.
  4. Почистим кэш платформы. Зависшие сеансы часто связаны с повреждением локального кэша 1С. Закроем все окна 1С и удалим содержимое папок %AppData%\1C\1cv8 и %LocalAppData%\1C\1cv8.

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

← На главную