Разберем ситуацию, знакомую многим разработчикам: вы устанавливаете точку останова в серверном модуле, который вызывается через фоновое задание. Отладчик срабатывает, но вместо того чтобы позволить вам спокойно пройтись по коду с помощью F11 или F10, он начинает вести себя непредсказуемо. Он «прыгает» в общие модули БСП, такие как ДлительныеОперацииКлиент, перескакивает через строки или внезапно переключается на другие сеансы. Это делает процесс отладки практически невозможным.
Выясним причину такого поведения и рассмотрим пошаговые инструкции по стабилизации работы конфигуратора.
Проанализируем механизм работы подсистемы «Длительные операции» в БСП. Когда вы останавливаетесь на точке останова на сервере, выполнение серверного кода приостанавливается. Однако клиентское приложение продолжает работать. В типовых конфигурациях (ERP, КА, УТ) на клиенте постоянно запущен цикличный обработчик ожидания, который проверяет состояние фонового задания, чтобы обновить индикатор на форме или закрыть окно ожидания.
Рассмотрим, что происходит в момент нажатия F11: отладчик пытается сделать шаг, но в этот же микромомент срабатывает событие таймера на клиенте. Конфигуратор перехватывает управление и перебрасывает вас в модуль ДлительныеОперацииКлиент.АктивныеДлительныеОперации или аналогичный. Это создает ощущение «скачков».
Как с этим бороться:
В современных версиях платформы 1С (начиная с 8.3.18) по умолчанию часто предлагается использовать протокол HTTP. Практика показывает, что этот протокол более чувствителен к сетевым задержкам и стабильности сессии. Если соединение между сервером 1С, отладочным сервером dbgs и вашим конфигуратором нестабильно, отладчик может «терять» текущий контекст и перескакивать на начало модуля.
Разберем, как вернуть стабильный протокол TCP. Для этого необходимо изменить параметры запуска службы сервера 1С. В реестре или в файле конфигурации службы добавьте ключ:
-debug -tcp
В настройках конфигуратора (Сервис -> Параметры -> Запуск 1С:Предприятия -> Дополнительные) также убедитесь, что используется протокол TCP. Это часто решает проблему «необъяснимых» прыжков по коду.
Если вы работаете в базе, где одновременно запущено множество регламентных заданий или работают другие пользователи, ваш конфигуратор может пытаться отлаживать всё подряд. Посмотрим на список предметов отладки: если там десятки строк rphost, неудивительно, что отладчик «сходит с ума».
Проанализируем правильную последовательность действий для изоляции процесса:
Часто отладчик прыгает, потому что один и тот же код выполняется в разных фоновых потоках. Например, при проведении пачки документов. Чтобы конфигуратор не реагировал на «чужие» документы, всегда используйте точки останова с условием.
Рассмотрим пример установки условия:
Объект.Ссылка.Номер = "00000001"
// Или по уникальному идентификатору
Объект.Ссылка.УникальныйИдентификатор() = Новый УникальныйИдентификатор("ваш-guid-тут")
Это гарантирует, что отладчик остановится только в контексте нужных вам данных, игнорируя фоновый шум системы.
Иногда проблема кроется в «залипших» данных в каталоге snccntx на стороне сервера. Это папка, где хранятся данные сеансов, включая информацию для отладчика. Если очистка обычного пользовательского кэша не помогает, попробуем радикальный метод:
snccntx в каталоге данных сервера (обычно это C:\Program Files\1cv8\srvinfo\reg_1541\).Важно: Это действие приведет к завершению всех активных сеансов пользователей, поэтому выполняйте его только в среде разработки.
Если пошаговая отладка через F11 всё равно не поддается дрессировке, воспользуемся другим инструментом — замером производительности. Рассмотрим этот алгоритм:
В открывшемся окне вы увидите реальную последовательность вызовов процедур и функций с точностью до строки. Это позволит проанализировать логику выполнения кода даже в том случае, если визуально отладчик вел себя неадекватно.
Опытным путем выясним, какие релизы наиболее стабильны. Пользователи отмечают, что в ветке 8.3.19 проблемы с отладчиком встречались наиболее часто. Если есть возможность, рассмотрите переход на более современные четные релизы, например, 8.3.22.1709 и выше, где механизмы взаимодействия dbgs и рабочих процессов были значительно переработаны для повышения стабильности HTTP-отладки.