При разработке в 1С часто возникает ситуация, когда отладчик отлично работает на клиентском коде, но полностью игнорирует точки останова, установленные в серверных процедурах и функциях. При этом, если запустить клиентское приложение прямо на сервере, отладка может работать корректно как на клиенте, так и на сервере. Это сбивает с толку, но проблема имеет вполне логичное объяснение и решение.
Давайте вместе разберемся, почему так происходит и какие шаги нужно предпринять, чтобы наладить полноценную отладку серверного кода с вашего рабочего компьютера.
Первое и самое главное условие для серверной отладки — сервер «1С:Предприятия» должен быть запущен со специальным ключом -debug. Без этого ключа сервер не будет "знать", что к нему может подключиться отладчик, и будет игнорировать все попытки. Проверим и настроим это.
Самый надежный способ добавить этот ключ — через редактирование реестра Windows на машине, где установлен сервер 1С.
regedit и нажмите Enter.Компьютер\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\1C:Enterprise 8.3 Server Agent (x86-64)ImagePath. Он содержит строку запуска службы. Изначально она выглядит примерно так:
"C:\Program Files\1cv8\8.3.15.1656\bin\ragent.exe" -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -d "C:\Program Files\1cv8\srvinfo"
-debug. Строка должна принять следующий вид:
"C:\Program Files\1cv8\8.3.15.1656\bin\ragent.exe" -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -d "C:\Program Files\1cv8\srvinfo" -debug
Для серверов на Linux: Если ваш сервер 1С работает под управлением ОС Linux, для включения отладки необходимо отредактировать конфигурационный файл. В файле srv1cv83 (обычно расположен в /etc/sysconfig или /etc/init.d) нужно установить параметр SRV1CV8_DEBUG в значение 1 и перезапустить службу.
Это самая частая причина проблемы. Процесс отладки — это двусторонний обмен данными. Ваш Конфигуратор подключается к серверу, но затем серверный процесс (rphost.exe) должен подключиться обратно к вашему компьютеру, на котором запущен отладчик. По умолчанию брандмауэр Windows на вашем компьютере блокирует такие входящие подключения от неизвестных источников, и точка останова не срабатывает.
Проанализируем, как это исправить.
Решение А: Проверка и "перезапись" существующего правила
Иногда правило для 1С создается при установке платформы, но работает некорректно. Можно попробовать его "оживить".
1cv8.exe).C:\Program Files\...) на путь с использованием переменной окружения (%ProgramFiles%\...). После применения изменений правило пересохраняется, что может решить проблему.Решение Б: Создание явного правила для портов отладки (рекомендуется)
Это более надежный способ, который гарантирует, что нужные порты открыты.
1560-1591.После создания этого правила брандмауэр на вашем компьютере будет готов принять подключение от сервера 1С, и отладка должна заработать.
Убедимся, что и сам Конфигуратор настроен правильно для подключения к серверным процессам.
Бывают ситуации, особенно при отладке Web- или HTTP-сервисов, когда внешний вызов выполняется так быстро, что отладчик не успевает "прицепиться" к процессу. Для таких случаев можно использовать небольшую хитрость — искусственную задержку в коде, чтобы у вас было время на подключение.
Посмотрим на пример такого кода, который можно вставить в самое начало отлаживаемого метода:
// Этот код имеет смысл использовать только в тестовой среде для отладки
ТестоваяБД = Константы.ТестоваяБаза.Получить();
Если ТестоваяБД Тогда
// Создаем искусственную задержку, чтобы успеть подключить отладчик
i = 0;
Пока i < 3 Цикл // Задержка примерно на 3 секунды
i = i + 1;
// Используем команду ОС для паузы
TimeoutWindows = "Timeout /T " + Формат(1, "ЧГ=0") + " /NoBreak";
WScriptShell = Новый COMОбъект("WScript.Shell");
WScriptShell.Run(TimeoutWindows, 0, -1);
WScriptShell = Неопределено;
КонецЦикла;
КонецЕсли;
// Здесь начинается основной код вашего метода,
// в котором можно ставить точку останова.
Разместив такой блок в начале, вы получите несколько секунд форы, чтобы запустить отладку и подключиться к нужному процессу, после чего выполнение остановится на вашей основной точке останова.
В заключение, помните, что включенный режим отладки на сервере (ключ -debug) незначительно снижает его производительность, так как объекты конфигурации загружаются динамически. Поэтому на продуктивных серверах рекомендуется включать этот режим только на время проведения работ и отключать после их завершения. Если штатную отладку на сервере включить невозможно, применимо расширение для отладки данных и запросов под пользователем.