Отладчик 1С:Предприятия: запуск, точки останова и серверный код

· 10 мин

Содержание

Режим отладки в 1С включают из Конфигуратора: откройте базу, нажмите F5 (Отладка → Начать отладку), и платформа запустит 1С:Предприятие с подключённым отладчиком. Для файловой базы этого достаточно. В клиент-серверной базе серверный код остановится на точке останова, только если сервер 1С запущен с ключом -debug.

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

Как запустить отладку в тонком клиенте

Способ 1. Из Конфигуратора по F5

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

Какой клиент запустится по F5, задают в настройках: Сервис → Параметры → Запуск 1С:Предприятия, поле с основным режимом запуска. Варианты: тонкий клиент, толстый клиент, веб-клиент или автоматический выбор. Для управляемых форм в интерфейсе «Такси» обычно выбирают тонкий клиент.

Если нужен другой клиент разово, не меняя настройку, раскройте меню Отладка → Начать отладку: там есть отдельные команды для каждого типа клиента.

Способ 2. Подключиться к уже работающему сеансу

Бывает, что ошибка воспроизводится только у конкретного пользователя с его правами и настройками. Тогда отладчик подключают к его сеансу:

  1. Пользователь запускает 1С:Предприятие с разрешённой отладкой (ключ /DEBUG, см. следующий раздел).
  2. В Конфигураторе той же базы откройте Отладка → Подключение.
  3. В списке предметов отладки выберите нужный сеанс клиента и нажмите «Подключить».

После этого точки останова, поставленные в Конфигураторе, начинают срабатывать в сеансе пользователя.

Сравнение способов

СпособКогда подходитЧто нужно
F5 из Конфигураторасвоя разработка, тестовая базатолько открытая конфигурация
Подключение к сеансуошибка у конкретного пользователяклиент запущен с /DEBUG
Автоподключениефоновые задания, HTTP-сервисы, веб-клиентнастроенный протокол и сервер с -debug

Параметры запуска и ключи командной строки для отладки

Отладку можно разрешить клиенту без Конфигуратора. Для этого служат ключи запуска 1cv8.exe:

  • 🔑 /DEBUG — разрешает отладку в запускаемом сеансе;
  • 🌐 -http после /DEBUG — переключает отладку на протокол HTTP;
  • 🔗 /DEBUGGERURL — адрес отладчика или сервера отладки, к которому клиент подключится сам.

Пример запуска тонкого клиента файловой базы с отладкой по HTTP:

"C:\Program Files\1cv8\common\1cestart.exe" ENTERPRISE /F"D:\Bases\Test" /DEBUG -http /DEBUGGERURL "http://localhost:1550"

Порт 1550 — порт сервера отладки по умолчанию для протокола HTTP. Если на машине его занял другой процесс, сервер отладки поднимется на другом порту, и адрес придётся поправить.

Чтобы не набирать команду каждый раз, ключи прописывают в свойствах базы в окне запуска: выделите базу → «Изменить» → последняя страница мастера → поле «Дополнительные параметры запуска». Туда пишут, например, /DEBUG -http.

TCP или HTTP: какой протокол выбрать

Исторически отладка в 1С 8.3 шла по протоколу TCP. Позже появилась отладка по HTTP через отдельный сервер отладки dbgs.exe. Её используют по умолчанию в современных версиях платформы и в 1С:EDT.

ПротоколПлюсыМинусы
TCPработает на старых платформахкапризен к сетевым настройкам, больше портов
HTTPодин порт, проще пробросить через сеть, нужен для EDTтребует согласованной настройки у клиента и сервера

Главное правило: протокол должен совпадать у Конфигуратора, клиента и сервера 1С. Протокол по умолчанию для Конфигуратора выбирают в Сервис → Параметры, в разделе настроек отладки. Если сервер запущен с -debug -http, а Конфигуратор ждёт TCP, точки останова в серверном коде молчат.

Точки останова, пошаговое выполнение и горячие клавиши отладчика

Точку останова ставят в модуле на нужной строке: двойной щелчок по левому полю или F9. Строка подсвечивается красным кружком. Когда выполнение доходит до неё, клиент замирает, а Конфигуратор показывает строку и текущие значения переменных.

