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

Материал из Меасофт
Перейти к: навигация, поиск
(Подключение к выполняемому скрипту (AttachDebugger))
Строка 1: Строка 1:
= Отладчик скриптов =
+
= Отладчик скриптов=
 
 
== Обзор ==
 
  
 
[[Файл:ScriptDebugger.png]]
 
[[Файл:ScriptDebugger.png]]
Строка 11: Строка 9:
 
* '''Отчеты > Дополнительные возможности > Редактировать'''
 
* '''Отчеты > Дополнительные возможности > Редактировать'''
  
== Основные возможности ==
+
= Основные возможности =
  
 
* '''Запуск в режиме отладки''' — выполнение скрипта с остановкой на заданных строках
 
* '''Запуск в режиме отладки''' — выполнение скрипта с остановкой на заданных строках
Строка 21: Строка 19:
 
* '''Расширенный редактор''' - подсветка парных скобок, отображение скрытых симолов, закладки.
 
* '''Расширенный редактор''' - подсветка парных скобок, отображение скрытых симолов, закладки.
  
== Интерфейс отладчика ==
+
= Интерфейс отладчика =
  
=== Редактор кода ===
+
== Редактор кода ==
  
 
Основная область для написания и редактирования скрипта. Редактор поддерживает:
 
Основная область для написания и редактирования скрипта. Редактор поддерживает:
Строка 32: Строка 30:
 
* Подсветку парных скобок при установке курсора
 
* Подсветку парных скобок при установке курсора
  
=== Лог ===
+
== Лог ==
  
 
Отображает:
 
Отображает:
Строка 39: Строка 37:
 
* Временные метки для каждого сообщения в формате [hh:nn:ss]
 
* Временные метки для каждого сообщения в формате [hh:nn:ss]
  
=== Кнопки управления ===
+
== Кнопки управления ==
  
 
* '''Запустить''' — запуск скрипта в режиме отладки (F9)
 
* '''Запустить''' — запуск скрипта в режиме отладки (F9)
Строка 45: Строка 43:
 
* '''Продолжить''' — возобновление выполнения после остановки на точке останова (F9)
 
* '''Продолжить''' — возобновление выполнения после остановки на точке останова (F9)
  
== Работа с отладчиком ==
+
= Работа с отладчиком =
  
=== Запуск скрипта ===
+
== Запуск скрипта ==
  
 
# Введите или откройте скрипт в редакторе
 
# Введите или откройте скрипт в редакторе
Строка 54: Строка 52:
 
# Скрипт выполнится до первой точки останова или до ошибки
 
# Скрипт выполнится до первой точки останова или до ошибки
  
=== Установка точек останова ===
+
== Установка точек останова ==
  
 
'''Способ 1.''' Щёлкните левой кнопкой мыши в левой части нужной строки (область номеров строк). На строке появится красный кружок — точка останова установлена. Повторный щелчок удалит её.
 
'''Способ 1.''' Щёлкните левой кнопкой мыши в левой части нужной строки (область номеров строк). На строке появится красный кружок — точка останова установлена. Повторный щелчок удалит её.
Строка 62: Строка 60:
 
'''Важно.''' Точки останова всегда останавливают выполнение на указанной строке, дополнительные условия не поддерживаются.
 
'''Важно.''' Точки останова всегда останавливают выполнение на указанной строке, дополнительные условия не поддерживаются.
  
=== Просмотр переменных ===
+
== Просмотр переменных ==
  
 
При остановке на точке останова все переменные автоматически отображаются в списке.   
 
При остановке на точке останова все переменные автоматически отображаются в списке.   
 
Значения обновляются при каждой остановке.
 
Значения обновляются при каждой остановке.
  
=== Наблюдение за выражениями ===
+
== Наблюдение за выражениями ==
 
Показывает все переменные и объекты текущего контекста с их текущими значениями. Для добавления наблюдения:
 
Показывает все переменные и объекты текущего контекста с их текущими значениями. Для добавления наблюдения:
 
# Выделите текст в редакторе (например, имя переменной или выражение)
 
# Выделите текст в редакторе (например, имя переменной или выражение)
Строка 80: Строка 78:
 
* $i > 0 — логическое условие
 
