Разработка на платформе 1С:Предприятие 8.3 часто требует анализа кода, который выполняется непосредственно на стороне сервера. По умолчанию отладка серверных вызовов отключена для оптимизации производительности, и многие разработчики сталкиваются с ситуацией, когда точка останова в клиентском коде срабатывает, а в серверных процедурах — игнорируется. В этой статье мы подробно разберем, как правильно сконфигурировать сервер и клиентскую часть для полноценной работы отладчика.
Первым делом нам необходимо указать серверу приложений, что он должен запускаться в режиме отладки. Рассмотрим, как это сделать через реестр Windows. Проанализируем стандартный путь к параметрам службы. Нам нужно найти ветку, отвечающую за агента сервера 1С.
Обратите внимание на важный нюанс: в реестре часто встречаются ветки ControlSet001, ControlSet002 и CurrentControlSet. Рекомендуем вносить изменения именно в CurrentControlSet, так как это ссылка на текущую активную конфигурацию системы. Перейдем по следующему пути:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\1C:Enterprise 8.3 Server Agent (x86-64)
Найдем параметр ImagePath. Нам нужно отредактировать его значение, добавив ключ -debug. Выясним, какой протокол нам больше подходит. Рассмотрим два варианта:
-debug в конец строки.-debug -http. Этот метод более современный и стабильный, особенно если сервер и компьютер разработчика находятся в разных подсетях.Пример строки запуска с включенной HTTP-отладкой будет выглядеть так:
"C:\Program Files\1cv8\8.3.16.1148\bin\ragent.exe" -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -d "C:\Program Files\1cv8\srvinfo" -debug -http
Важно: Убедитесь, что между существующими параметрами и новыми ключами стоят пробелы. Если вы используете несколько рабочих процессов, ключ -debug активирует возможность отладки для каждого из них в указанном диапазоне портов -range.
После внесения изменений в реестр настройки не вступят в силу автоматически. Нам необходимо перезапустить службу 1С:Предприятия. Выполним следующие действия:
Посмотрим на ситуацию со стороны сервера: во время перезапуска все текущие сеансы пользователей будут разорваны, поэтому такие работы лучше проводить во время технологического окна или на тестовом сервере.
Теперь, когда сервер готов отдавать отладочную информацию, нам нужно подготовить Конфигуратор. Разберем по шагам, как настроить автоматическое подключение к серверным сеансам.
Зайдем в меню Сервис — Параметры, перейдем на закладку Отладка. Здесь важно выбрать протокол, соответствующий тому, что мы прописали в реестре. Если в реестре указан -http, то и в параметрах должен стоять "Протокол HTTP". Если просто -debug — выбираем "Протокол TCP/IP".
Проанализируем меню подключения. Перейдем в Отладка — Подключение.... В открывшемся окне нажмем кнопку Настройка автоматического подключения. Установим флажки напротив следующих пунктов:
Без установки флажка Вспомогательные серверные процессы Конфигуратор может видеть клиентский сеанс, но игнорировать код, исполняемый в контексте НаСервере. Флажок Фоновые задания критически важен, если вы отлаживаете регламентные задания или длительные операции, запускаемые через ФоновыеЗадания.Выполнить().
Если сервер 1С находится на отдельной машине, отладка может блокироваться сетевым экраном. Рассмотрим, какие порты должны быть открыты:
Для протокола TCP/IP необходимо открыть диапазон портов, указанный в параметре -range (по умолчанию это 1560–1591). Именно через эти порты сервер будет пытаться инициировать обратное соединение с вашим компьютером.
Для протокола HTTP используется отладочный сервер (dbgs). По умолчанию он слушает порт 1550. Если вы используете HTTP-отладку, убедитесь, что этот порт открыт на сервере и доступен с вашего рабочего места. Проверить доступность порта можно простой командой в консоли:
telnet [адрес_сервера] 1550
Иногда возникают сложности при отладке кода, который выполняется асинхронно. Разберем пример кода, который запускает фоновое задание, и как его "поймать" отладчиком. Предположим, у нас есть процедура в общем модуле:
// В модуле обработки
Процедура ЗапуститьРасчет() Экспорт
ПараметрыЗадания = Новый Массив;
ПараметрыЗадания.Добавить(Объект.Ссылка);
ФоновыеЗадания.Выполнить("ОбщийМодульСервер.ВыполнитьДлительнуюОперацию", ПараметрыЗадания);
КонецПроцедуры
Чтобы отладчик остановился внутри ВыполнитьДлительнуюОперацию, убедитесь, что в окне автоматического подключения (шаг 3) включена галочка "Фоновые задания". Также полезно помнить, что при отладке фоновых заданий через HTTP-протокол стабильность подключения значительно выше, так как используется централизованный сервер отладки.
Выясним причины, по которым отладка может не работать даже после всех настроек:
srvinfo. Если прав недостаточно, сервер не сможет создать служебные файлы, необходимые для инициализации отладки.-range, однако в современных версиях 8.3 положение ключа в конце строки ImagePath вполне допустимо.Посмотрим на производительность: помните, что включенный режим -debug создает дополнительную нагрузку на сервер. На промышленных базах с большим количеством пользователей рекомендуется включать его только на время расследования инцидентов. Для постоянной разработки лучше использовать выделенный сервер разработки.
Таким образом, мы пошагово настроили серверную отладку. Теперь вы можете использовать все инструменты платформы, такие как "Вычислить выражение" или "Табло", работая непосредственно с серверными объектами ДокументОбъект, СправочникОбъект и запросами без необходимости передачи данных на клиента.