Отладчик

Этот раздел позволяет посмотреть состояние переменных в момент выполнения кода. Это очень удобно, когда нужно починить переставший работать скрипт или просто отладить его.

image.png

Чтобы воспользоваться отладкой, поставьте в коде инструкцию отладки со следующим синтаксисом: debug(parameter : text); Когда код дойдёт до этой инструкции, во вкладке «Отладчик» появится запись: содержимое параметра станет её заголовком, а под ним будет показана структура всех доступных в этот момент переменных с их текущими значениями.

Примечание: любую особо интересующую вас переменную можно добавить прямо в текстовую строку, чтобы сразу увидеть её значение в окне отладчика, — но следите за тем, чтобы тип был текстовым! (например, debug("Debug point 1 : " + Variable1); )

Если присмотреться к окну отладки, видно, что при каждом выполнении инструкции debug создаётся новая строка.

В этой строке указано имя точки отладки — текст, переданный параметром в функцию debug, например: debug("my debug point").

В начале строки также показано время, прошедшее с предыдущей строки отладки. Это помогает оценивать быстродействие кода (см. выше). У первой строки всегда значение «start».

Сама эта строка отладки содержит столько строк переменных, сколько переменных объявлено в скрипте до инструкции debug. В каждой строке переменной указаны имя, тип, значение и фрагмент кода, где переменная объявлена.

debug.svg

Использование в циклах

Если поставить debug внутрь цикла, вы увидите состояние переменных на каждом витке. Видно также время, потраченное на каждый виток. В примере ниже задержка не превышает 1 мс.

let a := select Customer
let d := for i in a do
           debug("for each customer");
           i.'first name' + " " + i.'last name';
         end;
debug("all customers");
d;

Запись экрана 2024-12-29 в 12.32.33.gif

Но если добавить дорогую по времени выполнения инструкцию, например «select», станет видно, что время между витками заметно вырастает.

let a := select Customer
let d := for i in a do
           let e := select Invoice where Customer = i;
           debug("for each customer");
           i.'first name' + " " + i.'last name' + " " + sum(e.TOTAL);
         end;
debug("all customers");
d;

image.png

Поставив инструкцию debug до и после блока скрипта, можно измерить общее время его выполнения:

debug("start of script");
let a := select Customer
let d := for i in a do
           i.'first name' + " " + i.'last name';
         end;
debug("end of script");
d;

image.png