* $i > 0 — логическое условие
  
=== Продолжение выполнения ===
+
== Продолжение выполнения ==
  
 
После остановки скрипта:
 
После остановки скрипта:
Строка 87: Строка 85:
 
# Нажмите кнопку '''Продолжить (F9)''' — выполнение продолжится до следующей точки останова или завершения скрипта
 
# Нажмите кнопку '''Продолжить (F9)''' — выполнение продолжится до следующей точки останова или завершения скрипта
  
=== Остановка выполнения ===
+
== Остановка выполнения ==
  
 
Во время выполнения скрипта можно нажать и удерживать клавишу '''ESC''' для аварийной остановки.
 
Во время выполнения скрипта можно нажать и удерживать клавишу '''ESC''' для аварийной остановки.
  
== Работа с файлами ==
+
= Работа с файлами =
  
=== Открытие файла с отслеживанием ===
+
== Открытие файла с отслеживанием ==
  
 
Меню '''Файл''' > '''Открыть и отслеживать'''.
 
Меню '''Файл''' > '''Открыть и отслеживать'''.
Строка 100: Строка 98:
 
При изменении файла во внешнем редакторе текст автоматически обновляется в отладчике.
 
При изменении файла во внешнем редакторе текст автоматически обновляется в отладчике.
  
=== Сохранение в файл ===
+
== Сохранение в файл ==
  
 
Меню '''Файл''' > '''Сохранить в файл'''.
 
Меню '''Файл''' > '''Сохранить в файл'''.
Строка 107: Строка 105:
 
Если файл был открыт ранее, по умолчанию предлагается исходный путь.
 
Если файл был открыт ранее, по умолчанию предлагается исходный путь.
  
== Сохранение ==
+
= Сохранение =
  
 
Если отладчик открыт как редактор скрипта, доступны функции по сохранению напрямую в базу данных:
 
Если отладчик открыт как редактор скрипта, доступны функции по сохранению напрямую в базу данных:
Строка 113: Строка 111:
 
* Кнопка  '''Сохранить и закрыть''' — сохранить скрипт и закрыть окно отладчика
 
* Кнопка  '''Сохранить и закрыть''' — сохранить скрипт и закрыть окно отладчика
  
== Подключение отладчика к работающим скриптам ==
+
= Подключение отладчика к работающим скриптам =
 
Данная возможность позволяет подключить отладчик к скриптам запущеным без него. Сначала нужно отладчик перевести в режим '''ожидания запросов отладки'''. Далее необходимо запустить скрипт стандартным способом. Если в скрипте будет команда AttachDebugger - отладчик это увидит и начнется процесс отладки этого скрипта. Это удобно для отладки скриптов, которые работают в своем контексте:
 
Данная возможность позволяет подключить отладчик к скриптам запущеным без него. Сначала нужно отладчик перевести в режим '''ожидания запросов отладки'''. Далее необходимо запустить скрипт стандартным способом. Если в скрипте будет команда AttachDebugger - отладчик это увидит и начнется процесс отладки этого скрипта. Это удобно для отладки скриптов, которые работают в своем контексте:
 
* Скриптов из печатных форм
 
* Скриптов из печатных форм
Строка 119: Строка 117:
 
* Скриптов из дополнительных услуг
 
* Скриптов из дополнительных услуг
  
=== Как использовать ===
+
== Как использовать ==
  
 
'''В отладчике:'''
 
'''В отладчике:'''
Строка 154: Строка 152:
 
* Если скрипт исполняется в шедулере или в другом вспомогательном потоке, то подключится к нему не получится. Отладка работает только в текущем потоке приложения.
 
* Если скрипт исполняется в шедулере или в другом вспомогательном потоке, то подключится к нему не получится. Отладка работает только в текущем потоке приложения.
  
== Горячие клавиши ==
+
= Горячие клавиши =
  
 
{| class="wikitable"
 
{| class="wikitable"
Строка 175: Строка 173:
 
|}
 
|}
  
== Настройки редактора ==
+
= Настройки редактора =
  
=== Перенос строк ===
+
== Перенос строк ==
  
 
Контекстное меню редактора > '''Перенос строк'''.
 
