Перевести страницу

Создание приложений для науки и производства ещё не было таким простым

Отладочные операции

Отладочные операции являются вспомогательными средствами в сложных ситуациях, когда требуется отладка, но использование интерактивного отладчика по какой-то причине не желательно. Кроме этого, операции для работы со временем могут пригодиться и для других применений.


trace

Формат вызова:

    trace <parameter0> [<parameter1> [<parameter2> [<parameter3>]]];

ничего не возвращает, принимает от одного до четырех параметров;

все параметры типа логическое, допустимы любые операнды, массивы не допустимы;

назначение операции: включает и выключает различные режимы трассировки выполнения Ci-программы, если первый параметр указан и имеет значение TRUE, разрешает трассировку выполнения Ci-программы, при которой в стандартный поток выводятся имена выполняемых операций, если не указан, то ничего не изменяется, если указан со значением FALSE, то трассировка отключается.


После имени в консоль выводятся значения параметров операции до и после ее вызова, а также возвращаемое ей значение, например:

    trace TRUE;

    float b, c 1.00096, d 1.00000096;

    b = (c + d);

в результате трассировка будет выглядеть:

    +

    before:

    00: variable float 1.000960

    01: variable float 1.000001

    after:

    result float 2.000961

    00: variable float 1.000960

    01: variable float 1.000001

    =

    before:

    00: variable float 0.000000

    01: result float 2.000961

    after:

    00: variable float 2.000961

    01: result float 2.000961


Если второй параметр указан и имеет значение TRUE, то при трассировке «раскрываются» массивы – будут показываться значения всех их элементов, этим следует пользоваться с осторожностью, поскольку трассировка массивов большого размера будет занимать много времени, если не указан, то ничего не изменяется, если указан со значением FALSE, то раскрытие массивов отключается.


Если третий параметр указан и имеет значение TRUE, то будет включен режим пошагового прохождения, который зависит от реализации в каждой конкретной версии Ci, если не указан, то ничего не изменяется, если указан со значением FALSE, то пошаговое прохождение отключается.


Если четвертый параметр указан и имеет значение TRUE, то в начале каждого выполняемого блока выводится количество переменных и размер стека вызовов функций, это предназначено для системной отладки, и программистами на Ci не должно применяться, если параметр не указан, то ничего не изменяется, если указан со значением FALSE, то системная трассировка отключается.

Выключение любого режима трассировки производится вызовом trace и указанием на месте соответствующего параметра значения FALSE – если надо отключить только второй режим, но оставить первый, то надо вызывать trace TRUE FALSE, поскольку trace FALSE FALSE отключит оба режима, следовательно для гибкого управления трассировкой надо завести логические переменные, состояние которых менять при необходимости, и передавать их параметрами операции trace.


По умолчанию трассировка выключена.


time

Формат вызова:

    (time [<parameter0>])

возвращает строку, может принимать один параметр;

параметр типа беззнаковое целое, допустим любой операнд, массив недопустим;

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

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

    puts (time);

    puts (time 0x22) `` выведет строку вида 12"30"04


date

Формат вызова:

    (date [<parameter0>])

возвращает строку, может принимать один параметр;

параметр типа беззнаковое целое, допустим любой операнд, массив недопустим;

назначение операции: возвращает в виде строки текущую дату, месяц и год представлены двухзначным числом, формат даты международный (месяц-число-год);

необязательный параметр задает код символа разделителя, если его нет, то используется разделитель - (минус). Примеры использования:

    puts (date);

    puts (date 0x2F) `` выведет строку вида 11/30/08


timer

Форматы вызова:

    timer [<parameter0>];

    (timer [<parameter0>])

возвращает беззнаковое целое, возврат может быть проигнорирован, может принимать один параметр;

параметр типа логическое, допустим любой операнд, массив не допустим;

назначение операции: перезапуск таймера и измерение времени от предыдущего перезапуска, может иметь необязательный параметр, если указано TRUE, перезапускает таймер, если FALSE или параметр отсутствует, перезапуск не происходит, возвращаемое значение равно интервалу времени в миллисекундах от момента последнего перезапуска таймера, если требуется только перезапустить таймер, то возвращаемое значение можно игнорировать, в начале измерения таймер требуется перезапустить, иначе потом будет возвращено псевдослучайное число. Пример использования:

    .... ``код программы

    timer TRUE; ``метка А, отсюда надо измерить интервал времени

    ....

    puts (timer); ``выведет интервал времени от метки А, но таймер не перезапустится

    ....

    puts (timer TRUE); ``метка B выведет интервал от метки А, таймер перезапустится

    ....

    puts (timer); ``выведет интервал от метки B, таймер продолжит считать от нее.