Отладчик 1С 8.3 на практике: от первой точки останова до серверного кода

· 9 мин

Содержание

Чтобы работать с отладчиком 1С, откройте базу в Конфигураторе, поставьте точку останова клавишей F9 на нужной строке модуля и запустите программу через Отладка → Начать отладку (F5). Когда выполнение дойдёт до строки, Конфигуратор перехватит управление: дальше вы шагаете по коду (F10, F11) и смотрите значения переменных.

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

Подготовка к отладке: файловая и клиент-серверная база

В файловой базе ничего настраивать не нужно. Открыли Конфигуратор, нажали F5 — запустился клиент в режиме отладки, и отладчик видит и клиентский, и серверный код.

Если конфигурация изменена и не сохранена в базе данных, при F5 Конфигуратор предложит обновить конфигурацию БД. Без обновления в клиенте будет работать старый код, а точки останова в новых строках «промахнутся».

В клиент-серверной базе серверный код выполняется в рабочем процессе кластера. Чтобы отладчик до него добрался, сервер 1С должен быть запущен с разрешённой отладкой.

  1. Откройте свойства службы «Агент сервера 1С:Предприятия» и посмотрите строку запуска ragent.exe.
  2. Проверьте, есть ли в ней ключ -debug. Для отладки по протоколу HTTP используется пара -debug -http.
  3. Если ключа нет, его добавляют в параметры службы и перезапускают её.

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

Какой протокол выбрать. В платформе 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Закрывает отлаживаемый сеанс

Как этим пользоваться на практике:

  1. Ставите одну точку останова на входе в проблемную процедуру.
  2. Идёте F10 по строкам, пока не дойдёте до подозрительного вызова.
  3. На нём жмёте F11 и проваливаетесь внутрь.
  4. Если внутри всё понятно и неинтересно — 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-сервисах и веб-сервисах, их нужно отметить здесь. По умолчанию отладчик к ним не цепляется.

Как отладить регламентное задание без ожидания расписания:

  1. Поставьте точку останова в процедуре, указанной в регламентном задании.
  2. Включите автоматическое подключение к фоновым заданиям.
  3. Запустите задание вручную — из обработки управления регламентными заданиями в пользовательском режиме или вызовом процедуры из тестовой обработки.

Для отладки фоновых заданий в клиент-серверной базе удобнее HTTP-протокол: подключение к фоновым процессам через сервер отладки проходит стабильнее.

Отладка веб-клиента и публикации. Для веб-клиента и HTTP-сервисов, опубликованных на веб-сервере, отладку разрешают в файле публикации default.vrd — элемент debug с атрибутом enable="true". После правки файла веб-сервер обычно приходится перезапустить.

Внешние обработки и отчёты. Откройте файл .epf в Конфигураторе через Файл → Открыть, поставьте точки останова и запустите тот же самый файл в клиенте, запущенном с отладкой. Путь к файлу должен совпадать: копия из другой папки для отладчика — другой объект.

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

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

  • 🐞 Отладка на рабочей базе без предупреждения. Пока вы стоите на точке останова внутри транзакции, данные, которые она затронула, остаются заблокированными. Другие пользователи ловят ожидание блокировки. Отлаживайте проведение документов на копии.
  • 🐞 Точка в модуле формы ставится не в ту копию модуля. У общей формы и формы объекта разные модули. Убедитесь, что открыт модуль именно той формы, которую открывает пользователь.
  • 🐞 Забытые точки останова. Через неделю вы запускаете отладку для другой задачи, и выполнение спотыкается о старые точки. Чистите их через Alt+F9.
  • 🐞 Ожидание остановки в клиентском коде при открытии из веб-клиента. Если пользователь работает через браузер, а публикация без отладки, клиентские точки не сработают.
  • 🐞 Вычисление «тяжёлых» выражений. Выражение Справочники.Номенклатура.Выбрать() в Табло будет выполняться на каждом шаге. Держите в Табло только лёгкие выражения.

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

Можно ли отлаживать без Конфигуратора?
Да. Отладку поддерживает 1С:Enterprise Development Tools (EDT). Принцип тот же — точки останова, шаги, просмотр переменных, — но подключение к серверу идёт по протоколу HTTP.
Замедляет ли включённая отладка работу сервера?
Ключ -debug сам по себе почти не нагружает сервер. Нагрузка появляется, когда к процессам реально подключён отладчик и выполнение останавливается на точках. Но на рабочем сервере отладку всё равно держат выключенной.
Можно ли изменить код во время отладки и продолжить?
Нет. Изменения модуля начнут работать только после сохранения и обновления конфигурации базы данных. Отлаживаемый сеанс придётся перезапустить.
Почему при отладке в клиент-серверной базе нет значений серверных переменных в клиентской процедуре?
Клиент и сервер — разные процессы. Серверная переменная видна, только когда выполнение стоит в серверном коде. Чтобы её увидеть, поставьте точку внутри серверной процедуры.
Можно ли подключиться к сеансу конкретного пользователя?
Да, если его клиент запущен с ключом /DEBUG и адресом вашего отладчика. Тогда сеанс появится в окне «Предметы отладки», и к нему можно подключиться.