Отладка в 1C:EDT: от конфигурации запуска до серверного кода

· 9 мин

Содержание

Чтобы запустить отладку в 1C:EDT, откройте проект, свяжите его с информационной базой и нажмите кнопку с жуком на панели инструментов (или F11 для повтора последнего запуска). EDT обновит конфигурацию в базе, поднимет сервер отладки и откроет клиент 1С:Предприятия уже подключённым к отладчику. Для файловой базы этого достаточно.

С клиент-серверной базой нужен ещё один шаг: кластер 1С должен работать в режиме отладки по HTTP (ключ -debug -http). EDT не умеет отлаживать по старому протоколу TCP, который по привычке включают в Конфигураторе. Большинство жалоб «точка останова не срабатывает» упираются именно в это.

Что проверить перед первым запуском отладки

Отладчик EDT ломается чаще всего не на самой отладке, а на окружении. Пять минут проверки экономят час поиска.

  • ☕ Java. EDT работает на JDK. Нужна та сборка и версия, которую требует ваша версия EDT (у современных версий — Liberica JDK 17, у старых — 11). Если EDT ставили через лаунчер 1C:EDT Start, нужная Java обычно ставится вместе с ним.
  • 🧩 Платформа 1С. На компьютере должна стоять платформа той версии, под которую собирается проект. В настройках EDT (Окно → Параметры, далее ветка с установленными платформами 1С:Предприятия) она должна быть видна.
  • 🏷️ Режим совместимости проекта. Он не может быть выше версии установленной платформы. Иначе база просто не обновится.
  • 🗄️ Информационная база. Она добавлена на панель «Информационные базы» и связана с проектом. Без этой связи EDT не знает, куда выкладывать изменения.
  • 📂 Пути без сюрпризов. Рабочая область и каталог проекта — на локальном диске, без сетевых путей и без кириллицы в пути к рабочей области. С сетевыми папками EDT работает медленно, а индексация может падать.

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

Конфигурация запуска: создаём и настраиваем

Конфигурация запуска (Run Configuration) — это сохранённый набор «какой проект, в какую базу, каким клиентом, с какими параметрами». EDT создаёт её сам при первом запуске, но её стоит открыть и проверить.

Создание вручную

  1. Откройте меню Запуск → Конфигурации отладки… (в английском интерфейсе Run → Debug Configurations…).
  2. В левом списке выберите тип для клиента 1С:Предприятия и нажмите кнопку создания новой конфигурации.
  3. Задайте понятное имя, например ERP_dev — тонкий клиент.
  4. На основной вкладке выберите проект и информационную базу.
  5. Укажите тип клиента: тонкий, толстый (управляемое приложение) или веб-клиент.
  6. Нажмите «Применить», затем «Отладка».

Что настроить сразу

ПараметрЧто выбратьЗачем
Тип клиентаТонкий клиентБлиже всего к работе пользователя
Пользователь и парольТестовый пользовательЗапуск без окна авторизации
Дополнительные параметры/C с нужной строкойПередать параметр запуска в код
Версия платформыКонкретная, не «последняя»Исключить расхождение с сервером

Перед каждым запуском EDT сам обновляет конфигурацию базы из проекта. Если обновление завершилось ошибкой, отладка всё равно может стартовать, но уже на старом коде. Следите за сообщениями в консоли.

Конфигурации разных баз держите отдельно. Удобно иметь две на один проект: одну с тонким клиентом, другую с веб-клиентом.

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

Отладка по HTTP, параметры отладчика и память JVM

Протокол отладки

EDT использует отладку по HTTP через отдельный сервер отладки (dbgs). Для файловой базы EDT запускает его сам. Порт по умолчанию — 1550. Если он занят, сервер выбирает другой, и адрес нужно смотреть в EDT.

Если нужно подключить к отладке клиент, запущенный не из EDT, используйте параметры командной строки:

