Почему отладчик в 1С останавливается на точках останова, но не заходит в процедуры?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Разработка и отладка программного кода в среде 1С:Предприятие — это повседневная практика любого разработчика. Однако многие специалисты сталкиваются с крайне неприятной технической проблемой: при запуске сеанса отладки точки останова на сервере или клиенте срабатывают стабильно, но при попытке «шагнуть» внутрь вызываемой процедуры по кнопке F11 отладчик просто «перепрыгивает» её, как будто был нажат шаг обхода F10. При этом сам код выполняется абсолютно корректно, но проанализировать поведение алгоритма изнутри становится невозможно.

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

Причина 1. Сбой кэша платформы и рассинхронизация сеансов

Одной из наиболее частых причин некорректного поведения отладчика является переполнение или повреждение локального кэша конфигурации на стороне разработчика или временных файлов на сервере приложений 1С. В процессе активной разработки, особенно при частых изменениях метаданных, файлы кэша могут устаревать. Конфигуратор начинает обращаться к старой версии структуры кода, в то время как сервер выполняет обновленную версию. Из-за этого смещения отладчик теряет связь между строками кода в редакторе и физически выполняемыми инструкциями.

Обычный перезапуск конфигуратора часто не приносит результатов. Давайте рассмотрим правильный алгоритм полной очистки метаданных:

  1. Завершите все активные сеансы работы с информационной базой, включая конфигураторы и клиентские приложения.
  2. Остановите службу сервера 1С:Предприятия. Это необходимо, чтобы освободить заблокированные процессом файлы кэша.
  3. Удалите файлы кэша конфигурации на компьютере пользователя. Они располагаются по следующим путям:
    • %userprofile%\AppData\Local\1C\1cv8
    • %userprofile%\AppData\Roaming\1C\1cv8
    Внутри этих папок необходимо удалить все каталоги с буквенно-цифровыми наименованиями.
  4. Очистите серверный кэш базы данных. Он хранится в каталоге srvinfo на сервере (папка reg_1541), в подкаталогах конкретных баз данных. Обратите внимание: удалять следует только временные файлы и папки кэша (например, папку snccntry), не затрагивая конфигурационные файлы самой службы.
  5. Запустите службу сервера 1С заново и проверьте работу отладки. Просто перезапускать службу (без паузы на удаление файлов кэша) часто бывает бесполезно.

Причина 2. Отсутствие флагов автоматического подключения предметов отладки

Иногда корень проблемы кроется в банальной настройке параметров подключения отладочной сессии в самом конфигураторе. Если не настроить автоматическое подключение новых контекстов, то при вызове серверной процедуры или при переходе управления на сторону сервера отладка просто проигнорирует этот шаг.

Выясним причину и настроим автоматическое подключение в Конфигураторе:

  1. Перейдите в главное меню конфигуратора и откройте пункт Отладка — Подключение....
  2. В открывшемся диалоговом окне нажмите кнопку Автоматическое подключение.
  3. Убедитесь, что установлены флажки напротив всех доступных типов предметов отладки: Клиентские приложения, Фоновые задания, Внешнее соединение, Web-сервер.
  4. Нажмите ОК для сохранения изменений. Если автоматическое подключение было отключено, отладчик не сможет автоматически «перехватывать» управление при переходе между клиентским контекстом и серверным рабочим процессом.

Причина 3. Блокировка портов брандмауэром при классической TCP-отладке

При использовании стандартного протокола отладки по TCP-соединению конфигуратор и сервер 1С общаются по двустороннему каналу. Это означает, что не только клиент обращается к серверу, но и сервер 1С пытается инициировать входящее сетевое подключение к локальному компьютеру разработчика.

Если на вашем рабочем месте включен локальный брандмауэр Windows (Windows Firewall) или работает корпоративный антивирус, входящие сетевые пакеты от сервера 1С могут блокироваться. В этом случае отладчик видит точку останова на клиенте, но при попытке зайти внутрь серверной процедуры по F11 соединение прерывается, и конфигуратор молча пропускает этот шаг.