Контекстное меню редактора > '''Перенос строк'''.
Строка 184: Строка 182:
 
Настройка сохраняется и восстанавливается при следующем запуске отладчика.
 
Настройка сохраняется и восстанавливается при следующем запуске отладчика.
  
=== Отображение специальных символов ===
+
== Отображение специальных символов ==
  
 
Контекстное меню редактора > '''Показать специальные символы'''.
 
Контекстное меню редактора > '''Показать специальные символы'''.
Строка 191: Строка 189:
 
Удобно для поиска лишних пробелов и контроля форматирования кода.
 
Удобно для поиска лишних пробелов и контроля форматирования кода.
  
== Примеры использования ==
+
= Примеры использования =
  
=== Пример 1: Отладка скрипта с точками останова ===
+
== Пример 1: Отладка скрипта с точками останова ==
  
 
'''Задача.''' Проверить корректность простого цикла суммирования. Пример скрипта:
 
'''Задача.''' Проверить корректность простого цикла суммирования. Пример скрипта:
Строка 220: Строка 218:
 
* Можно быстро обнаружить ошибки в логике цикла.
 
* Можно быстро обнаружить ошибки в логике цикла.
  
=== Пример 2: Отладка скрипта с условиями ===
+
== Пример 2: Отладка скрипта с условиями ==
  
 
'''Задача.''' Проверить, корректно ли выбирается максимум из двух значений. Пример скрипта:  
 
'''Задача.''' Проверить, корректно ли выбирается максимум из двух значений. Пример скрипта:  
Строка 247: Строка 245:
 
* Удобно тестировать разные комбинации входных данных.
 
* Удобно тестировать разные комбинации входных данных.
  
=== Пример 3: Отладка скрипта с работой с базой данных ===
+
== Пример 3: Отладка скрипта с работой с базой данных ==
  
 
'''Задача.''' Проверить правильность выборки и обработки данных из базы. Пример скрипта:
 
'''Задача.''' Проверить правильность выборки и обработки данных из базы. Пример скрипта:
Строка 274: Строка 272:
 
* Можно проверить конкретные значения полей перед дальнейшей обработкой.
 
* Можно проверить конкретные значения полей перед дальнейшей обработкой.
  
=== Пример 4: Отладка скрипта через AttachDebugger ===
+
== Пример 4: Отладка скрипта через AttachDebugger ==
  
 
'''Задача.''' Подключиться к скрипту печатной формы, который выполняется из основного приложения.
 
'''Задача.''' Подключиться к скрипту печатной формы, который выполняется из основного приложения.
Строка 311: Строка 309:
 
* Скрипт становится доступен для анализа так же, как и обычный скрипт, запущенный из отладчика.
 
* Скрипт становится доступен для анализа так же, как и обычный скрипт, запущенный из отладчика.
  
=== Пример 5: Отладка скрипта с циклом FOR ===
+
== Пример 5: Отладка скрипта с циклом FOR ==
  
 
'''Задача.''' Проверить корректность вычислений в цикле FOR. Пример скрипта:
 
'''Задача.''' Проверить корректность вычислений в цикле FOR. Пример скрипта:
Строка 334: Строка 332:
 
* Удобно находить ошибки в граничных условиях цикла.
 
* Удобно находить ошибки в граничных условиях цикла.
  
=== Пример 6: Использование выражений наблюдения ===
+
== Пример 6: Использование выражений наблюдения ==
  
 
'''Задача.''' Одновременно контролировать несколько взаимосвязанных значений. Пример скрипта:
 
'''Задача.''' Одновременно контролировать несколько взаимосвязанных значений. Пример скрипта:

Версия 17:46, 2 декабря 2025

Содержание

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

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 - отладчик это увидит и начнется процесс отладки этого скрипта. Это удобно для отладки скриптов, которые работают в своем контексте:

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

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

В отладчике:

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

В скрипте:

  1. Скрипт нужно подготовить. В скрипте нужно прописать команду AttachDebugger она должна быть первой командой или идти сразу после тега начала скрипта <?>
  2. Запустить скрипт стандартным образом: Сформировать печатную форму, рассчитать стоимость доставки, выполнить действие для вызова события.

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

  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

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

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

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

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