Горячие клавиши режима отладки

ДействиеКлавиши
Начать отладку / продолжить выполнениеF5
Завершить отладкуShift+F5
Поставить или снять точку остановаF9
Список точек остановаAlt+F9
Шагнуть в (зайти внутрь процедуры)F11
Шагнуть через (выполнить строку целиком)F10
Шагнуть из (выйти из текущей процедуры)Shift+F11
Идти до курсораCtrl+F10
Вычислить выражениеShift+F9
Стек вызововCtrl+Alt+C
Табло (окно наблюдения)Ctrl+Alt+W

Все эти команды продублированы в меню Отладка, так что сочетание можно подсмотреть там же.

Условные точки и отключение без удаления

Обычная точка останова срабатывает каждый раз. В цикле на 5000 строк табличной части это неудобно. Поэтому есть точка останова с условием: щёлкните правой кнопкой по строке, выберите команду точки с условием и впишите выражение, например НомерСтроки = 3127 или Номенклатура.Код = "00-00001542". Отладчик остановится только тогда, когда условие истинно.

Точки, которые пока не нужны, лучше отключать, а не удалять. Отключённая точка остаётся в списке (Alt+F9), её можно включить одним щелчком. В том же списке все точки снимают разом, а двойной щелчок переводит к строке модуля.

Окно «Вычислить выражение» и табло

Самый полезный инструмент после точки останова — Shift+F9. Выделите переменную или выражение и нажмите сочетание: откроется окно со значением. Для коллекций, таблиц значений и результатов запроса окно показывает содержимое построчно. Туда можно вписать и произвольное выражение, например ТаблицаТоваров.Итог("Сумма") или Документ.Проведен.

Табло (Ctrl+Alt+W) держит выражения на экране постоянно: значения обновляются на каждом шаге. Удобно, когда нужно следить, как меняется остаток или счётчик внутри цикла.

В окне вычисления выражение действительно выполняется. Если вписать туда вызов функции, которая пишет в базу, запись произойдёт. В рабочей базе такие эксперименты не проводите.

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

Файловая база

В файловом варианте серверный код (процедуры с директивой &НаСервере, модули объектов, общие модули с флажком «Сервер») выполняется в том же процессе, что и клиент. Отдельной настройки не нужно: после F5 точки останова срабатывают и в клиентских, и в серверных процедурах.

Клиент-серверная база: ключ -debug у агента сервера

В клиент-серверном варианте серверный код исполняют рабочие процессы кластера. Чтобы отладчик мог к ним подключиться, агент сервера ragent нужно запустить с ключом -debug. Для отладки по HTTP добавляют ещё -http.

В Windows агент работает как служба. Ключ дописывают в командную строку службы, в параметр ImagePath раздела реестра:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\<имя службы агента 1С>

Имя службы зависит от версии и разрядности, например 1C:Enterprise 8.3 Server Agent (x86-64). Конец строки после правки выглядит примерно так:

... ragent.exe" -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -d "C:\srvinfo" -debug -http

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

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

В Linux ключ -debug добавляют в строку запуска ragent в unit-файле systemd или в скрипте запуска сервера, затем перечитывают конфигурацию и перезапускают службу.

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

Отладка веб-клиента

Для веб-клиента база должна быть опубликована на веб-сервере (IIS или Apache), а в публикации разрешена отладка. В файле публикации default.vrd за это отвечает элемент debug:

<debug enable="true" protocol="http" url="http://localhost:1550"/>

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

Фоновые задания и HTTP-сервисы

У фонового задания, регламентного задания или вызова HTTP-сервиса нет клиента, которого можно было бы запустить по F5. Поэтому используют автоподключение: Отладка → Подключение → кнопка автоматического подключения → отметьте нужные типы предметов отладки (фоновое задание, HTTP-сервис, веб-сервис). Когда такой процесс стартует, отладчик подцепится к нему сам и остановится на точке.

Как найти причину ошибки: остановка по ошибке и стек вызовов

