Отладка в 1С 8.3: как запустить и настроить отладчик

· 9 мин

Содержание

Отладчик в 1С 8.3 живёт в Конфигураторе. Чтобы запустить отладку файловой базы, откройте Конфигуратор, поставьте точку останова клавишей F9 на нужной строке модуля и нажмите F5 — платформа стартует 1С:Предприятие с подключённым отладчиком и остановится на этой строке. Дальше вы идёте по коду шагами и смотрите значения переменных.

Это самый частый сценарий. Но отладка нужна и там, где Конфигуратор не запускает сеанс сам: уже работающее приложение, серверный код в рабочем процессе, веб-клиент. Для них сеанс должен быть помечен как «отладка разрешена», а протокол отладки — совпадать на обеих сторонах. Ниже — как включить debug в каждом из этих случаев, какие протоколы выбрать и что делать, когда отладчик «не видит» нужный сеанс.

Быстрый запуск отладчика в файловой базе

Файловая база — самый простой случай: всё крутится в одном процессе, подключать ничего не надо.

  1. Откройте конфигурацию в режиме Конфигуратор.
  2. Найдите нужный модуль (модуль формы, общий модуль, модуль объекта) и встаньте на строку кода.
  3. Нажмите F9 — слева от строки появится красный кружок, это точка останова.
  4. Нажмите F5 (меню Отладка → Начать отладку). Запустится 1С:Предприятие, и выполнение замрёт на вашей строке.

Когда отладчик остановился, работают горячие клавиши пошагового прохода:

  • F11 — шаг внутрь процедуры (зайти в вызываемый метод);
  • F10 — шаг через (выполнить строку целиком, не заходя в вызовы);
  • Shift+F11 — шаг из текущей процедуры (выйти на уровень выше);
  • F5 — продолжить до следующей точки останова;
  • Shift+F5 — остановить отладку.

Значения переменных смотрите через Табло (меню Отладка → Табло) или наведением курсора на переменную. Разовое вычисление выражения — Shift+F9. Цепочку вызовов, которая привела в текущую точку, показывает окно Стек вызовов.

Точку останова можно сделать условной: правый клик по кружку → условие вроде Количество > 100. Отладчик остановится, только когда условие истинно. Это спасает, когда код в цикле на тысячи итераций.

Если нужно не останавливаться, а просто увидеть значение в журнале, вместо обычной точки останова задайте точку с выводом сообщения в «Табло» — код не замрёт, но значение переменной попадёт в лог. Так отлаживают места, где остановка сбивает сам сценарий: обработчики ожидания, фоновые операции, обмен данными.

Типовой разбор ошибки выглядит так: ставите точку останова на строке, где значение уже должно быть посчитано, запускаете сценарий, на остановке открываете Табло и сравниваете, что в переменной на самом деле, с тем, что вы ожидали. Чаще всего расхождение видно сразу — пустая строка вместо значения, не та дата, неинициализированный реквизит.

Как разрешить отладку для запущенного сеанса

Если 1С:Предприятие уже запущено отдельно (не из Конфигуратора), просто так отладчик к нему не подключится. Сеанс должен быть стартован с разрешением отладки.

Есть два способа включить это разрешение.

В самом приложении. В работающем 1С:Предприятии откройте главное меню (кнопка со стрелкой вниз в правом верхнем углу) → Сервис → Параметры и включите флажок разрешения отладки в текущем сеансе. После этого сеанс станет виден отладчику.

В Конфигураторе — чтобы разрешение ставилось автоматически. Зайдите в Сервис → Параметры, на вкладке запуска 1С:Предприятия включите установку режима разрешения отладки при запуске. Тогда каждый сеанс, запущенный из Конфигуратора, уже готов к отладке.

Чтобы подключиться к такому сеансу, в Конфигураторе выберите Отладка → Подключение и в списке предметов отладки отметьте нужный сеанс. Если список пуст — значит, ни один запущенный сеанс не разрешил отладку, либо протокол отладки не совпадает (см. ниже).

Перед первым подключением удобно пройтись по короткому чек-листу.

Готовность к подключению отладчика
Выполнено: 0 / 5

