В процессе разработки конфигураций на платформе 1С:Предприятие разработчики нередко сталкиваются с ситуацией, когда сеанс успешно останавливается на точке останова, однако при попытке дописать или изменить хотя бы один символ в открытом модуле вся среда намертво зависает. При этом сам тонкий клиент (1cv8c.exe) или Конфигуратор (1cv8.exe) перестают отвечать на запросы, а принудительное завершение клиентского сеанса через диспетчер задач отпускает редактор кода.
Разберем природу этого поведения, выясним ключевые причины взаимных блокировок и пошагово рассмотрим методы устранения зависаний среды разработки.
Проанализируем механику работы редактора модулей. Когда выполнение программы остановлено на точке останова, контекст выполнения приостанавливается. В этот момент ввод любого символа активирует механизм контекстной подсказки (IntelliSense). Конфигуратор пытается выполнить интроспекцию доступных переменных, процедур и функций в текущей области видимости.
Если механизм подсказки пытается опросить свойства объектов в приостановленном потоке клиента или сервера, возникает взаимоблокировка (deadlock): редактор ожидает ответа от отладочного сеанса, а отладочный сеанс заморожен точкой останова.
Для устранения этой коллизии выполним следующие действия:
В ряде случаев отрисовка всплывающих подсказок, списков автодополнения и фоновых окон среды разработки использует аппаратное ускорение графики. При работе на устаревших драйверах видеоадаптеров (особенно на дискретных картах начального уровня или в виртуализированных средах) интерфейсный поток Конфигуратора зависает в момент вызова перерисовки элементов окна редактирования.
Выполним проверку и оптимизацию графической подсистемы:
Начиная с версии платформы 8.3.7, базовым протоколом отладки по умолчанию является HTTP, работающий через выделенный сервер отладки dbgsrv.exe или службу кластера ragent.exe. Если в локальной сети или на петлевом интерфейсе (localhost) возникают задержки обработки HTTP-пакетов, отладчик теряет связь с предметом отладки.
Попробуем переключить отладчик на классический протокол TCP, добавив специальный ключ в параметры запуска клиента и Конфигуратора:
/debuggerProtocol -tcp
ragent параметр -debug должен корректно связываться с локальным сетевым интерфейсом, исключая конфликты адресации между стеками IPv4 и IPv6.Отладка клиент-серверной базы задействует множество локальных сокетов для передачи команд между процессами 1cv8.exe, 1cv8c.exe и рабочими процессами сервера rphost.exe. Рассмотрим внешние системные факторы, приводящие к заморозке:
1cv8c.exe при инициализации управляемых форм опрашивает принтеры по умолчанию. При зависании транслятора 32/64-битной печати splwow64.exe клиент блокирует поток, что останавливает и Конфигуратор. Перезапустим диспетчер печати Windows при возникновении таких симптомов.1cv8.exe, 1cv8c.exe, dbgsrv.exe и rphost.exe в список доверенных программ с исключением фильтрации локального трафика.Если в процессе разработки применялось динамическое обновление («демоническое обновление»), версии метаданных в памяти сервера и Конфигуратора могут рассинхронизироваться. При редактировании модуля новой процедуры среда исполнения обращается к устаревшему контексту и падает в ожидание.
Выполним полную очистку кэша сервера и локального профиля:
1C:Enterprise Server Agent).srvinfo) и очистим временные папки кэша контекста (включая каталоги, начинающиеся на snccntx).%LocalAppData%\1C\1cv8 и %AppData%\1C\1cv8.Комплексная проверка указанных узлов позволяет полностью устранить зависания среды разработки и обеспечить стабильный процесс интерактивной отладки кода.