"C:\Program Files\1cv8\8.3.24.1586\bin\1cv8c.exe" ENTERPRISE /F"D:\Bases\Dev" /DEBUG -http /DEBUGGERURL "http://localhost:1550"

Путь к платформе и её номер подставьте свои. Ключ /DEBUG -http включает отладку по HTTP, /DEBUGGERURL говорит клиенту, к какому серверу отладки подключиться.

Память для EDT

EDT — тяжёлое Java-приложение. На типовой конфигурации уровня ERP или КА ему тесно в настройках по умолчанию: сборка тормозит, отладчик подвисает на шаге.

Объём памяти задаётся в файле 1cedt.ini в каталоге установки EDT, строкой -Xmx:

-Xms1g
-Xmx8g

Ориентиры по памяти:

  • 🟢 небольшая самописная конфигурация — -Xmx4g;
  • 🟡 Бухгалтерия, ЗУП, УТ — -Xmx6g;
  • 🔴 ERP, КА, большие отраслевые — -Xmx8g и больше.

Оставьте системе и клиенту 1С хотя бы 4 ГБ. Если на машине 16 ГБ, ставить EDT -Xmx14g бессмысленно: начнётся своп. После правки 1cedt.ini перезапустите EDT.

Перед правкой сохраните копию 1cedt.ini. Опечатка в этом файле — и EDT просто не стартует, без внятной ошибки.

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

Ставим и настраиваем точки

  • Двойной щелчок по левому полю редактора модуля ставит и снимает точку останова. То же делает Ctrl+Shift+B.
  • Правый щелчок по точке → свойства: там задаётся условие (например, Номенклатура.Код = "00-000123") и счётчик срабатываний.
  • Все точки видны на панели «Точки останова». Там их можно временно выключить флажком, не удаляя.

Условная точка — главный инструмент в цикле на 10 000 строк. Не нажимайте «продолжить» сто раз: поставьте условие на нужную строку табличной части.

Перспектива «Отладка»

При остановке EDT предлагает переключиться в перспективу «Отладка». Соглашайтесь и отметьте «запомнить». В ней собраны:

  • 🧵 стек вызовов — по нему видно, как код дошёл до этой строки, и можно перейти в любой кадр стека;
  • 📊 переменные — локальные переменные и параметры текущей процедуры, с раскрытием структур и коллекций;
  • 🔍 выражения — сюда добавляйте то, что хотите видеть постоянно, например Объект.Товары.Количество();
  • 🧭 предметы отладки — какие клиенты и серверные процессы сейчас подключены.

Наведение курсора на переменную в редакторе показывает её значение во всплывающем окне.

Горячие клавиши

КлавишаДействие
F5Шаг с заходом в процедуру
F6Шаг через строку
F7Выйти из текущей процедуры
F8Продолжить до следующей точки
Ctrl+RВыполнить до строки под курсором
Ctrl+F2Остановить отладку

Это стандартные клавиши Eclipse. Если вы пришли из Конфигуратора, где шаги на F10/F11, их можно переназначить в Окно → Параметры → Общие → Клавиши.

Как отлаживать серверный код в клиент-серверной базе

Клиентская часть (&НаКлиенте) выполняется в процессе тонкого клиента . Серверная (&НаСервере, общие модули с флагом «Сервер», обработчики записи объектов) — в рабочем процессе кластера. Чтобы отладчик останавливался в серверном коде, кластер должен быть запущен с отладкой.

Включаем отладку на сервере 1С

На Windows сервер 1С работает службой. В строке запуска ragent.exe нужно добавить ключи -debug -http:

"C:\Program Files\1cv8\8.3.24.1586\bin\ragent.exe" -debug -http -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -d "C:\Program Files\1cv8\srvinfo"

Строку запуска удобно поменять через реестр (параметр ImagePath в разделе службы) или пересоздать службу. На Linux ключи добавляют в строку запуска ragent в unit-файле службы systemd.

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