Протокол отладки: TCP/IP или HTTP

1С 8.3 умеет отлаживать по двум протоколам, и они не совместимы между собой: если Конфигуратор слушает по одному, а сеанс поднят по другому, предмет отладки просто не появится в списке.

Выбор протокола — в Конфигураторе: Сервис → Параметры, вкладка Отладка, переключатель «по протоколу TCP/IP» / «по протоколу HTTP».

ПротоколКогда применятьОсобенности
TCP/IPЛокальная отладка, одна машина или простая сетьИсторический вариант, минимум настроек
HTTPОтладка через сеть, веб-клиент, окружение с файрволамиРаботает там, где TCP блокируется; нужен отладочный сервер

Веб-клиент и мобильный клиент отлаживаются только по протоколу HTTP. Если вы отлаживаете код, выполняемый в браузере, переключите протокол заранее — иначе сеанс не подключится, а причина будет неочевидной.

Для простых файловых баз на одной машине оставляйте TCP/IP — это меньше возни. HTTP берите, когда клиент и отлаживаемый процесс на разных компьютерах или между ними есть сетевые ограничения.

Отладка серверного кода в клиент-серверной базе

В клиент-серверном варианте часть кода (&НаСервере, общие модули с флагом «Сервер») выполняется в рабочем процессе rphost на сервере 1С. Чтобы ставить точки останова в серверных процедурах, отладку нужно разрешить на стороне сервера.

Разрешение отладки на рабочем сервере включается в параметрах запуска серверной службы (агента ragent). Для отладки по TCP/IP служба запускается с ключом -debug. Порядок такой:

  1. Остановите службу сервера 1С:Предприятия.
  2. Добавьте ключ -debug в параметры запуска службы.
  3. Запустите службу заново.
  4. В Конфигураторе выберите протокол TCP/IP и подключитесь к предмету отладки на сервере.

Остановка и перезапуск службы обрывает все пользовательские сеансы и фоновые задания. Делайте это только в технологическое окно, предупредив пользователей. На боевом сервере с активной работой так не делают среди дня.

Для отладки по HTTP на сервере используется отдельный процесс — отладочный сервер. Он принимает подключения от Конфигуратора и от рабочих процессов и сводит их вместе. Параметры его запуска (адрес, порт, регистрация как службы) задаются при настройке; точные ключи смотрите в справке самой утилиты, а не по памяти — здесь легко ошибиться и потом полдня искать, почему не подключается.

После включения отладки на сервере вы отлаживаете серверный код так же, как файловый: точки останова, шаги, табло. Разница только в том, что код исполняется на сервере, а вы видите его в Конфигураторе на своей машине.

Чтобы отладить именно серверную процедуру, а не её клиентскую обёртку, ставьте точку останова внутри метода с директивой &НаСервере или в общем модуле, у которого включён флаг «Сервер». Если точка стоит в клиентском коде, до сервера отладчик просто не дойдёт. Это частая причина, по которой «точка не срабатывает»: разработчик ждёт остановку в серверной логике, а сервер к отладке не подключён, либо точка оказалась на клиентской стороне вызова.

Утилиты администрирования кластера рядом с отладкой

Серверную отладку часто путают с удалённым администрированием кластера. Это разные вещи. Администрированием занимаются сервер администрирования ras и консольный клиент rac: они управляют кластером, информационными базами, сеансами и соединениями — но саму отладку не включают.

rac полезен вокруг отладки в двух случаях: посмотреть, какие сеансы сейчас висят на сервере, и аккуратно освободить базу перед перезапуском службы.

  • rac cluster list — список кластеров (отсюда берёте идентификатор кластера);
  • rac session list — активные сеансы в базе;
  • остальные команды и параметры — в rac help, не выдумывайте ключи по аналогии.

Команды rac, завершающие сеансы или соединения, выкидывают пользователей из базы без сохранения несохранённых данных. Применяйте их только когда понимаете, кого отключаете, и по возможности в технологическое окно.

