Отладка в 1С 8.3: как запустить и настроить отладчик
Содержание
Отладчик в 1С 8.3 живёт в Конфигураторе. Чтобы запустить отладку файловой базы, откройте Конфигуратор, поставьте точку останова клавишей F9 на нужной строке модуля и нажмите F5 — платформа стартует 1С:Предприятие с подключённым отладчиком и остановится на этой строке. Дальше вы идёте по коду шагами и смотрите значения переменных.
Это самый частый сценарий. Но отладка нужна и там, где Конфигуратор не запускает сеанс сам: уже работающее приложение, серверный код в рабочем процессе, веб-клиент. Для них сеанс должен быть помечен как «отладка разрешена», а протокол отладки — совпадать на обеих сторонах. Ниже — как включить debug в каждом из этих случаев, какие протоколы выбрать и что делать, когда отладчик «не видит» нужный сеанс.
Быстрый запуск отладчика в файловой базе
Файловая база — самый простой случай: всё крутится в одном процессе, подключать ничего не надо.
- Откройте конфигурацию в режиме
Конфигуратор. - Найдите нужный модуль (модуль формы, общий модуль, модуль объекта) и встаньте на строку кода.
- Нажмите
F9— слева от строки появится красный кружок, это точка останова. - Нажмите
F5(менюОтладка → Начать отладку). Запустится 1С:Предприятие, и выполнение замрёт на вашей строке.
Когда отладчик остановился, работают горячие клавиши пошагового прохода:
F11— шаг внутрь процедуры (зайти в вызываемый метод);F10— шаг через (выполнить строку целиком, не заходя в вызовы);Shift+F11— шаг из текущей процедуры (выйти на уровень выше);F5— продолжить до следующей точки останова;Shift+F5— остановить отладку.
Значения переменных смотрите через Табло (меню Отладка → Табло) или наведением курсора на переменную. Разовое вычисление выражения — Shift+F9. Цепочку вызовов, которая привела в текущую точку, показывает окно Стек вызовов.
Точку останова можно сделать условной: правый клик по кружку → условие вроде Количество > 100. Отладчик остановится, только когда условие истинно. Это спасает, когда код в цикле на тысячи итераций.
Если нужно не останавливаться, а просто увидеть значение в журнале, вместо обычной точки останова задайте точку с выводом сообщения в «Табло» — код не замрёт, но значение переменной попадёт в лог. Так отлаживают места, где остановка сбивает сам сценарий: обработчики ожидания, фоновые операции, обмен данными.
Типовой разбор ошибки выглядит так: ставите точку останова на строке, где значение уже должно быть посчитано, запускаете сценарий, на остановке открываете Табло и сравниваете, что в переменной на самом деле, с тем, что вы ожидали. Чаще всего расхождение видно сразу — пустая строка вместо значения, не та дата, неинициализированный реквизит.
Как разрешить отладку для запущенного сеанса
Если 1С:Предприятие уже запущено отдельно (не из Конфигуратора), просто так отладчик к нему не подключится. Сеанс должен быть стартован с разрешением отладки.
Есть два способа включить это разрешение.
В самом приложении. В работающем 1С:Предприятии откройте главное меню (кнопка со стрелкой вниз в правом верхнем углу) → Сервис → Параметры и включите флажок разрешения отладки в текущем сеансе. После этого сеанс станет виден отладчику.
В Конфигураторе — чтобы разрешение ставилось автоматически. Зайдите в Сервис → Параметры, на вкладке запуска 1С:Предприятия включите установку режима разрешения отладки при запуске. Тогда каждый сеанс, запущенный из Конфигуратора, уже готов к отладке.
Чтобы подключиться к
такому сеансу, в Конфигураторе выберите Отладка → Подключение и в списке предметов отладки отметьте нужный сеанс. Если список пуст — значит, ни один запущенный сеанс не разрешил отладку, либо протокол отладки не совпадает (см. ниже).
Перед первым подключением удобно пройтись по короткому чек-листу.
Протокол отладки: TCP/IP или HTTP
1С 8.3 умеет отлаживать по двум протоколам, и они не совместимы между собой: если Конфигуратор слушает по одному, а сеанс поднят по другому, предмет отладки просто не появится в списке.
Выбор протокола — в Конфигураторе: Сервис → Параметры, вкладка Отладка, переключатель «по протоколу TCP/IP» / «по протоколу HTTP».
| Протокол | Когда применять | Особенности |
|---|---|---|
| TCP/IP | Локальная отладка, одна машина или простая сеть | Исторический вариант, минимум настроек |
| HTTP | Отладка через сеть, веб-клиент, окружение с файрволами | Работает там, где TCP блокируется; нужен отладочный сервер |
Веб-клиент и мобильный клиент отлаживаются только по протоколу HTTP. Если вы отлаживаете код, выполняемый в браузере, переключите протокол заранее — иначе сеанс не подключится, а причина будет неочевидной.
Для простых файловых баз на одной машине оставляйте TCP/IP — это меньше возни. HTTP берите, когда клиент и отлаживаемый процесс на разных компьютерах или между ними есть сетевые ограничения.
Отладка серверного кода в клиент-серверной базе
В клиент-серверном варианте часть кода (&НаСервере, общие модули с флагом «Сервер») выполняется в рабочем процессе rphost на сервере 1С. Чтобы ставить точки останова в серверных процедурах, отладку нужно разрешить на стороне сервера.
Разрешение отладки на рабочем сервере включается в параметрах запуска серверной службы (агента ragent). Для отладки по TCP/IP служба запускается с ключом -debug. Порядок такой:
- Остановите службу сервера 1С:Предприятия.
- Добавьте ключ
-debugв параметры запуска службы. - Запустите службу заново.
- В Конфигураторе выберите протокол TCP/IP и подключитесь к предмету отладки на сервере.
Остановка и перезапуск службы обрывает все пользовательские сеансы и фоновые задания. Делайте это только в технологическое окно, предупредив пользователей. На боевом сервере с активной работой так не делают среди дня.
Для отладки по HTTP на сервере используется отдельный процесс — отладочный сервер. Он принимает подключения от Конфигуратора и от рабочих процессов и сводит их вместе. Параметры его запуска (адрес, порт, регистрация как службы) задаются при настройке; точные ключи смотрите в справке самой утилиты, а не по памяти — здесь легко ошибиться и потом полдня искать, почему не подключается.
После включения отладки на сервере вы отлаживаете серверный код так же, как файловый: точки останова, шаги, табло. Разница только в том, что код исполняется на сервере, а вы видите его в Конфигураторе на своей машине.
Чтобы отладить именно серверную процедуру, а не её клиентскую обёртку, ставьте точку останова внутри метода с директивой &НаСервере или в общем модуле, у которого включён флаг «Сервер». Если точка стоит в клиентском коде, до сервера отладчик просто не дойдёт. Это частая причина, по которой «точка не срабатывает»: разработчик ждёт остановку в серверной логике, а сервер к отладке не подключён, либо точка оказалась на клиентской стороне вызова.
Утилиты администрирования кластера рядом с отладкой
Серверную отладку часто путают с удалённым администрированием кластера. Это разные вещи. Администрированием занимаются сервер администрирования ras и консольный клиент rac: они управляют кластером, информационными базами, сеансами и соединениями — но саму отладку не включают.
rac полезен вокруг отладки в двух случаях: посмотреть, какие сеансы сейчас висят на сервере, и аккуратно освободить базу перед перезапуском службы.
rac cluster list— список кластеров (отсюда берёте идентификатор кластера);rac session list— активные сеансы в базе;- остальные команды и параметры — в
rac help, не выдумывайте ключи по аналогии.
Команды rac, завершающие сеансы или соединения, выкидывают пользователей из базы без сохранения несохранённых данных. Применяйте их только когда понимаете, кого отключаете, и по возможности в технологическое окно.
Чтобы rac заработал, на сервере должен быть запущен ras и указан его адрес и порт. Это администраторская обвязка; к включению режима отладки она отношения не имеет, но знать про неё стоит — иначе легко потратить время, пытаясь «включить отладку
через rac», чего он не делает.
Замер производительности: где код тормозит
Отладчик показывает, что код делает. Чтобы понять, где он тормозит, в Конфигураторе есть замер производительности: Отладка → Замер производительности.
Как пользоваться:
- Запустите замер (меню
Отладка → Замер производительности). - Выполните в 1С:Предприятии ту операцию, которая медлит.
- Остановите замер.
Вы получите таблицу: по каждой строке кода — сколько раз она выполнялась и сколько времени суммарно заняла. Строки-«тяжеловесы» сразу видно по верхним значениям времени. Чаще всего это запросы в цикле, обращения к реквизитам объекта поштучно вместо пакетной выборки или лишние перечитывания данных.
Пример: обработка проводит 500 документов за 40 секунд. Замер показывает, что одна строка с запросом внутри цикла выполнилась 500 раз и съела 32 секунды из 40. Вывод очевиден — запрос нужно вынести из цикла и получить все данные одной выборкой. После правки те же 500 документов проходят за 6–7 секунд. Без замера вы бы гадали, а с ним виновная строка подсвечена числом.
Смотрите не только на суммарное время, но и на количество вызовов. Строка, которая выполняется десятки тысяч раз по чуть-чуть, в сумме иногда дороже одного тяжёлого запроса. Сортировка таблицы по времени и по числу вызовов — два разных взгляда на один и тот же код.
Для серверной нагрузки под многими пользователями одного замера мало. Тогда подключают технологический журнал (настраивается файлом logcfg.xml): он пишет события платформы — длительные запросы, ожидания на блокировках, ошибки. Это уже инструмент не на каждый день, но именно он помогает, когда «тормозит у всех, а у меня на тесте быстро».
Замер производительности и отладку можно вести в одном сеансе. Сначала замером находите медленный участок, потом точкой останова на этой строке разбираетесь, почему он медленный.
Частые ошибки при подключении отладчика
Большинство проблем с отладкой — это не баги платформы, а рассинхрон настроек. Вот с чем сталкиваются чаще всего.
Отдельный случай — права пользователя. Если в роли пользователя нет права на интерактивную отладку (или на внешнее соединение, когда отлаживается внешнее подключение), сеанс отладить не выйдет, даже когда все протоколы совпадают. Проверьте права в конфигурации.