trace используется при трассировке выполнения кода.
Показывает трассировки для:

  • точки выполнения
  • выражение или списка выражения
  • все аргументов и переменных, доступных в текущем методе

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

  • Формат отображения; trace генерирует expression-text = expression-value для каждого выражения
  • Информация о позиции (имя файла, номер строки, декларация классов и методов)
  • Трассировка может быть отключена параметром при сборке

cobra -include-traces:no ...

Трассировка полезна для отладки (для отображения промежуточных значений выражения) и регистрации контрольных точек (например, о том, что код в блоке кода выполняется).
Использование trace без аргументов, выводит только о текущей позиции - имя файла, номер строки, декларации класса и метода. Если класс текущего объекта является подклассом объявленного класса, то выводится имя подкласса.
Когда было получено одно или несколько выражений, trace выводит ту же информацию, а также исходный код и значение каждого выражения.
trace all выражение используется для удобства регистрации

  • текущей позиции,
  • каждого аргумента метода
  • каждой локальной переменной.

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

Синтаксис

править

trace
trace <expr1>, <expr2>, ... <expr3>
trace all
trace off
trace on

Пример

править

class Foo 

    var _z as int 

    def computeStuff(x as int, y as int) 
        if x > y 
            trace 
            return 
        _z = x * y 
        trace all 
        trace _z

trace: at Foo.cobra:7; in Foo.computeStuff
trace: this=Foo; x=4; y=2; at Foo.cobra:10; in Foo.computeStuff
trace: this=Foo; _z=8; at Foo.cobra:11; in Foo.computeStuff