Чтобы rac заработал, на сервере должен быть запущен ras и указан его адрес и порт. Это администраторская обвязка; к включению режима отладки она отношения не имеет, но знать про неё стоит — иначе легко потратить время, пытаясь «включить отладку через rac», чего он не делает.

Замер производительности: где код тормозит

Отладчик показывает, что код делает. Чтобы понять, где он тормозит, в Конфигураторе есть замер производительности: Отладка → Замер производительности.

Как пользоваться:

  1. Запустите замер (меню Отладка → Замер производительности).
  2. Выполните в 1С:Предприятии ту операцию, которая медлит.
  3. Остановите замер.

Вы получите таблицу: по каждой строке кода — сколько раз она выполнялась и сколько времени суммарно заняла. Строки-«тяжеловесы» сразу видно по верхним значениям времени. Чаще всего это запросы в цикле, обращения к реквизитам объекта поштучно вместо пакетной выборки или лишние перечитывания данных.

Пример: обработка проводит 500 документов за 40 секунд. Замер показывает, что одна строка с запросом внутри цикла выполнилась 500 раз и съела 32 секунды из 40. Вывод очевиден — запрос нужно вынести из цикла и получить все данные одной выборкой. После правки те же 500 документов проходят за 6–7 секунд. Без замера вы бы гадали, а с ним виновная строка подсвечена числом.

Смотрите не только на суммарное время, но и на количество вызовов. Строка, которая выполняется десятки тысяч раз по чуть-чуть, в сумме иногда дороже одного тяжёлого запроса. Сортировка таблицы по времени и по числу вызовов — два разных взгляда на один и тот же код.

Для серверной нагрузки под многими пользователями одного замера мало. Тогда подключают технологический журнал (настраивается файлом logcfg.xml): он пишет события платформы — длительные запросы, ожидания на блокировках, ошибки. Это уже инструмент не на каждый день, но именно он помогает, когда «тормозит у всех, а у меня на тесте быстро».

Замер производительности и отладку можно вести в одном сеансе. Сначала замером находите медленный участок, потом точкой останова на этой строке разбираетесь, почему он медленный.

Частые ошибки при подключении отладчика

Большинство проблем с отладкой — это не баги платформы, а рассинхрон настроек. Вот с чем сталкиваются чаще всего.

Диагностика: выберите симптом

Отдельный случай — права пользователя. Если в роли пользователя нет права на интерактивную отладку (или на внешнее соединение, когда отлаживается внешнее подключение), сеанс отладить не выйдет, даже когда все протоколы совпадают. Проверьте права в конфигурации.

Частые вопросы

Нужна ли отдельная лицензия, чтобы отлаживать код?
Отдельной лицензии именно на отладку нет. Нужна лицензия платформы, чтобы запустить Конфигуратор и 1С:Предприятие. На учебной версии платформы отладка работает в рамках её ограничений.
Можно ли отлаживать на боевой базе с работающими пользователями?
Файловую отладку своего сеанса — можно, вы влияете только на себя. Серверную отладку включать на боевом сервере опасно: это требует перезапуска службы и влияет на всех. Для серверного кода поднимайте тестовую базу — копию боевой.
Чем отличается отладка от замера производительности?
Отладка показывает логику: вы идёте по строкам и смотрите значения переменных. Замер производительности показывает скорость: сколько времени заняла каждая строка. Первое отвечает на вопрос «почему неправильно», второе — «почему медленно».
Можно ли поставить точку останова по условию?
Да. Правый клик по точке останова → задайте условие (например, по значению переменной). Отладчик замрёт, только когда условие выполнится, — удобно внутри длинных циклов.
Отладчик встроен в Конфигуратор или это отдельная программа?
Встроен в Конфигуратор. Отдельно ставить ничего не нужно. Для клиент-серверной HTTP-отладки дополнительно используется отладочный сервер на стороне сервера 1С, но интерфейс отладки всё равно в Конфигураторе.
Почему точка останова серая и перечёркнутая?
Платформа считает, что на этой строке остановиться нельзя: строка не содержит исполняемого кода (комментарий, объявление) либо модуль не попадает в текущий сценарий выполнения. Перенесите точку на строку с реальной инструкцией.