Отладчик 1С 8.3 на практике: от первой точки останова до серверного кода
Содержание
Чтобы работать с отладчиком 1С, откройте базу в Конфигураторе, поставьте точку останова клавишей F9 на нужной строке модуля и запустите программу через Отладка → Начать отладку (F5). Когда выполнение дойдёт до строки, Конфигуратор перехватит управление: дальше вы шагаете по коду (F10, F11) и смотрите значения переменных.
Частое заблуждение — «точка не срабатывает, значит, код не выполняется». На деле чаще всего отладчик просто не подключён к нужному процессу: серверный код в клиент-серверной базе, фоновое задание или HTTP-сервис требуют отдельной настройки. Ниже — как эффективно работать с отладчиком 1С во всех этих случаях.
Подготовка к отладке: файловая и клиент-серверная база
В файловой базе ничего настраивать не нужно. Открыли Конфигуратор, нажали F5 — запустился клиент в режиме отладки, и отладчик видит и клиентский, и серверный код.
Если конфигурация изменена и не сохранена в базе данных, при F5 Конфигуратор предложит обновить конфигурацию
БД. Без обновления в клиенте будет работать старый код, а точки останова в новых строках «промахнутся».
В клиент-серверной базе серверный код выполняется в рабочем процессе кластера. Чтобы отладчик до него добрался, сервер 1С должен быть запущен с разрешённой отладкой.
- Откройте свойства службы «Агент сервера 1С:Предприятия» и посмотрите строку запуска
ragent.exe. - Проверьте, есть ли в ней ключ
-debug. Для отладки по протоколу HTTP используется пара-debug -http. - Если ключа нет, его добавляют в параметры службы и перезапускают её.
Перезапуск службы агента обрывает все сеансы пользователей на этом сервере. Делайте это вне рабочего времени и предупредите людей заранее. На рабочем сервере отладку лучше не держать включённой постоянно: проще развернуть копию базы на тестовом сервере.
Какой протокол выбрать. В платформе 8.3 есть два протокола отладки: старый TCP и HTTP через сервер отладки (dbgs.exe). HTTP удобнее: он позволяет отлаживать веб-клиент, мобильные приложения и проще проходит через сетевые ограничения. Протокол задаётся в параметрах Конфигуратора (Сервис → Параметры), на вкладке с настройками запуска и отладки. Протокол в Конфигураторе и на сервере должен совпадать.
Запуск клиента с отладкой вручную. Иногда нужно отлаживать уже открытый сеанс или клиент на другом компьютере. Для этого клиент запускают с параметрами командной строки:
"C:\Program Files\1cv8\common\1cestart.exe" ENTERPRISE /S"srv01\buh" /DEBUG /DEBUGGERURL"http://pc-dev:1550"
Здесь /DEBUG включает режим отладки, а /DEBUGGERURL говорит клиенту, к какому отладчику подключаться. Адрес и порт подставьте свои: 1550 — порт сервера отладки по умолчанию при HTTP-отладке.
Точки останова: обычные, с условием и по ошибке
Точка останова — строка, на которой выполнение замрёт и управление перейдёт в Конфигуратор.
Как поставить:
- 🔴 курсор на строку и
F9(повторное нажатие снимает точку); - 🔴 двойной щелчок по серому полю слева от номера строки;
- 🔴 меню
Отладка → Точка останова.
Точку можно ставить только на строку с исполняемым оператором. На пустой строке, комментарии или объявлении Перем она не сработает.
Точка останова с условием. Нужна, когда цикл проходит 5000 строк, а ошибка возникает на одной. Вызывается из меню Отладка → Точка останова с условием. В поле условия пишется обычное выражение на встроенном языке:
Строка.Номенклатура.Код = "00-00001234"
Отладчик остановится только тогда, когда условие истинно. Это экономит сотни нажатий F5.
Список точек останова (Отладка → Список точек останова, Alt+F9) показывает все точки во всех модулях. Здесь их удобно временно отключать, не удаляя, и переходить к нужной строке двойным щелчком.
Остановка по ошибке. Включается в Отладка → Остановка по ошибке. Отладчик остановится на той строке, где возникло исключение, даже если оно перехвачено в Попытка ... Исключение. В настройке можно указать фрагмент текста ошибки — тогда остановка будет только на нужном исключении, а не на каждом.
Если пользователь присылает скриншот с текстом ошибки, но не знает, где она возникла, — включите остановку по ошибке с фрагментом этого текста и повторите его действия. Отладчик сам приведёт к строке.
Пошаговое выполнение кода в отладчике 1С
После остановки текущая строка подсвечивается стрелкой. Дальше выбираете, как двигаться:
| Команда | Клавиши | Что делает |
|---|---|---|
| Шагнуть в | F11 | Выполняет строку; если в ней вызов процедуры — заходит внутрь |
| Шагнуть через | F10 | Выполняет строку целиком, не заходя в вызываемые процедуры |
| Шагнуть из | Shift+F11 | Дорабатывает текущую процедуру и останавливается в месте её вызова |
| Идти до курсора | Shift+F10 | Выполняет код до строки, где стоит курсор |
| Продолжить | F5 | Выполняет код до следующей точки останова |
| Завершить отладку | Shift+F5 | Закрывает отлаживаемый сеанс |
Как этим пользоваться на практике:
- Ставите одну точку останова на входе в проблемную процедуру.
- Идёте
F10по строкам, пока не дойдёте до подозрительного вызова. - На нём жмёте
F11и проваливаетесь внутрь. - Если внутри всё понятно и неинтересно —
Shift+F11возвращает обратно.
Идти до курсора выручает в длинных циклах: ставите курсор на строку после цикла и не проходите его вручную.
Остановить «зависший» код. Если клиент ушёл в бесконечный цикл, команда Отладка → Остановить выполнение (Ctrl+Break) прервёт его на текущей строке. Так можно увидеть, где именно крутится выполнение.
Значения переменных: подсказка, Табло, вычисление выражений и стек вызовов
Остановились — теперь смотрите данные.
Всплывающая подсказка. Наведите курсор на переменную в модуле — появится её значение. Для простых типов этого хватает.
Вычислить выражение (Shift+F9). Выделите переменную или выражение и нажмите Shift+F9. Откроется окно, где видно значение, тип и раскрываемое дерево реквизитов. Сюда можно ввести любое выражение, например:
Объект.Товары.Итог("Сумма")
ЗначениеЗаполнено(Объект.Контрагент) И Объект.Контрагент.ЭтоГруппа
Таблицы значений, табличные части и результаты запроса раскрываются в окне в виде таблицы — видно все строки и колонки.
Выражение в окне вычисляется по-настоящему. Если вписать вызов функции, которая что-то записывает в базу, запись произойдёт. Проверяйте значения, но не вызывайте процедуры с побочными эффектами.
Табло (Отладка → Табло). Это постоянное окно для выражений, за которыми нужно следить на каждом шаге. Добавили Сч, Итого, ТекСтрока.Цена — и при каждом F10 значения обновляются сами. Табло удобнее, чем каждый раз вызывать Shift+F9.
Стек вызовов (Отладка → Стек вызовов, Ctrl+Alt+C). Показывает цепочку: какая процедура вызвала текущую, а её — какая. Двойной щелчок по строке стека открывает модуль на месте вызова. Так быстро находится, откуда пришло неверное значение параметра.
Быстрый вызов: горячие клавиши и контекстные команды отладчика
Отладчик 1С удобнее всего водить с клавиатуры. Помимо шагов из таблицы выше, держите под рукой:
- ⌨️
F9— поставить или снять точку останова; - ⌨️
Alt+F9— список точек останова; - ⌨️
Shift+F9— вычислить выделенное выражение; - ⌨️
Ctrl+Alt+C— стек вызовов; - ⌨️
Ctrl+Break— прервать выполнение; - ⌨️
F7— обновить конфигурацию БД перед запуском.
Контекстное меню модуля. Щелчок правой кнопкой по строке в режиме отладки даёт быстрый доступ к командам для этой строки: точка останова, переход к курсору, вычисление выражения под курсором. Это быстрее, чем искать команду в меню Отладка.
Из окна «Вычислить выражение» в Табло. Выражение, которое вы проверили в окне вычисления, можно перенести в Табло, чтобы не вводить его заново. Это удобно, когда разовая проверка превращается в слежку за значением.
Замер производительности (Отладка → Замер производительности). Формально это не отладка, но запускается из того же меню. Включили замер, выполнили медленную операцию, выключили — Конфигуратор покажет, сколько времени и раз выполнялась каждая строка. Так находят строку, на которую уходит 90% времени, вместо того чтобы гадать.
Отладка серверного кода, фоновых заданий и HTTP-сервисов
В управляемых формах код делится директивами &НаКлиенте, &НаСервере, &НаСервереБезКонтекста. Отладчик проходит через границу клиента и сервера: шагнули F11 в серверную процедуру — оказались на сервере. Но только если отладчик подключён к обоим процессам.
Окно «Предметы отладки». Открывается через Отладка → Подключение. В нём видно, к каким процессам подключён отладчик: клиентские сеансы, серверные процессы, фоновые задания. Отсюда же можно подключиться к
уже запущенному сеансу пользователя, если он стартовал с ключом /DEBUG.
Автоматическое подключение. В том же окне есть настройка автоматического подключения: отмечаете, какие предметы отладки подключать без вашего участия. Чтобы ловить точки в фоновых и регламентных заданиях, HTTP-сервисах и веб-сервисах, их нужно отметить здесь. По умолчанию отладчик к ним не цепляется.
Как отладить регламентное задание без ожидания расписания:
- Поставьте точку останова в процедуре, указанной в регламентном задании.
- Включите автоматическое подключение к фоновым заданиям.
- Запустите задание вручную — из обработки управления регламентными заданиями в пользовательском режиме или вызовом процедуры из тестовой обработки.
Для отладки фоновых заданий в клиент-серверной базе удобнее HTTP-протокол: подключение к фоновым процессам через сервер отладки проходит стабильнее.
Отладка веб-клиента и публикации. Для веб-клиента и HTTP-сервисов, опубликованных на веб-сервере, отладку разрешают в файле публикации default.vrd — элемент debug с атрибутом enable="true". После правки файла веб-сервер обычно приходится перезапустить.
Внешние обработки и отчёты. Откройте файл .epf в Конфигураторе через Файл → Открыть, поставьте точки останова и запустите тот же самый файл в клиенте, запущенном с отладкой. Путь к файлу должен совпадать: копия из другой папки для отладчика — другой объект.
Расширения конфигурации . Код расширений отлаживается так же, как основной: откройте модуль расширения в Конфигураторе и ставьте точки. Расширение должно быть обновлено в базе данных, иначе исполняется прежняя версия.
Частые ошибки при работе с отладчиком
- 🐞 Отладка на рабочей базе без предупреждения. Пока вы стоите на точке останова внутри транзакции, данные, которые она затронула, остаются заблокированными. Другие пользователи ловят ожидание блокировки. Отлаживайте проведение документов на копии.
- 🐞 Точка в модуле формы ставится не в ту копию модуля. У общей формы и формы объекта разные модули. Убедитесь, что открыт модуль именно той формы, которую открывает пользователь.
- 🐞 Забытые точки останова. Через неделю вы запускаете отладку для другой задачи, и выполнение спотыкается о старые точки. Чистите их через
Alt+F9. - 🐞 Ожидание остановки в клиентском коде при открытии из веб-клиента. Если пользователь работает через браузер, а публикация без отладки, клиентские точки не сработают.
- 🐞 Вычисление «тяжёлых» выражений. Выражение
Справочники.Номенклатура.Выбрать()в Табло будет выполняться на каждом шаге. Держите в Табло только лёгкие выражения.
Частые вопросы
Можно ли отлаживать без Конфигуратора?
Замедляет ли включённая отладка работу сервера?
-debug сам по себе почти не нагружает сервер. Нагрузка появляется, когда к процессам реально подключён отладчик и выполнение останавливается на точках. Но на рабочем сервере отладку всё равно держат выключенной.Можно ли изменить код во время отладки и продолжить?
Почему при отладке в клиент-серверной базе нет значений серверных переменных в клиентской процедуре?
Можно ли подключиться к сеансу конкретного пользователя?
/DEBUG и адресом вашего отладчика. Тогда сеанс появится в окне «Предметы отладки», и к нему можно подключиться.