Во время пошаговой отладки программного кода в Конфигураторе 1С разработчики нередко сталкиваются с ситуацией, когда курсор отладчика перескакивает через строку с вызовом функции либо не заходит внутрь её тела при нажатии клавиши перехода. Рассмотрим типичный пример такой ситуации:
Функция1();
Функция2();
Функция3();
Отладчик успешно выполняет Функция1(), затем полностью игнорирует Функция2() и сразу переходит к остановке на строке Функция3(). Проанализируем ключевые причины такого поведения платформы и разберем по шагам способы их устранения.
В клиент-серверном варианте работы базы вызовы методов могут выполняться в разных контекстах. Если Функция1() и Функция3() выполняются на стороне клиента, а Функция2() имеет директиву компиляции &НаСервере, &НаСервереБезКонтекста или расположена в серверном общем модуле, отладчик не сможет войти внутрь функции, если служба сервера 1С запущена без специального параметра отладки.
Разберем по шагам, как проверить и включить отладку на сервере 1С:
regedit.HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\1C:Enterprise 8.3 Server Agent (название службы может отличаться в зависимости от версии платформы).ImagePath.-debug (для протокола отладки TCP) или -http -debug (для отладки по протоколу HTTP).services.msc.Если вызываемая функция расположена в общем модуле, у которого в свойствах установлено свойство Повторное использование возвращаемых значений (значения На время вызова или На время сеанса), платформа кэширует результат первого выполнения функции.
При повторном вызове функции с теми же самыми параметрами платформа 1С не выполняет программный код функции заново, а сразу возвращает готовое значение из серверного кэша. В этом случае отладчик физически не может войти в тело метода, так как исполнение модуля не происходит.
Несоответствие исполняемого кода и открытого в Конфигураторе текста модуля часто возникает из-за повреждения локального кэша конфигурации или применения «динамического обновления» конфигурации базы данных.
Выясним порядок действий для устранения этой проблемы:
%AppData%\1C\1Cv8 и %LocalAppData%\1C\1Cv8.Если вызываемый метод запускает фоновое задание через объект ФоновыеЗадания.Выполнить или исполняется в контексте веб-сервисов и HTTP-сервисов, Конфигуратор должен быть явно настроен на отслеживание этих потоков.
Проверим настройки подключения отладчика:
Проанализируем структуру подключенных расширений. Если для вызываемого метода в расширении создана процедура-перехватчик с аннотацией &Вместо, исходный код метода в основной конфигурации полностью замещается кодом из расширения.
Если разработчик расширения не вызвал стандартный метод ПродолжитьВызов(), код базовой функции выполняться не будет, а точка останова в основном модуле окажется неактивной. В таком случае точку останова необходимо устанавливать непосредственно в модуле расширения.
Рассмотрим ещё две технические причины пропуска строк отладчиком:
#Если Сервер Тогда, #Если ТолстыйКлиентОбычноеПриложение Тогда или #Если ВнешнееСоединение Тогда. Если текущий контекст сеанса не совпадает с условием, блок кода вырезается на этапе компиляции.Обратим внимание на комбинацию клавиш, используемую при отладке: