Рецепты
Парная отладка
Цель — найти причину ошибки вдвоём. Человек выполняет сценарий в клиенте 1С:Предприятия, а агент через Кванту подключается к отладчику, ставит точку останова, дожидается остановки, читает стек и переменные, вычисляет выражения и шагает по коду.
Предпосылки
-
Информационная база запущена с сервером отладки. Для файловой базы — локальный сервер отладки на порту 1550 и клиент, запущенный с отладкой по HTTP:
командная строка dbgs.exe --addr=127.0.0.1 --port=1550Клиент 1С:Предприятия — с параметрами
/debug -http -attach /debuggerURL http://127.0.0.1:1550. -
Проект конфигурации этой базы открыт в EDT: по нему отладчик находит модули.
-
Действует ключ или бесплатный доступ.
Шаги
1. Точка останова
Точку можно поставить ещё до подключения: она появится в EDT как обычная и будет передана отладчику при подключении.
{
"operation": "set",
"project": "УТ2020",
"module_fqn": "Документ.РеализацияТоваровУслуг.МодульОбъекта",
"line": 120,
"condition": "Не ЗначениеЗаполнено(Контрагент)"
}Строка — номер из code_read. Пустая строка или комментарий — отказ с ближайшей исполняемой строкой. condition — необязательное условие на встроенном языке.
2. Подключиться
{
"operation": "connect",
"project": "УТ2020",
"debug_server_url": "http://127.0.0.1:1550",
"infobase": "DefAlias"
}Для файловой базы псевдоним — DefAlias. Новые предметы отладки — сеансы, фоновые задания — подключаются автоматически. Сессия отладки на рабочую область одна.
3. Человек выполняет сценарий, агент ждёт
{ "operation": "wait", "timeout_ms": 20000 }Исход: 🟠 suspended с местом остановки, точкой и фрагментом кода со строкой ► — или 🔵 running, если за время ожидания остановки не было. Повторять wait в цикле дёшево.
4. Стек и переменные
{ "operation": "stack", "args": "top" }{ "operation": "variables", "path": "Объект.Товары.Элементы", "rows": "1-20" }Стек показывает параметры верхних кадров со значениями. Переменные раскрываются на один уровень; .Элементы у таблицы значений даёт страницу строк таблицей, rows листает живую коллекцию.
5. Вычислить выражение
{ "operation": "evaluate", "expression": "Объект.Товары.Итог(\"Количество\")", "frame": 0 }Вычисление выполняется в контексте кадра и может иметь побочные эффекты, если выражение вызывает методы, меняющие данные.
6. Шаг и продолжение
{ "operation": "step_over" }step_into, step_over, step_return ждут, где остановится выполнение, и показывают то же, что wait. resume отпускает выполнение. Чтобы проверить гипотезу, можно поменять значение переменной — debug_write с операцией modify_value, ответ покажет «было → стало».
7. Убрать за собой
{ "operation": "clear", "clear_all": true }{ "operation": "disconnect" }clear_all удаляет только точки, поставленные через Кванту; точки человека остаются. После отключения база продолжает работать.
Проверка
debug_read с операцией breakpoints — список точек рабочей области; targets — предметы отладки с метками t1, t2 и их состоянием.
Если не подключается
Сервер отладки не отвечает — ответ 🔴 failed с подсказкой:
### 🔴 connect — `tcp://127.0.0.1:1560`
- **status:** 🔴 failed
- **message:** debug-сервер не отвечает (таймаут 1.5с)
- **target:** file-infobase (DefAlias)
- **fix_hint:** проверьте, что dbgs.exe запущен: dbgs --addr=127.0.0.1 --port=1560
#### Did you mean
- 1550
- 1570
#### Context
- активная сессия: нетПроверьте, что dbgs.exe запущен на нужном порту, а клиент подключён к нему с параметром /debuggerURL.
Откат
Отладка не меняет конфигурацию. Значения, изменённые через modify_value, живут только в текущем выполнении.