Отладчик встроенных скриптов

Материал из Меасофт
Версия от 17:23, 2 декабря 2025; Sammy (обсуждение | вклад) (Пример 4: Отладка скрипта из печатной формы через AttachDebugger)
Перейти к: навигация, поиск

Отладчик скриптов

Обзор

ScriptDebugger.png

Отладчик скриптов — рабочий инструмент для разработки и диагностики скриптов встроенного языка. Он позволяет запускать скрипты в режиме отладки, останавливать выполнение на нужных строках, анализировать переменные и подключаться к уже запущенным скриптам. Вы можете запустить отладчик при наличии прав Администратора:

  • Отчеты > SQL > Выполнить > Запустить отладчик
  • Отчеты > Дополнительные возможности > Редактировать

Основные возможности

  • Запуск в режиме отладки — выполнение скрипта с остановкой на заданных строках
  • Просмотр переменных — автоматическое отображение значений всех переменных при остановке
  • Наблюдение за выражениями — вычисление произвольных выражений при каждой остановке
  • Точки останова — остановка выполнения на выбранных строках кода
  • Отслеживание запросов отладки — подключение к уже выполняющемуся скрипту, через команду AttachDebugger
  • Работа с файлами — открытие, сохранение и отслеживание изменений файлов скриптов
  • Расширенный редактор - подсветка парных скобок, отображение скрытых симолов, закладки.

Интерфейс отладчика

Редактор кода

Основная область для написания и редактирования скрипта. Редактор поддерживает:

  • Подсветку синтаксиса
  • Нумерацию строк
  • Визуальное отображение точек останова (красные кружки в левом поле)
  • Подсветку текущей строки выполнения (желтый фон)
  • Подсветку парных скобок при установке курсора

Лог

Отображает:

  • Вывод сообщений няпрямую из скрипта командой print
  • Сообщения отладчика (остановка на breakpoint, ошибки)
  • Временные метки для каждого сообщения в формате [hh:nn:ss]

Список переменных

Показывает все переменные и объекты текущего контекста с их текущими значениями. Обновляется автоматически при каждой остановке на точке останова.

Список наблюдения

Позволяет отслеживать произвольные выражения во время выполнения. Значения выражений пересчитываются и отображаются при каждой остановке.

Кнопки управления

  • Запустить — запуск скрипта в режиме отладки (F9)
  • Остановить — аварийная остановка выполняющегося скрипта
  • Продолжить — возобновление выполнения после остановки на точке останова (F9)

Работа с отладчиком

Запуск скрипта

  1. Введите или откройте скрипт в редакторе
  2. При необходимости установите точки останова
  3. Нажмите кнопку «Запустить» или клавишу F9
  4. Скрипт выполнится до первой точки останова или до ошибки

Установка точек останова

Способ 1. Щёлкните левой кнопкой мыши в левой части нужной строки (область номеров строк). На строке появится красный кружок — точка останова установлена. Повторный щелчок удалит её.

Способ 2. Установите курсор на строку и используйте пункт меню Скрипт > Добавить точку останова (F5).

Важно. Точки останова всегда останавливают выполнение на указанной строке, дополнительные условия не поддерживаются.

Просмотр переменных

При остановке на точке останова все переменные автоматически отображаются в списке. Значения обновляются при каждой остановке.

Наблюдение за выражениями

  1. Выделите текст в редакторе (например, имя переменной или выражение)
  2. Выберите в контекстном меню редактора пункт Добавить в наблюдение
  3. Либо используйте меню Скрипт > Добавить наблюдение (Сtrl+F5) и введите выражение вручную.

Выражение будет добавлено в список и пересчитываться при каждой остановке.

Примеры выражений:

  • $a + $b — сумма переменных
  • db.RecordCount — количество записей в наборе данных
  • $i > 0 — логическое условие

Продолжение выполнения

После остановки скрипта:

  1. Просмотрите значения переменных и выражений наблюдения
  2. При необходимости скорректируйте точки останова или выражения наблюдения
  3. Нажмите кнопку Продолжить (F9) — выполнение продолжится до следующей точки останова или завершения скрипта

Остановка выполнения

Во время выполнения скрипта можно нажать и удерживать клавишу ESC для аварийной остановки.

Работа с файлами

Открытие файла с отслеживанием

Меню Файл > Открыть и отслеживать.

Открывает файл скрипта и включает автоматическое отслеживание изменений на диске. При изменении файла во внешнем редакторе текст автоматически обновляется в отладчике.

Сохранение в файл

Меню Файл > Сохранить в файл.

Сохраняет текущий текст скрипта в файл. Если файл был открыт ранее, по умолчанию предлагается исходный путь.

Сохранение

Если отладчик открыт как редактор скрипта, доступны функции по сохранению:

  • Меню Файл > Сохранить — сохранить скрипт в базу данных
  • Кнопка Сохранить и закрыть — сохранить скрипт и закрыть окно отладчика

Подключение к выполняемому скрипту (AttachDebugger)

Механизм отслеживания исполняемых скриптов работает следующим образом. Сначала отладчик нужно перевести в режим ожидания запросов отладки. Далее необходимо запустить скрипт стандартным способом, сфоримировать печтаную форму или рассчитать стоиость доставки. Если в скрипте будет команда AttachDebugger отладчик это увидит и начнется процесс отладки скрипта. Это удобно для отладки:

  • Скриптов из печатных форм
  • Скриптов из системных событий (которые происходят в интерфейсе)
  • Скриптов из дополнительных услуг

Как использовать

В отладчике:

  1. Откройте отладчик скриптов, главное меню Отчеты > SQL > Выполнить > Запустить отладчик (F9).
  2. Включите режим отслеживания: меню Скрипт > Ожидать команды AttachDebugger.
  3. В строке состояния появится сообщение Ожидание команды AttachDebugger....

В скрипте:

  1. Команда AttachDebugger должна быть первой командой в скрипте, после настройки скрипта, запустите его исполнение. Пример скрипта:
<?>
AttachDebugger;
set($a, 10);
set($b, 20);
set($sum, $a + $b);
showmessage($sum);

Что происходит:

  • При выполнении команды AttachDebugger скрипт останавливается.
  • Отладчик автоматически подключается к выполняющемуся скрипту.
  • Текст скрипта загружается в редактор отладчика.
  • Можно ставить точки останова, просматривать переменные и продолжать отладку.

Важно:

  • Отладчик должен быть в режиме отслеживания до того, как скрипт дойдёт до команды AttachDebugger.
  • Команда `AttachDebugger` должна быть первой командой в скрипте.
  • Если режим отслеживания не включён, команда AttachDebugger в скрипте игнорируется и ничего не делает.
  • В режиме отслеживания может работать только один отладчик.
  • Если скрипт исполняется в шедулере или в другом вспомогательном потоке, то подключится к нему не получится. Отладка работает только в текущем потоке приложения.

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

Клавиша Действие
F9 Запустить скрипт в режиме отладки или продолжить исполнение
ESC Аварийная остановка скрипта (удерживать)
F5 Добавить или удалить точку останова
Ctrl+F5 Добавить наблюдение
Ctrl+S Сохранение изменений в базу данных, если скрипт был открыт для редактирования в отладчике
Ctrl+1..9 Перейти в закладку 1 .. 9 в редакторе кода
Ctrl+Shift+1..9 Добавить закладку 1 .. 9 в редакторе кода

Настройки редактора

Перенос строк

Контекстное меню редактора > Перенос строк.

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

Отображение специальных символов

Контекстное меню редактора > Показать специальные символы.

Показывает пробелы и табуляции в виде специальных символов. Удобно для поиска лишних пробелов и контроля форматирования кода.

Примеры использования

Пример 1: Отладка скрипта с точками останова

Задача. Проверить корректность простого цикла суммирования. Пример скрипта:

<?>
set($i, 10);
set($sum, 0);
while($i > 0, 
  set($sum, $sum + $i); 
  set($i, $i - 1)
);
showmessage($sum);

План действий:

  1. Откройте отладчик, главное меню Отчеты > SQL > Выполнить > Запустить отладчик (F9).
  2. Введите скрипт
  3. Установите точку останова на строке set($sum, $sum + $i);.
  4. Запустите скрипт (F9).
  5. При остановке просмотрите значения $i и $sum в списке переменных.
  6. Добавьте выражение наблюдения $sum + $i.
  7. Нажимайте Продолжить, наблюдая, как меняются значения до завершения цикла.

Что даёт отладчик:

  • Видно, как накапливается сумма на каждом шаге.
  • Можно быстро обнаружить ошибки в логике цикла.

Пример 2: Отладка скрипта с условиями

Задача. Проверить, корректно ли выбирается максимум из двух значений. Пример скрипта:

<?>
set($a, 10);
set($b, 20);
if($a > $b, 
  set($result, $a), 
  set($result, $b)
);
showmessage($result);

План действий:

  1. Откройте отладчик.
  2. Введите скрипт.
  3. Установите точку останова на строке if($a > $b.
  4. Запустите скрипт (F9).
  5. При остановке просмотрите значения $a и $b.
  6. Добавьте выражение наблюдения $a > $b.
  7. Продолжите выполнение и посмотрите, какое значение попало в $result.

Что даёт отладчик:

  • Понятно, при каких значениях срабатывает та или иная ветка условия.
  • Удобно тестировать разные комбинации входных данных.

Пример 3: Отладка скрипта с работой с базой данных

Задача. Проверить правильность выборки и обработки данных из базы. Пример скрипта:

<?>
new('TSelfADO', 'db');
db.Open('SELECT code FROM city  WHERE name Like "%Москва%"');
if(db.RecordCount > 0,
  set($code, int(db.FieldByName('code'))),
  0
);
showmessage($code);

План действий:

  1. Откройте отладчик.
  2. Введите скрипт.
  3. Установите точку останова на строке if(db.RecordCount > 0.
  4. Запустите скрипт (F9).
  5. При остановке просмотрите значение db.RecordCount.
  6. Добавьте выражение наблюдения db.FieldByName('code').
  7. Продолжите выполнение и убедитесь, что в $code попало ожидаемое значение.

Что даёт отладчик:

  • Видно, сколько записей вернул запрос.
  • Можно проверить конкретные значения полей перед дальнейшей обработкой.

Пример 4: Отладка скрипта из печатной формы через AttachDebugger

Задача. Подключиться к скрипту печатной формы, который выполняется из основного приложения. Пример скрипта:

<?>
AttachDebugger;
new('TSelfADO', 'db');
db.Open('SELECT COUNT(*) as cnt FROM address WHERE date_put IS NULL');
set($count, int(db.FieldByName('cnt')));
if($count > 100,
  showmessage('Внимание! Много недоставленных адресов!'),
  0
);

План действий:

  1. Откройте отладчик скриптов.
  2. Включите режим отслеживания меню Файл > Ожидать команды AttachDebugger.
  3. В скрипт печатной формы, первой строкой добавьте команду `AttachDebugger`.
  4. Запустите печатную форму.
  5. Когда выполнение дойдёт до AttachDebugger, отладчик автоматически подключится.

Если под рукой нет печатной формы:

  1. Откройте Отчеты > SQL укажите скрипт из примера.
  2. Запустите скрипт меню Выполнить > Выполнить как скрипт (F7).
  3. Когда выполнение дойдёт до AttachDebugger, отладчик автоматически подключится.
  4. Установите точку останова на строке if($count > 100.
  5. Продолжите выполнение и проанализируйте значение $count.

Что даёт отладчик:

  • Можно разбирать сценарии, которые запускаются не из отладчика, а из печтаных форм, дополнительных услуг и т.д.
  • Скрипт становится доступен для анализа так же, как и обычный скрипт, запущенный из отладчика.

Пример 5: Отладка скрипта с циклом FOR

Задача. Проверить корректность вычислений в цикле FOR.

  1. Откройте отладчик.
  2. Введите скрипт:
<?>
set($sum, 0);
for($i, 1, 10, 
 set($sum, $sum + $i)
);
showmessage($sum);
  1. Установите точку останова на строке set($sum, $sum + $i);.
  2. Запустите скрипт (F9) и просматривайте значения $i и $sum при остановках.
  3. Добавьте выражение наблюдения $sum + $i для контроля вычислений.

Что даёт отладчик:

  • Пошагово видно, как формируется итоговая сумма.
  • Удобно находить ошибки в граничных условиях цикла.

Пример 6: Использование выражений наблюдения

Задача. Одновременно контролировать несколько взаимосвязанных значений.

  1. Откройте отладчик.
  2. Введите скрипт:
<?>
set($a, 10);
set($b, 20);
set($c, 30);
set($result, $a + $b + $c);
showmessage($result);
  1. Установите точку останова на строке set($result, $a + $b + $c);.
  2. Запустите скрипт (F9).
  3. Добавьте выражения наблюдения:
    • $a + $b
    • $b + $c
    • $a + $b + $c
  4. При остановке сравните значения выражений и итоговый результат.

Что даёт отладчик:

  • Одновременно видно несколько ключевых показателей.
  • Легче находить расхождения между промежуточными и итоговыми значениями.