Отладчик встроенных скриптов — различия между версиями

Материал из Меасофт
Перейти к: навигация, поиск
(Новая страница: «= Отладчик скриптов = == Обзор == Отладчик скриптов — рабочий инструмент для разработки и…»)
 
м (Горячие клавиши)
 
(не показаны 83 промежуточные версии этого же участника)
Строка 1: Строка 1:
= Отладчик скриптов =
+
= Интерфейс =
  
== Обзор ==
+
[[Файл:ScriptDebugger.png]]
  
Отладчик скриптов — рабочий инструмент для разработки и диагностики скриптов встроенного языка.   
+
'''Отладчик скриптов''' — рабочий инструмент для разработки и диагностики скриптов встроенного языка.   
 
Он позволяет запускать скрипты в режиме отладки, останавливать выполнение на нужных строках, анализировать переменные и подключаться к уже запущенным скриптам.
 
Он позволяет запускать скрипты в режиме отладки, останавливать выполнение на нужных строках, анализировать переменные и подключаться к уже запущенным скриптам.
 +
Вы можете запустить отладчик из:
 +
* '''Отчеты > SQL > Выполнить > Запустить отладчик'''
 +
* '''Отчеты > Дополнительные возможности > Редактировать'''
 +
* В главном окне приложения комбинацией '''Ctrl+Shift+D'''
  
== Основные возможности ==
+
= Основные возможности =
  
 
* '''Запуск в режиме отладки''' — выполнение скрипта с остановкой на заданных строках
 
* '''Запуск в режиме отладки''' — выполнение скрипта с остановкой на заданных строках
Строка 12: Строка 16:
 
* '''Наблюдение за выражениями''' — вычисление произвольных выражений при каждой остановке
 
* '''Наблюдение за выражениями''' — вычисление произвольных выражений при каждой остановке
 
* '''Точки останова''' — остановка выполнения на выбранных строках кода
 
* '''Точки останова''' — остановка выполнения на выбранных строках кода
* '''AttachDebugger''' — подключение к уже выполняющемуся скрипту
+
* '''Подключение к скриптам''' — подключение к скрипту запущенному без отладчика
 
* '''Работа с файлами''' — открытие, сохранение и отслеживание изменений файлов скриптов
 
* '''Работа с файлами''' — открытие, сохранение и отслеживание изменений файлов скриптов
* '''Сохранение в базу данных''' — запись отредактированных скриптов в БД
+
* '''Расширенный редактор''' - подсветка парных скобок, отображение скрытых симолов, закладки.
  
== Интерфейс отладчика ==
+
= Интерфейс отладчика =
  
=== Редактор кода ===
+
== Редактор кода ==
  
 
Основная область для написания и редактирования скрипта. Редактор поддерживает:
 
Основная область для написания и редактирования скрипта. Редактор поддерживает:
Строка 25: Строка 29:
 
* Визуальное отображение точек останова (красные кружки в левом поле)
 
* Визуальное отображение точек останова (красные кружки в левом поле)
 
* Подсветку текущей строки выполнения (желтый фон)
 
* Подсветку текущей строки выполнения (желтый фон)
* Подсветку парных скобок при установке курсора
+
* Подсветку парных скобок  
 
+
* Отображение скрытых символов
=== Лог ===
+
* Закладки для быстрой навигации
 +
== Лог ==
  
 
Отображает:
 
Отображает:
* Вывод команд скрипта и команды Print
+
* Вывод сообщений напрямую из скрипта командой '''print'''
 
* Сообщения отладчика (остановка на breakpoint, ошибки)
 
* Сообщения отладчика (остановка на breakpoint, ошибки)
* Временные метки для каждого сообщения в формате `[hh:nn:ss]`
 
 
=== Список переменных ===
 
 
Показывает все переменные и объекты текущего контекста с их текущими значениями. 
 
Обновляется автоматически при каждой остановке на точке останова.
 
  
=== Список наблюдения ===
+
== Кнопки управления ==
  
Позволяет отслеживать произвольные выражения во время выполнения.
+
* '''Запустить''' — Запуск скрипта в режиме отладки (F9). При необходимости установите точки останова, cкрипт выполнится до первой точки останова или до ошибки.
Значения выражений пересчитываются и отображаются при каждой остановке.
+
* '''Остановить''' — Прерывание дальнейшего исполнения скрипта. Во время выполнения скрипта можно нажать и удерживать клавишу '''ESC''' для аварийной остановки.
 +
* '''Продолжить''' — Возобновление выполнения после остановки скрипта (F9)
  
=== Кнопки управления ===
+
= Работа с отладчиком =
  
* '''Запустить''' — запуск скрипта в режиме отладки (F9)
+
== Установка точек останова ==
* '''Остановить''' — аварийная остановка выполняющегося скрипта
+
Точки останова можно настроить перед запуском скрипта или когда выполнение скрипта приостановлено. Добавление точки останова:
* '''Продолжить''' — возобновление выполнения после остановки на точке останова
 
 
 
== Работа с отладчиком ==
 
 
 
=== Запуск скрипта ===
 
 
 
# Введите или откройте скрипт в редакторе
 
# При необходимости установите точки останова
 
# Нажмите кнопку «Запустить» или клавишу F9
 
# Скрипт выполнится до первой точки останова или до ошибки
 
 
 
=== Установка точек останова ===
 
  
 
'''Способ 1.''' Щёлкните левой кнопкой мыши в левой части нужной строки (область номеров строк). На строке появится красный кружок — точка останова установлена. Повторный щелчок удалит её.
 
'''Способ 1.''' Щёлкните левой кнопкой мыши в левой части нужной строки (область номеров строк). На строке появится красный кружок — точка останова установлена. Повторный щелчок удалит её.
  
'''Способ 2.''' Установите курсор на строку и используйте пункт меню для добавления точки останова.
+
'''Способ 2.''' Установите курсор на строку и используйте пункт меню '''Скрипт''' > '''Добавить точку останова (F5)'''.
  
'''Важно.''' Точки останова всегда останавливают выполнение на указанной строке, дополнительные условия не поддерживаются.
+
== Просмотр переменных ==
  
=== Просмотр переменных ===
+
Список '''Переменные''' содержит все переменные и объекты доступные в текущем инстансе интерпретатора. Список автоматически отображаются в момент остановки выполнения скрипта.
 
 
При остановке на точке останова все переменные автоматически отображаются в списке. 
 
Значения обновляются при каждой остановке.
 
 
 
=== Наблюдение за выражениями ===
 
  
 +
== Наблюдение за выражениями ==
 +
Список '''Наблюдения''' показывает все добавленные пользователям выражения и их рассчитанные значения. Значения обновляются автоматически в момент остановки выполнения скрипта или после редактирования выражения. Для добавления наблюдения:
 
# Выделите текст в редакторе (например, имя переменной или выражение)
 
# Выделите текст в редакторе (например, имя переменной или выражение)
# Выберите в контекстном меню «Добавить watch из выделения»
+
# Выберите в контекстном меню редактора пункт '''Добавить в наблюдение'''
# Либо используйте меню «Отладка» ? «Добавить watch» и введите выражение вручную
+
# Либо используйте меню '''Скрипт''' > '''Добавить наблюдение (Сtrl+F5)''' и введите выражение вручную.
 
 
Выражение будет добавлено в список и пересчитываться при каждой остановке.
 
  
 
'''Примеры выражений:'''
 
'''Примеры выражений:'''
* `$a + $b` — сумма переменных
+
* $a + $b — сумма переменных
* `db.RecordCount` — количество записей в наборе данных
+
* db.RecordCount — количество записей в наборе данных
* `$i > 0` — логическое условие
+
* $i > 0 — логическое условие
 
 
=== Продолжение выполнения ===
 
  
После остановки на точке останова:
+
= Работа с файлами =
# Просмотрите значения переменных и выражений наблюдения
 
# При необходимости скорректируйте точки останова или выражения
 
# Нажмите кнопку «Продолжить» — выполнение продолжится до следующей точки останова или завершения скрипта
 
  
=== Остановка выполнения ===
+
== Открытие файла с отслеживанием ==
  
Во время выполнения скрипта можно:
+
Меню '''Файл''' > '''Открыть и отслеживать'''.
* Нажать кнопку «Остановить» для аварийной остановки
 
* Нажать и удерживать клавишу ESC для прерывания выполнения
 
 
 
== Работа с файлами ==
 
 
 
=== Открытие файла с отслеживанием ===
 
 
 
Меню «Файл» ? «Открыть и отслеживать».
 
  
 
Открывает файл скрипта и включает автоматическое отслеживание изменений на диске.   
 
Открывает файл скрипта и включает автоматическое отслеживание изменений на диске.   
 
При изменении файла во внешнем редакторе текст автоматически обновляется в отладчике.
 
При изменении файла во внешнем редакторе текст автоматически обновляется в отладчике.
  
=== Сохранение в файл ===
+
== Сохранение в файл ==
 
 
Меню «Файл» ? «Сохранить в файл».
 
 
 
Сохраняет текущий текст скрипта в файл. 
 
Если файл был открыт ранее, по умолчанию предлагается исходный путь.
 
  
== Сохранение скриптов в базу данных ==
+
Всегда есть возможность сохранить скрипт в файл.
 +
* Меню '''Файл''' > '''Сохранить в файл''' — Сохраняет текущий текст скрипта в файл. Если файл был сохранен ранее, по умолчанию предлагается предыдуший путь.
  
Если настроено сохранение в базу данных, отладчик может записать изменённый скрипт обратно в БД.
+
* Меню '''Файл''' > '''Сохранить (Ctrl+S)''' — Когда отладчик открыт без привязки к конкретному скрипту, то сохраняет изменения в файл.
 +
'''Важно!''' Если отладчик открыли например из '''Отчеты''' > '''Дополнительные возможности''' > '''Редактировать''' то сохранения через пункт '''Сохранить (Ctrl+S)''' сохранения '''всегда''' будет происходить в базу, в файл изменения сохранены не будут.
  
* '''«Файл» ? «Сохранить»''' — сохранить скрипт в базу данных
+
= Сохранение =
* '''«Файл» ? «Сохранить и закрыть»''' — сохранить скрипт и закрыть окно отладчика
 
  
== Подключение к выполняемому скрипту (AttachDebugger) ==
+
Если отладчик открыт как редактор скрипта, доступны функции по сохранению напрямую в базу данных:
 +
* Меню '''Файл''' > '''Сохранить (Ctrl+S)''' — сохранить скрипт в базу данных
 +
* Кнопка  '''Сохранить и закрыть''' — сохранить скрипт и закрыть окно отладчика
  
Механизм AttachDebugger позволяет подключить отладчик к скрипту, который уже выполняется в другом месте приложения.
+
= Подключение отладчика к работающим скриптам =
Это удобно для отладки:
+
Данная возможность позволяет подключить отладчик к скриптам изначально запущеным без него. Для начала работ, отладчик нужно перевести в режим '''ожидания запросов отладки'''. Далее необходимо запустить скрипт стандартным способом. Если в скрипте будет команда AttachDebugger - отладчик это увидит и начнется процесс отладки этого скрипта. Это удобно для отладки скриптов, которые работают в своем контексте:
 
* Скриптов из печатных форм
 
* Скриптов из печатных форм
 
* Скриптов из системных событий
 
* Скриптов из системных событий
 
* Скриптов из дополнительных услуг
 
* Скриптов из дополнительных услуг
  
=== Как использовать ===
+
'''Как использовать'''
 
 
'''В отладчике:'''
 
# Откройте отладчик скриптов.
 
# Включите режим отслеживания: меню «Скрипт» ? «Ожидать команды AttachDebugger».
 
# В строке состояния появится сообщение «Ожидание команды AttachDebugger...».
 
  
'''В скрипте:'''
+
#'''В отладчике:'''
'''Важно.''' Команда `AttachDebugger` должна быть '''первой командой''' в скрипте. Добавьте её в самое начало:
+
## Откройте отладчик скриптов, главное меню '''Отчеты''' > '''SQL''' > '''Выполнить''' > '''Запустить отладчик (F9)'''.
 +
