Отладчик 1С:Предприятия: запуск, точки останова и серверный код
Содержание
Режим отладки в 1С включают из Конфигуратора: откройте базу, нажмите F5 (Отладка → Начать отладку), и платформа запустит 1С:Предприятие с подключённым отладчиком. Для файловой базы этого достаточно. В клиент-серверной базе серверный код остановится на точке останова, только если сервер 1С запущен с ключом -debug.
Способов включить отладку три, и выбирают их по ситуации. Свой код в тестовой базе удобнее всего запускать по F5. Уже открытый сеанс пользователя подключают через Отладка → Подключение. Если нужно ловить ошибку там, где Конфигуратор не запускает клиент сам (веб-клиент, фоновые задания, HTTP-сервисы), используют ключи командной строки и автоподключение.
Как запустить отладку в тонком клиенте
Способ 1. Из Конфигуратора по F5
- Откройте базу в режиме Конфигуратора и откройте конфигурацию (
Конфигурация → Открыть конфигурацию). - Если модули менялись, сохраните изменения и обновите конфигурацию базы данных (
F7). Иначе строки, где стоят точки останова, не совпадут с исполняемым кодом. - Нажмите
F5. Запустится клиент 1С:Предприятия, а Конфигуратор переключится в режим отладки: в менюОтладкастанут активны команды пошагового выполнения.
Какой клиент запустится по F5, задают в настройках: Сервис → Параметры → Запуск 1С:Предприятия, поле с основным режимом запуска. Варианты: тонкий клиент, толстый клиент, веб-клиент или автоматический выбор. Для управляемых форм в интерфейсе «Такси» обычно выбирают тонкий клиент.
Если нужен другой клиент разово, не меняя настройку, раскройте меню Отладка → Начать отладку: там есть отдельные команды для каждого типа клиента.
Способ 2. Подключиться к уже работающему сеансу
Бывает, что ошибка воспроизводится только у конкретного пользователя с его правами и настройками. Тогда отладчик подключают к его сеансу:
- Пользователь запускает 1С:Предприятие с разрешённой отладкой (ключ
/DEBUG, см. следующий раздел). - В Конфигураторе той же базы откройте
Отладка → Подключение. - В списке предметов отладки выберите нужный сеанс клиента и нажмите «Подключить».
После этого точки останова, поставленные в Конфигураторе, начинают срабатывать в сеансе пользователя.
Сравнение способов
| Способ | Когда подходит | Что нужно |
|---|---|---|
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). Окно показывает цепочку: какая процедура вызвала текущую, кто вызвал ту и так далее до обработчика события формы или команды. Двойной щелчок по строке стека переводит в соответствующий модуль, и там можно посмотреть значения локальных переменных именно на том уровне.
Типовой порядок разбора:
- Включите остановку по ошибке и воспроизведите действие пользователя.
- Отладчик остановился — посмотрите в «Вычислить выражение» значение, на котором упало.
- Откройте стек и поднимайтесь по уровням, пока не найдёте место, где значение стало неверным.
- Поставьте точку останова туда и повторите действие, чтобы пройти этот участок по
F10/F11.
Когда отладчик подключить нельзя
На рабочем сервере без -debug ошибку разбирают по журналу регистрации: Администрирование → Обслуживание → Журнал регистрации в БП 3.0 и подобных конфигурациях на БСП, или Администрирование → Журнал регистрации в Конфигураторе. Если код ваш, в обработчике исключения полезно записать полный текст ошибки:
Попытка
ВыполнитьОбмен(Узел);
Исключение
ЗаписьЖурналаРегистрации("Обмен.Ошибка", УровеньЖурналаРегистрации.Ошибка, , ,
ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
ВызватьИсключение;
КонецПопытки;
ПодробноеПредставлениеОшибки выводит модуль, строку и цепочку вызовов, то есть почти то же, что стек в отладчике.
Почему не срабатывает отладка: проблемы и решения
Ещё две вещи, которые часто упускают:
- 🔒 Брандмауэр. При отладке по HTTP клиент и сервер 1С обращаются к серверу отладки по его порту (по умолчанию
1550). Если Конфигуратор стоит на одной машине, а сервер на другой, порт должен быть открыт. - 🐢 Тормоза. Сеанс под отладчиком работает медленнее, особенно с десятками точек и включённой остановкой по ошибке. Замеры времени под отладчиком не показательны. Для них есть отдельный инструмент
Отладка → Замер производительности.