Разработка и отладка программного кода в среде 1С:Предприятие — это повседневная практика любого разработчика. Однако многие специалисты сталкиваются с крайне неприятной технической проблемой: при запуске сеанса отладки точки останова на сервере или клиенте срабатывают стабильно, но при попытке «шагнуть» внутрь вызываемой процедуры по кнопке F11 отладчик просто «перепрыгивает» её, как будто был нажат шаг обхода F10. При этом сам код выполняется абсолютно корректно, но проанализировать поведение алгоритма изнутри становится невозможно.
В этой статье мы подробно разберем, почему возникает этот сбой, проанализируем неочевидные тонкости взаимодействия клиента и сервера, а также рассмотрим по шагам инструкции по восстановлению штатной работы конфигуратора.
Одной из наиболее частых причин некорректного поведения отладчика является переполнение или повреждение локального кэша конфигурации на стороне разработчика или временных файлов на сервере приложений 1С. В процессе активной разработки, особенно при частых изменениях метаданных, файлы кэша могут устаревать. Конфигуратор начинает обращаться к старой версии структуры кода, в то время как сервер выполняет обновленную версию. Из-за этого смещения отладчик теряет связь между строками кода в редакторе и физически выполняемыми инструкциями.
Обычный перезапуск конфигуратора часто не приносит результатов. Давайте рассмотрим правильный алгоритм полной очистки метаданных:
%userprofile%\AppData\Local\1C\1cv8%userprofile%\AppData\Roaming\1C\1cv8srvinfo на сервере (папка reg_1541), в подкаталогах конкретных баз данных. Обратите внимание: удалять следует только временные файлы и папки кэша (например, папку snccntry), не затрагивая конфигурационные файлы самой службы.Иногда корень проблемы кроется в банальной настройке параметров подключения отладочной сессии в самом конфигураторе. Если не настроить автоматическое подключение новых контекстов, то при вызове серверной процедуры или при переходе управления на сторону сервера отладка просто проигнорирует этот шаг.
Выясним причину и настроим автоматическое подключение в Конфигураторе:
Отладка — Подключение....Клиентские приложения, Фоновые задания, Внешнее соединение, Web-сервер.При использовании стандартного протокола отладки по TCP-соединению конфигуратор и сервер 1С общаются по двустороннему каналу. Это означает, что не только клиент обращается к серверу, но и сервер 1С пытается инициировать входящее сетевое подключение к локальному компьютеру разработчика.
Если на вашем рабочем месте включен локальный брандмауэр Windows (Windows Firewall) или работает корпоративный антивирус, входящие сетевые пакеты от сервера 1С могут блокироваться. В этом случае отладчик видит точку останова на клиенте, но при попытке зайти внутрь серверной процедуры по F11 соединение прерывается, и конфигуратор молча пропускает этот шаг.
Чтобы решить эту проблему, проанализируем правила фильтрации трафика:
1560–1591 для входящих TCP-подключений.1550, который часто используется сервером для передачи отладочной информации по умолчанию.1cv8.exe (а также 1cv8c.exe для тонкого клиента) в список исключений брандмауэра для любых сетевых протоколов.Если сетевая инфраструктура вашей компании сложная (используются VPN-туннели, маршрутизаторы с NAT, или разработка ведется на удаленных серверах), классический TCP-протокол отладки будет работать крайне нестабильно из-за невозможности сервера достучаться до клиента. В таких сценариях мы настоятельно рекомендуем переключиться на современный протокол отладки по HTTP.
При HTTP-отладке используется служба отладки (отладочный стенд), и все соединения идут в одну сторону — от клиента и сервера к этой службе, что полностью решает проблему закрытых входящих портов.
Рассмотрим подробнее, как активировать HTTP-отладку:
-http).Сервис — Параметры — вкладка Запуск 1С:Предприятия — раздел Отладка.http://имя_сервера:1550).Для того чтобы серверный код вообще поддавался отладке, служба сервера 1С должна быть запущена со специальным ключом -debug. Если этот ключ прописан некорректно, точки останова на сервере работать не будут, а шаг по F11 внутрь серверных модулей будет игнорироваться.
Давайте проверим правильность регистрации службы в реестре Windows. Для этого откроем редактор реестра regedit и перейдем по пути HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\1C:Enterprise 8.3 Server Agent....
Проанализируем параметр ImagePath. Строка запуска службы должна выглядеть следующим образом:
"C:\Program Files\1cv8\8.3.23.1688\bin\ragent.exe" -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -debug -d "C:\Program Files\1cv8\srvinfo"
Важные нюансы запуска службы:
-debug должен быть написан именно с дефисом. В некоторых редких операционных системах (или при специфических настройках прав) дефис может распознаваться некорректно, тогда помогает замена на косую черту: /debug.-d). Если прописать его в самом конце строки после пути к каталогу, операционная система может запустить службу, но сам отладочный режим не активируется.Динамическое обновление (так называемое «демоническое») — это функция, позволяющая применить изменения конфигурации без выгона пользователей. К сожалению, это главный враг стабильной отладки. При таком обновлении база данных обновляется, но рабочие процессы сервера продолжают хранить в оперативной памяти старые версии скомпилированных модулей.
Когда вы пытаетесь зайти в процедуру, конфигуратор пытается сопоставить новые строки кода на вашем экране с устаревшим байт-кодом, выполняющимся на сервере. Не находя соответствия строк, отладчик просто проскакивает вызов.
Решение: Разберем по шагам правильные действия. Никогда не используйте динамическое обновление на этапе активной отладки программного кода. Если это произошло, выполните монопольное обновление конфигурации базы данных (через полное сохранение изменений) и перезапустите службу сервера 1С.
Если процедура, в которую вы хотите войти, выполняется асинхронно или в рамках фонового задания, простой шаг по F11 не сработает, так как выполнение кода уходит в отдельный независимый поток на сервере.
Посмотрим на пример кода запуска фонового задания:
ПараметрыПроцедуры = Новый Массив;
ПараметрыПроцедуры.Добавить(ПараметрПередачи);
ФоновыеЗадания.Выполнить("МойОбщийМодуль.ВыполнитьРасчет", ПараметрыПроцедуры);
Чтобы отладчик перехватил выполнение внутри процедуры ВыполнитьРасчет, необходимо выполнить следующие условия:
Отладка — Подключение обязательно должен стоять флаг автоматического подключения фоновых заданий.
#Если Сервер И Отладка Тогда
Приостановить(2); // Временная пауза для перехвата отладки
#КонецЕсли
Если процедура расположена в закрытом (зашифрованном) модуле конфигурации, сторонней коммерческой библиотеке или поставляемой закрытой компоненте, отладчик физически не сможет отобразить ее исходный текст. При попытке войти в такую процедуру отладчик просто выполнит ее и перейдет на следующую доступную строку открытого модуля.
Убедитесь, что у модуля, в который вы пытаетесь зайти, в свойствах не снят флаг Локальные спецификации отладки или что данный модуль не является закрытым поставщиком решения.
Применяя последовательно эти шаги и анализируя настройки сетевого окружения, мы гарантированно сможем восстановить работоспособность пошаговой отладки в 1С:Предприятии.