При переходе на протокол HTTP-отладки в платформе 1С:Предприятие 8.3 разработчики и администраторы часто обращают внимание на то, что запущенный процесс сервера отладки dbgs (или dbgs.exe) отображается в диспетчере задач или списке процессов без параметра --ownerPID (или OWNERPID). Разберем, за что отвечает этот параметр, влияет ли его отсутствие на процесс отладки и с какими сопутствующими особенностями можно столкнуться при отладке конфигураций и внешних обработок.
Проанализируем механизм управления жизненным циклом сервера отладки. Параметр --ownerPID=<PID> предназначен исключительно для привязки процесса dbgs к идентификатору родительского процесса (например, Конфигуратора или агента кластера ragent). Он сообщает серверу отладки, что при завершении работы (штатном или аварийном) родительского процесса процесс dbgs должен автоматически завершить свою работу и освободить системные ресурсы.
Если сервер отладки запущен без ключа --ownerPID, это означает следующее:
--service в Windows).dbgs не выгрузится из памяти автоматически при закрытии Конфигуратора и продолжит работать в фоновом режиме.Важный нюанс: если автономный процесс dbgs зависнет или останется в памяти после завершения сеанса разработки, он продолжит удерживать сетевой порт. В такой ситуации новый экземпляр сервера отладки не сможет занять порт, что приведет к ошибкам подключения. В подобных случаях достаточно принудительно завершить зависший процесс dbgs в диспетчере задач.
Рассмотрим важное архитектурное ограничение платформы при автономном запуске сервера отладки как отдельной службы:
dbgs доступна полноценная отладка файловых информационных баз, а также клиентских контекстов (модули форм, модули команд) в клиент-серверных базах.dbgs не подходит. В этом сценарии сервер отладки должен запускаться непосредственно кластером серверов 1С. Для этого в параметры запуска службы ragent добавляются ключи -debug -http.Разберем частую ситуацию, когда точка останова в общем модуле срабатывает только при первом вызове, а при повторных обращениях отладчик не переходит в тело функции. Выясним причину такого поведения.
Если у общего модуля установлено свойство Повторное использование возвращаемых значений в значение На время сеанса или На время вызова, платформа кэширует результат первого вызова функции для переданного набора параметров. При повторных вызовах с теми же значениями аргументов тело функции физически не исполняется — платформа сразу возвращает сохраненное в кэше значение. Соответственно, отладчик в код функции повторно не заходит.
Для принудительной отладки алгоритмов в таких модулях применим следующие приемы:
// Очищаем кэш повторно используемых значений в текущем сеансе
ОбновитьПовторноИспользуемыеЗначения();
Результат = МойОбщийМодульПовтИсп.ПолучитьДанные(Параметр1);
// Значение в кэше обновляется из-за смены аргумента
ФиктивныйКлюч = ТекущаяУниверсальнаяДатаВМиллисекундах();
Результат = МойОбщийМодульПовтИсп.ПолучитьДанные(Параметр1, ФиктивныйКлюч);
Не использовать для свойства повторного использования.Посмотрим на параметры, обеспечивающие стабильное сетевое соединение с сервером отладки:
--range.
/DEBUGGERURL "http://адрес_сервера:1550"
Таким образом, отсутствие ключа --ownerPID у процесса dbgs не является ошибкой конфигурации и не снижает функциональность отладки при условии корректной настройки сетевых портов и параметров кластера 1С.