Обратите внимание на ключ -http. Ключ -debug без него включает отладку по TCP: Конфигуратор с ней работает, EDT — нет.

Подключаемся из EDT

  1. Создайте конфигурацию отладки типа «подключение к серверу отладки» и укажите адрес, например http://srv1c:1550.
  2. Запустите её. EDT подключится к серверу отладки кластера.
  3. На панели «Отладка» откройте настройку автоподключения и отметьте нужные предметы: сервер, тонкий клиент, фоновые задания.
  4. Запустите клиент — из EDT или через ярлык с /DEBUG -http /DEBUGGERURL.

Без автоподключения серверного предмета отладчик будет останавливаться только в клиентском коде. Это вторая по частоте причина «не срабатывающих» точек.

Мини-кейс: точка в модуле объекта не срабатывает

Разработчик ставит точку в ПередЗаписью() модуля документа, проводит документ из тонкого клиента — отладчик молчит. Клиент запущен из EDT, клиентские точки работают.

Разбор занял три шага:

  1. В строке запуска службы стоял только -debug. После добавления -http и перезапуска службы ночью сервер отладки появился.
  2. EDT подключился, но серверного предмета в списке не было: не было отмечено автоподключение сервера.
  3. После отметки предмета «Сервер» точка сработала при следующем проведении.

Вывод простой: при отладке серверного кода сначала проверяйте ключи кластера, потом автоподключение, и только потом сам код.

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

  • ⏱️ Регламентные и фоновые задания выполняются в рабочем процессе без клиента. Чтобы поймать их, включите автоподключение предмета «фоновое задание».
  • 🌐 HTTP- и веб-сервисы обрабатываются через веб-сервер и рабочий процесс. Нужен предмет отладки для HTTP-сервисов или веб-сервисов, а на публикации — включённая отладка.
  • 🔁 Длительные операции в типовых (например, формирование отчёта в фоне) тоже уходят в фоновое задание. Если точка в коде отчёта не срабатывает, проверьте именно это.

Не подключается отладчик: разбор типовых проблем

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

Когда отладка не нужна

Не всякая ошибка требует отладчика. Иногда быстрее другой инструмент:

  • 📝 журнал регистрации — когда ошибка уже произошла у пользователя и известно время;
  • 📈 замер производительности — когда код не падает, а тормозит;
  • 🧪 временная запись в журнал через ЗаписьЖурналаРегистрации() — когда ошибка плавает и воспроизводится только у пользователей в рабочей базе, куда отладчик подключать нельзя.

Отладку на рабочем кластере не включайте. Остановка на точке в серверном коде держит транзакцию и блокировки — у пользователей встанет работа.

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

Можно ли в EDT отлаживать базу, которую одновременно открывают в Конфигураторе?
Можно подключиться к одной базе и тем, и другим, но к одному серверу отладки предметы цепляет кто-то один. Работать с одной базой из двух сред разработки не стоит: обновления конфигурации перезапишут друг друга.
Как вычислить выражение во время остановки, не добавляя его на панель?
Выделите выражение в редакторе и откройте контекстное меню: там есть просмотр значения выделенного фрагмента. Для постоянного контроля используйте панель «Выражения».
Поддерживает ли EDT отладку мобильного приложения?
Да, для мобильной платформы есть свой тип конфигурации запуска. Но окружение настраивается отдельно: мобильная платформа, устройство или эмулятор и сетевая доступность компьютера разработчика с устройства.
Почему после правки модуля приходится перезапускать отладку?
Изменения кода попадают в базу только при её обновлении. EDT умеет обновлять базу без перезапуска клиента, но изменённый код начнёт выполняться в новом серверном вызове или после перезапуска клиента.
Нужна ли лицензия 1С для отладки в EDT?
EDT запускает обычный клиент 1С:Предприятия, поэтому на запуск базы нужна клиентская лицензия, как при обычной работе. Исключение — учебная версия платформы со своими ограничениями.