Чтобы решить эту проблему, проанализируем правила фильтрации трафика:

  1. На компьютере разработчика необходимо открыть диапазон портов 1560–1591 для входящих TCP-подключений.
  2. Также критически важно открыть порт 1550, который часто используется сервером для передачи отладочной информации по умолчанию.
  3. В качестве альтернативы можно добавить исполняемый файл платформы 1С 1cv8.exe (а также 1cv8c.exe для тонкого клиента) в список исключений брандмауэра для любых сетевых протоколов.

Причина 4. Переход на более стабильную HTTP-отладку

Если сетевая инфраструктура вашей компании сложная (используются VPN-туннели, маршрутизаторы с NAT, или разработка ведется на удаленных серверах), классический TCP-протокол отладки будет работать крайне нестабильно из-за невозможности сервера достучаться до клиента. В таких сценариях мы настоятельно рекомендуем переключиться на современный протокол отладки по HTTP.

При HTTP-отладке используется служба отладки (отладочный стенд), и все соединения идут в одну сторону — от клиента и сервера к этой службе, что полностью решает проблему закрытых входящих портов.

Рассмотрим подробнее, как активировать HTTP-отладку:

  1. При запуске службы сервера 1С необходимо указать параметр локального отладочного сервера (например, параметр -http).
  2. В Конфигураторе перейдите в меню Сервис — Параметры — вкладка Запуск 1С:Предприятия — раздел Отладка.
  3. Установите переключатель в положение Отладка по протоколу HTTP и укажите адрес сервера отладки (например, http://имя_сервера:1550).

Причина 5. Ошибки в параметрах запуска службы сервера 1С

Для того чтобы серверный код вообще поддавался отладке, служба сервера 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"

Важные нюансы запуска службы:

Причина 6. Последствия "динамического обновления" конфигурации

Динамическое обновление (так называемое «демоническое») — это функция, позволяющая применить изменения конфигурации без выгона пользователей. К сожалению, это главный враг стабильной отладки. При таком обновлении база данных обновляется, но рабочие процессы сервера продолжают хранить в оперативной памяти старые версии скомпилированных модулей.

Когда вы пытаетесь зайти в процедуру, конфигуратор пытается сопоставить новые строки кода на вашем экране с устаревшим байт-кодом, выполняющимся на сервере. Не находя соответствия строк, отладчик просто проскакивает вызов.

Решение: Разберем по шагам правильные действия. Никогда не используйте динамическое обновление на этапе активной отладки программного кода. Если это произошло, выполните монопольное обновление конфигурации базы данных (через полное сохранение изменений) и перезапустите службу сервера 1С.

Причина 7. Отладка фоновых заданий и асинхронных вызовов

Если процедура, в которую вы хотите войти, выполняется асинхронно или в рамках фонового задания, простой шаг по F11 не сработает, так как выполнение кода уходит в отдельный независимый поток на сервере.

Посмотрим на пример кода запуска фонового задания:


ПараметрыПроцедуры = Новый Массив;
ПараметрыПроцедуры.Добавить(ПараметрПередачи);
ФоновыеЗадания.Выполнить("МойОбщийМодуль.ВыполнитьРасчет", ПараметрыПроцедуры);

Чтобы отладчик перехватил выполнение внутри процедуры ВыполнитьРасчет, необходимо выполнить следующие условия:


#Если Сервер И Отладка Тогда
    Приостановить(2); // Временная пауза для перехвата отладки
#КонецЕсли

Причина 8. Защищенные или поставляемые без исходного кода модули

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

Убедитесь, что у модуля, в который вы пытаетесь зайти, в свойствах не снят флаг Локальные спецификации отладки или что данный модуль не является закрытым поставщиком решения.

Применяя последовательно эти шаги и анализируя настройки сетевого окружения, мы гарантированно сможем восстановить работоспособность пошаговой отладки в 1С:Предприятии.

← На главную