## Включите режим отслеживания: меню '''Файл''' > '''Ожидать команды AttachDebugger'''.
 +
## В строке состояния отладчика появится сообщение '''Ожидание команды AttachDebugger...'''.
 +
## Свернуть отладчик, если его закрыть то наблюдение остановится.
 +
#'''В скрипте:'''
 +
## Скрипт нужно подготовить. В скрипте нужно прописать команду '''AttachDebugger''' она должна быть '''первой командой''' или идти следующей строкой после тега начала скрипта '''<?>'''
 +
## Запустить скрипт стандартным образом: Сформировать печатную форму, рассчитать стоимость доставки, выполнить действие для вызова события.
 +
#'''Что происходит:'''
 +
## При выполнении команды AttachDebugger - скрипт останавливается.
 +
## Отладчик автоматически подключается к перехваченному скрипту.
 +
## Текст скрипта загружается в редактор отладчика.
 +
## Можно ставить точки останова, просматривать переменные и продолжать отладку.
  
 +
Пример скрипта с запросом подключения к отладчику:
 
<source lang="json">
 
<source lang="json">
 +
<?>
 
AttachDebugger;
 
AttachDebugger;
 
set($a, 10);
 
set($a, 10);
Строка 146: Строка 122:
 
showmessage($sum);
 
showmessage($sum);
 
</source>
 
</source>
 
'''Что происходит:'''
 
# При выполнении команды `AttachDebugger` скрипт останавливается.
 
# Отладчик автоматически подключается к выполняющемуся скрипту.
 
# Текст скрипта загружается в редактор отладчика.
 
# Можно ставить точки останова, просматривать переменные и продолжать отладку.
 
  
 
'''Важно:'''
 
'''Важно:'''
* Отладчик должен быть в режиме отслеживания до того, как скрипт дойдёт до команды `AttachDebugger`.
+
* Отладчик должен быть в режиме отслеживания до того, как скрипт дойдёт до команды AttachDebugger.
* Если режим отслеживания не включён, команда `AttachDebugger` игнорируется.
+
* Команда `AttachDebugger` должна быть первой командой в скрипте.
 +
* Если режим отслеживания не включён, команда AttachDebugger в скрипте игнорируется и ничего не делает.
 
* В режиме отслеживания может работать только один отладчик.
 
* В режиме отслеживания может работать только один отладчик.
* Команда `AttachDebugger` должна быть первой командой в скрипте.
+
* Если скрипт исполняется в шедулере или в другом вспомогательном потоке, то подключится к нему не получится. Отладка работает только в текущем потоке приложения.
  
== Горячие клавиши ==
+
= Горячие клавиши =
  
 
{| class="wikitable"
 
{| class="wikitable"
Строка 165: Строка 136:
 
! Клавиша !! Действие
 
! Клавиша !! Действие
 
|-
 
|-
| '''F9''' || Запустить скрипт в режиме отладки
+
| '''F9''' || Запустить скрипт в режиме отладки или продолжить исполнение
 
|-
 
|-
 
| '''ESC''' || Аварийная остановка скрипта (удерживать)
 
| '''ESC''' || Аварийная остановка скрипта (удерживать)
 
|-
 
|-
| '''Ctrl+C''' || Копировать
+
| '''F5''' || Добавить или удалить точку останова
|-
 
| '''Ctrl+X''' || Вырезать
 
|-
 
| '''Ctrl+V''' || Вставить
 
 
|-
 
|-
| '''Ctrl+A''' || Выделить все
+
| '''Ctrl+F5''' || Добавить наблюдение
 
|-
 
|-
| '''Ctrl+Z''' || Отменить
+
| '''Ctrl+S''' || Сохранение изменений в базу данных, если скрипт был открыт для редактирования в отладчике
 
|-
 
|-
| '''Enter''' || Редактировать выражение наблюдения
+
| '''Ctrl+1..9''' || Перейти в закладку 1 .. 9 в редакторе кода
 
|-
 
|-
| '''Delete''' || Удалить выражение наблюдения
+
| '''Ctrl+Shift+1..9''' || Добавить закладку 1 .. 9 в редакторе кода
 
|}
 
|}
  
== Настройки редактора ==
+
= Настройки редактора =
  
=== Перенос строк ===
+
== Перенос строк ==
  
Контекстное меню редактора ? «Перенос строк».
+
Контекстное меню редактора > '''Перенос строк'''.
  
 
Включает или выключает автоматический перенос длинных строк.   
 
Включает или выключает автоматический перенос длинных строк.   
 
Настройка сохраняется и восстанавливается при следующем запуске отладчика.
 
Настройка сохраняется и восстанавливается при следующем запуске отладчика.
  
=== Отображение специальных символов ===
+
== Отображение специальных символов ==
  
Контекстное меню редактора ? «Показать специальные символы».
+
Контекстное меню редактора > '''Показать специальные символы'''.
  
 
Показывает пробелы и табуляции в виде специальных символов.   
 
Показывает пробелы и табуляции в виде специальных символов.   
 
Удобно для поиска лишних пробелов и контроля форматирования кода.
 
Удобно для поиска лишних пробелов и контроля форматирования кода.
  
== Примеры использования ==
+
= Примеры использования =
  
=== Пример 1: Отладка скрипта с точками останова ===
+
== Пример 1: Отладка скрипта с точками останова ==
  
'''Задача.''' Проверить корректность простого цикла суммирования.
+
'''Задача.''' Проверить корректность простого цикла суммирования. Пример скрипта:
 
 
# Откройте отладчик.
 
# Введите скрипт:
 
 
<source lang="json">
 
<source lang="json">
 +
<?>
 
set($i, 10);
 
set($i, 10);
 
set($sum, 0);
 
set($sum, 0);
Строка 217: Строка 182:
 
showmessage($sum);
 
showmessage($sum);
 
</source>
 
</source>
# Установите точку останова на строке `set($sum, $sum + $i);`.
+
 
# Запустите скрипт (F9).
+
План действий:
# При остановке просмотрите значения `$i` и `$sum` в списке переменных.
+
# Откройте отладчик, главное меню '''Отчеты''' > '''SQL''' > '''Выполнить''' > '''Запустить отладчик (F9)'''.
# Добавьте выражение наблюдения `$sum + $i`.
+
# Введите скрипт
# Нажимайте «Продолжить», наблюдая, как меняются значения до завершения цикла.
+
# Установите точку останова на строке set($sum, $sum + $i);.
 +
# '''Запустите скрипт (F9)'''.
 +
# При остановке просмотрите значения $i и $sum в списке переменных.
 +
# Добавьте выражение наблюдения $sum + $i.
 +
# Нажимайте '''Продолжить''', наблюдая, как меняются значения до завершения цикла.
  
 
'''Что даёт отладчик:'''
 
'''Что даёт отладчик:'''
Строка 227: Строка 196:
 
* Можно быстро обнаружить ошибки в логике цикла.
 
* Можно быстро обнаружить ошибки в логике цикла.
  
=== Пример 2: Отладка скрипта с условиями ===
+
== Пример 2: Отладка скрипта с условиями ==
 
 
'''Задача.''' Проверить, корректно ли выбирается максимум из двух значений.
 
  
# Откройте отладчик.
+
'''Задача.''' Проверить, корректно ли выбирается максимум из двух значений. Пример скрипта:  
# Введите скрипт:
 
 
<source lang="json">
 
<source lang="json">
 +
<?>
 
set($a, 10);
 
set($a, 10);
 
set($b, 20);
 
set($b, 20);
Строка 242: Строка 209:
 
showmessage($result);
 
showmessage($result);
 
</source>
 
</source>
# Установите точку останова на строке `if($a > $b,`.
+
 
 +
План действий:
 +
# Откройте отладчик.
 +
# Введите скрипт.
 +
# Установите точку останова на строке if($a > $b.
 
# Запустите скрипт (F9).
 
# Запустите скрипт (F9).
# При остановке просмотрите значения `$a` и `$b`.
+
# При остановке просмотрите значения $a и $b.
# Добавьте выражение наблюдения `$a > $b`.
+
# Добавьте выражение наблюдения $a > $b.
# Продолжите выполнение и посмотрите, какое значение попало в `$result`.
+
# Продолжите выполнение и посмотрите, какое значение попало в $result.
  
 
'''Что даёт отладчик:'''
 
'''Что даёт отладчик:'''
Строка 252: Строка 223:
 
* Удобно тестировать разные комбинации входных данных.
 
* Удобно тестировать разные комбинации входных данных.
  
=== Пример 3: Отладка скрипта с работой с базой данных ===
+
== Пример 3: Отладка скрипта с работой с базой данных ==
  
'''Задача.''' Проверить правильность выборки и обработки данных из базы.
+
'''Задача.''' Проверить правильность выборки и обработки данных из базы. Пример скрипта:
 
 
# Откройте отладчик.
 
# Введите скрипт:
 
 
<source lang="json">
 
<source lang="json">
 +
<?>
 
new('TSelfADO', 'db');
 
new('TSelfADO', 'db');
db.Open('SELECT code FROM city WHERE name=' + QuotedStr('Москва'));
+
db.Open('SELECT code FROM city WHERE name Like "%Москва%"');
 
if(db.RecordCount > 0,
 
if(db.RecordCount > 0,
 
   set($code, int(db.FieldByName('code'))),
 
   set($code, int(db.FieldByName('code'))),
Строка 267: Строка 236:
 
showmessage($code);
 
showmessage($code);
 
</source>
 
</source>
# Установите точку останова на строке `if(db.RecordCount > 0,`.
+
 
 +
План действий:
 +
# Откройте отладчик.
 +
# Введите скрипт.
 +
# Установите точку останова на строке if(db.RecordCount > 0.
 
# Запустите скрипт (F9).
 
# Запустите скрипт (F9).
# При остановке просмотрите значение `db.RecordCount`.
+
# При остановке просмотрите значение db.RecordCount.
# Добавьте выражение наблюдения `db.FieldByName('code')`.
+
# Добавьте выражение наблюдения db.FieldByName('code').
# Продолжите выполнение и убедитесь, что в `$code` попало ожидаемое значение.
+
# Продолжите выполнение и убедитесь, что в $code попало ожидаемое значение.
  
 
'''Что даёт отладчик:'''
 
'''Что даёт отладчик:'''
Строка 277: Строка 250:
 
* Можно проверить конкретные значения полей перед дальнейшей обработкой.
 
* Можно проверить конкретные значения полей перед дальнейшей обработкой.
  
=== Пример 4: Отладка скрипта из печатной формы через AttachDebugger ===
+
== Пример 4: Отладка скрипта через AttachDebugger ==
 
 
'''Задача.''' Подключиться к скрипту печатной формы, который выполняется из основного приложения.
 
  
# Откройте отладчик скриптов.
+
'''Задача.''' Подключиться к скрипту запущенному без отладчика.
# Включите режим отслеживания: «Скрипт» ? «Ожидать команды AttachDebugger».
+
Пример скрипта:
# В скрипте печатной формы добавьте команду `AttachDebugger` в самое начало:
 
 
<source lang="json">
 
<source lang="json">
 +
<?>
 
AttachDebugger;
 
AttachDebugger;
 
new('TSelfADO', 'db');
 
new('TSelfADO', 'db');
Строка 294: Строка 265:
 
);
 
);
 
</source>
 
</source>
# Запустите печать документа.
+
 
# Когда выполнение дойдёт до `AttachDebugger`, отладчик автоматически подключится.
+
План действий:
# Установите точку останова на строке `if($count > 100,`.
+
# Откройте отладчик скриптов.
# Продолжите выполнение и проанализируйте значение `$count`.
+
# Включите режим отслеживания меню '''Файл''' > '''Ожидать команды AttachDebugger'''.
 +
# Откройте '''Отчеты''' > '''SQL''' введите скрипт из примера.
 +
# Запустите скрипт через меню '''Выполнить''' > '''Выполнить как скрипт (F7)'''.
 +
# Когда выполнение дойдёт до AttachDebugger, отладчик автоматически подключится.
 +
# Установите точку останова на строке if($count > 100.
 +
# Продолжите выполнение и проанализируйте значение $count.
  
 
'''Что даёт отладчик:'''
 
'''Что даёт отладчик:'''
* Можно разбирать сценарии, которые запускаются не из отладчика, а из бизнес-форм.
+
* Можно разбирать сценарии, которые запускаются не из отладчика, а из печтаных форм, дополнительных услуг и т.д.
 
* Скрипт становится доступен для анализа так же, как и обычный скрипт, запущенный из отладчика.
 
* Скрипт становится доступен для анализа так же, как и обычный скрипт, запущенный из отладчика.
  
=== Пример 5: Отладка скрипта с циклом FOR ===
+
== Пример 5: Отладка скрипта с циклом FOR ==
  
'''Задача.''' Проверить корректность вычислений в цикле FOR.
+
'''Задача.''' Проверить корректность вычислений в цикле FOR. Пример скрипта:
 
 
# Откройте отладчик.
 
# Введите скрипт:
 
 
<source lang="json">
 
<source lang="json">
 +
<?>
 
set($sum, 0);
 
set($sum, 0);
for($i, 1, 10, set($sum, $sum + $i));
+
for($i, 1, 10,  
 +
set($sum, $sum + $i)
 +
);
 
showmessage($sum);
 
showmessage($sum);
 
</source>
 
</source>
# Установите точку останова на строке `set($sum, $sum + $i);`.
+
 
# Запустите скрипт (F9) и просматривайте значения `$i` и `$sum` при остановках.
+
План действий:
# Добавьте выражение наблюдения `$sum + $i` для контроля вычислений.
+
# Откройте отладчик.
 +
# Введите скрипт.
 +
# Установите точку останова на строке set($sum, $sum + $i);.
 +
# Запустите скрипт (F9) и просматривайте значения $i и $sum при остановках.
 +
# Добавьте выражение наблюдения $sum + $i для контроля вычислений.
  
 
'''Что даёт отладчик:'''
 
'''Что даёт отладчик:'''
Строка 322: Строка 302:
 
* Удобно находить ошибки в граничных условиях цикла.
 
* Удобно находить ошибки в граничных условиях цикла.
  
=== Пример 6: Использование выражений наблюдения ===
+
== Пример 6: Использование выражений наблюдения ==
 
 
'''Задача.''' Одновременно контролировать несколько взаимосвязанных значений.
 
  
# Откройте отладчик.
+
'''Задача.''' Одновременно контролировать несколько взаимосвязанных значений. Пример скрипта:
# Введите скрипт:
 
 
<source lang="json">
 
<source lang="json">
 +
<?>
 
set($a, 10);
 
set($a, 10);
 
set($b, 20);
 
set($b, 20);
Строка 335: Строка 313:
 
showmessage($result);
 
showmessage($result);
 
</source>
 
</source>
# Установите точку останова на строке `set($result, $a + $b + $c);`.
+
 
 +
План действий:
 +
# Откройте отладчик.
 +
# Введите скрипт.
 +
# Установите точку останова на строке set($result, $a + $b + $c);.
 
# Запустите скрипт (F9).
 
# Запустите скрипт (F9).
 
# Добавьте выражения наблюдения:
 
# Добавьте выражения наблюдения:
#* `$a + $b`
+
#* $a + $b
#* `$b + $c`
+
#* $b + $c
#* `$a + $b + $c`
+
#* $a + $b + $c
 
# При остановке сравните значения выражений и итоговый результат.
 
# При остановке сравните значения выражений и итоговый результат.
  
Строка 346: Строка 328:
 
* Одновременно видно несколько ключевых показателей.
 
* Одновременно видно несколько ключевых показателей.
 
* Легче находить расхождения между промежуточными и итоговыми значениями.
 
* Легче находить расхождения между промежуточными и итоговыми значениями.
 
== Заключение ==
 
 
Отладчик скриптов — компактный и практичный инструмент для работы со скриптами встроенного языка. 
 
Он позволяет быстро находить ошибки в логике, контролировать переменные и подключаться к выполняющимся скриптам без изменения бизнес-процессов в приложении.
 

Текущая версия на 12:44, 5 декабря 2025

Интерфейс

ScriptDebugger.png

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

  • Отчеты > SQL > Выполнить > Запустить отладчик
  • Отчеты > Дополнительные возможности > Редактировать
  • В главном окне приложения комбинацией Ctrl+Shift+D

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

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

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

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

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

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

Лог

Отображает:

  • Вывод сообщений напрямую из скрипта командой print
  • Сообщения отладчика (остановка на breakpoint, ошибки)

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

  • Запустить — Запуск скрипта в режиме отладки (F9). При необходимости установите точки останова, cкрипт выполнится до первой точки останова или до ошибки.
  • Остановить — Прерывание дальнейшего исполнения скрипта. Во время выполнения скрипта можно нажать и удерживать клавишу ESC для аварийной остановки.
  • Продолжить — Возобновление выполнения после остановки скрипта (F9)

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

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

Точки останова можно настроить перед запуском скрипта или когда выполнение скрипта приостановлено. Добавление точки останова:

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

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

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

Список Переменные содержит все переменные и объекты доступные в текущем инстансе интерпретатора. Список автоматически отображаются в момент остановки выполнения скрипта.

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

Список Наблюдения показывает все добавленные пользователям выражения и их рассчитанные значения. Значения обновляются автоматически в момент остановки выполнения скрипта или после редактирования выражения. Для добавления наблюдения:

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

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

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

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

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

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

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

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

Всегда есть возможность сохранить скрипт в файл.

  • Меню Файл > Сохранить в файл — Сохраняет текущий текст скрипта в файл. Если файл был сохранен ранее, по умолчанию предлагается предыдуший путь.
  • Меню Файл > Сохранить (Ctrl+S) — Когда отладчик открыт без привязки к конкретному скрипту, то сохраняет изменения в файл.
Важно! Если отладчик открыли например из Отчеты > Дополнительные возможности > Редактировать то сохранения через пункт Сохранить (Ctrl+S) сохранения всегда будет происходить в базу, в файл изменения сохранены не будут.

Сохранение

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

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

Подключение отладчика к работающим скриптам

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

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

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

  1. В отладчике:
    1. Откройте отладчик скриптов, главное меню Отчеты > SQL > Выполнить > Запустить отладчик (F9).
    2. Включите режим отслеживания: меню Файл > Ожидать команды AttachDebugger.
    3. В строке состояния отладчика появится сообщение Ожидание команды AttachDebugger....
    4. Свернуть отладчик, если его закрыть то наблюдение остановится.
  2. В скрипте:
    1. Скрипт нужно подготовить. В скрипте нужно прописать команду AttachDebugger она должна быть первой командой или идти следующей строкой после тега начала скрипта <?>
    2. Запустить скрипт стандартным образом: Сформировать печатную форму, рассчитать стоимость доставки, выполнить действие для вызова события.
  3. Что происходит:
    1. При выполнении команды AttachDebugger - скрипт останавливается.
    2. Отладчик автоматически подключается к перехваченному скрипту.
    3. Текст скрипта загружается в редактор отладчика.
    4. Можно ставить точки останова, просматривать переменные и продолжать отладку.

Пример скрипта с запросом подключения к отладчику:

<?>
AttachDebugger;
set($a, 10);
set($b, 20);
set($sum, $a + $b);
showmessage($sum);

Важно:

  • Отладчик должен быть в режиме отслеживания до того, как скрипт дойдёт до команды 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. Откройте Отчеты > SQL введите скрипт из примера.
  4. Запустите скрипт через меню Выполнить > Выполнить как скрипт (F7).
  5. Когда выполнение дойдёт до AttachDebugger, отладчик автоматически подключится.
  6. Установите точку останова на строке if($count > 100.
  7. Продолжите выполнение и проанализируйте значение $count.

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

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

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

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

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

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

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

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

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

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

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

<?>
set($a, 10);
set($b, 20);
set($c, 30);
set($result, $a + $b + $c);
showmessage($result);

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

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

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

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