В процессе разработки и поддержки интеграций, особенно при использовании сторонних решений (например, от компании Клеверенс), программисты часто сталкиваются с ситуацией, когда код внешней обработки, вызываемой через COM-соединение, отказывается «останавливаться» на точках останова. При этом само COM-соединение прекрасно видно в списке предметов отладки, и конфигуратор к нему успешно подключается. Разберем по шагам, почему это происходит и какими методами можно добиться стабильной работы отладчика в таких условиях.
Проанализируем основную причину, по которой точки останова игнорируются. Когда 1С работает в режиме COM-сервера, она загружает внешнюю обработку в память. Для того чтобы отладчик сработал, конфигуратор должен сопоставить исполняемый в памяти код с конкретным файлом .epf, открытым в редакторе. Если обработка загружается программно (например, из двоичных данных), у нее может отсутствовать жестко заданный путь к файлу на диске. В этом случае отладчик просто «не узнает» обработку.
Рассмотрим решение: если путь к файлу известен, необходимо открыть этот файл в конфигураторе именно по тому пути, который использует COM-соединение. Если система сначала выгружает обработку из базы во временную папку, а затем запускает ее, нам нужно:
Если прямое сопоставление файлов не помогает, применим более надежный метод перехвата управления. Суть метода заключается в том, что модули конфигурации (особенно глобальные) всегда сопоставлены с метаданными и отладчик в них работает стабильно. Посмотрим на пример реализации такого подхода:
Внутри внешней обработки, в том месте, где нам нужно начать отладку, добавим вызов любой процедуры из общего модуля, который доступен на сервере и имеет флаг «Вызов сервера».
// Код внутри внешней обработки
Процедура ВыполнитьДействие()
// Вызываем пустую процедуру общего модуля для перехвата отладчика
ОбщийМодульОтладка.ТочкаВхода();
// Далее идет наш сложный код, который нужно проверить
Данные = ПолучитьРезультатЗапроса();
...
КонецПроцедуры
В конфигурации создадим (или используем существующий) ОбщийМодульОтладка и установим точку останова внутри процедуры ТочкаВхода. Когда COM-соединение дойдет до этой строки, отладчик гарантированно остановится. После этого мы сможем войти «внутрь» (клавиша F11) или просто увидеть стек вызовов, из которого можно будет перейти в модуль внешней обработки.
Выясним причину, если стандартные методы не дают результата. Иногда отладочные сообщения не доходят из-за особенностей сетевого окружения. В таких случаях можно использовать «агрессивные» методы остановки:
ВызватьИсключение. В настройках отладки конфигуратора (Сервис — Параметры — Отладка) установите флаг «Останавливаться по ошибке». Как только код дойдет до этой строки, выполнение прервется, и вы сможете проанализировать состояние переменных.
Пока ФайлНаДискеСуществует("C:\stop.txt") Цикл
// Ждем, пока программист удалит файл, чтобы продолжить
КонецЦикла;
Важно помнить, что никакие манипуляции с кодом не помогут, если сервер 1С:Предприятие не подготовлен к отладке. Проанализируем ситуацию с настройками службы сервера. Для клиент-серверного варианта (как в случае с УТ 11.2) служба 1C:Enterprise 8.3 Server Agent должна быть запущена с параметром -debug.
Проверить это можно в реестре Windows по пути: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\1C:Enterprise 8.3 Server Agent. В значении параметра ImagePath должна присутствовать строка вида:
"C:\Program Files\1cv8\8.3.12.xxxx\bin\ragent.exe" -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -d "C:\Program Files\1cv8\srvinfo" -debug
Без этого параметра серверные вызовы, в том числе инициированные через COM, не будут доступны для отладки.
Начиная с версии 8.3.7, платформа поддерживает отладку по протоколу HTTP. Рассмотрим подробнее: этот режим часто работает стабильнее в сложных конфигурациях сети, где TCP-порты могут блокироваться фаерволами или антивирусами. Чтобы включить его, необходимо:
-http.Именно в режиме HTTP отладчик лучше справляется с автоматическим подключением к новым COM-сессиям и фоновым заданиям.
Если соединение устанавливается через компоненту V83.COMConnector, работающую в составе приложения COM+ (библиотека в Component Services), необходимо проверить настройки безопасности Windows. Пользователь, от имени которого запущен этот компонент, должен иметь права на отладку на сервере 1С. Также в свойствах приложения COM+ на вкладке «Параметры» рекомендуется проверить, не ограничено ли время жизни процесса, иначе сессия может завершиться раньше, чем вы успеете проанализировать код.
Подведем итог: для успешной отладки внешней обработки через COM-соединение необходимо обеспечить три условия: запуск сервера в режиме -debug, правильное сопоставление исходного файла (через открытие .epf по пути запуска) и, при необходимости, использование «якоря» в виде общего модуля для гарантированного перехвата управления отладчиком.