Когда пользователь видит окно с текстом вроде {ОбщийМодуль.ОбменДанными.Модуль(214)}: Поле объекта не обнаружено (Склад), номер в скобках — это строка модуля. Иногда достаточно открыть модуль , нажать Ctrl+G и перейти к строке 214.

Но строка, где упал код, часто не та, где ошибка возникла. Переменная получила пустое значение тремя вызовами выше. Здесь помогают два инструмента.

Остановка по ошибке

Команда Отладка → Остановка по ошибке заставляет отладчик замирать в момент исключения, ещё до того, как его перехватит Попытка ... Исключение или платформа покажет сообщение. В окне настройки можно ограничить остановку текстом ошибки, например Деление на 0. Это спасает в конфигурациях, где ошибки массово перехватываются и глотаются: без фильтра отладчик будет останавливаться на каждом штатном исключении.

Стек вызовов

Когда выполнение стоит на точке или на ошибке, откройте стек (Ctrl+Alt+C). Окно показывает цепочку: какая процедура вызвала текущую, кто вызвал ту и так далее до обработчика события формы или команды. Двойной щелчок по строке стека переводит в соответствующий модуль, и там можно посмотреть значения локальных переменных именно на том уровне.

Типовой порядок разбора:

  1. Включите остановку по ошибке и воспроизведите действие пользователя.
  2. Отладчик остановился — посмотрите в «Вычислить выражение» значение, на котором упало.
  3. Откройте стек и поднимайтесь по уровням, пока не найдёте место, где значение стало неверным.
  4. Поставьте точку останова туда и повторите действие, чтобы пройти этот участок по F10/F11.

Когда отладчик подключить нельзя

На рабочем сервере без -debug ошибку разбирают по журналу регистрации: Администрирование → Обслуживание → Журнал регистрации в БП 3.0 и подобных конфигурациях на БСП, или Администрирование → Журнал регистрации в Конфигураторе. Если код ваш, в обработчике исключения полезно записать полный текст ошибки:

Попытка
	ВыполнитьОбмен(Узел);
Исключение
	ЗаписьЖурналаРегистрации("Обмен.Ошибка", УровеньЖурналаРегистрации.Ошибка, , ,
		ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
	ВызватьИсключение;
КонецПопытки;

ПодробноеПредставлениеОшибки выводит модуль, строку и цепочку вызовов, то есть почти то же, что стек в отладчике.

Почему не срабатывает отладка: проблемы и решения

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

Ещё две вещи, которые часто упускают:

  • 🔒 Брандмауэр. При отладке по HTTP клиент и сервер 1С обращаются к серверу отладки по его порту (по умолчанию 1550). Если Конфигуратор стоит на одной машине, а сервер на другой, порт должен быть открыт.
  • 🐢 Тормоза. Сеанс под отладчиком работает медленнее, особенно с десятками точек и включённой остановкой по ошибке. Замеры времени под отладчиком не показательны. Для них есть отдельный инструмент Отладка → Замер производительности.

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

Можно ли отлаживать код без Конфигуратора?
Да. В 1С:EDT есть собственный отладчик, он работает по протоколу HTTP через сервер отладки. Ключи запуска клиента и сервера те же: /DEBUG -http и ragent -debug -http.
Видят ли пользователи, что сервер запущен в режиме отладки?
Нет, внешне ничего не меняется. Но если отладчик остановился на точке в их сеансе, у пользователя всё зависнет до продолжения выполнения. Поэтому на рабочем сервере точки останова не ставят.
Почему значения переменных показываются как «Неопределено», хотя код их заполняет?
Чаще всего вы смотрите не тот уровень стека или строка с присваиванием ещё не выполнена: отладчик останавливается перед строкой с точкой, а не после неё. Сделайте шаг по F10 и посмотрите снова.
Нужна ли отдельная лицензия для режима отладки?
Отдельной лицензии на отладку нет. Сеанс клиента, запущенный по F5, занимает клиентскую лицензию так же, как обычный запуск.
Можно ли отлаживать обработку, открытую через «Файл → Открыть»?
Да. Откройте внешнюю обработку в Конфигураторе, поставьте точки останова в её модулях и запустите её в клиенте, работающем под отладкой. Отладчик остановится, если в клиенте открыт тот же файл, что и в Конфигураторе.