Версия:

Модуль tdb

Модуль tdb

Отладчик Tarantool’а (сокращенно tdb) можно использовать с любой Lua-программой. Рабочие функции: определение точек прерывания, исследование переменных, перебор строк по одной, обратная трассировка и отображение информации о файберах. Функции вывода: использование различных цветов в разных ситуациях, включая номера строк, и добавление подсказок.

Модуль не поставляется в репозитории Tarantool’а, его следует устанавливать отдельно. Это обычно делается следующим образом:

$ git clone --recursive https://github.com/Sulverus/tdb
 $ cd tdb
 $ make
 $ sudo make install prefix=/usr/share/tarantool/

Чтобы запустить tdb в рамках Lua-программы и определить точку прерывания, включите в программу следующие строки:

tdb = require('tdb')
 tdb.start()

Чтобы начать сессию отладки, выполните Lua-программу: выполнение остановится на точке прерывания, и можно будет вводить команды отладчика.

Команды отладчика

bt
Обратная трассировка – отображение стека (красным) с именами программы/функции и номерами строк, выполнение которых привело к текущей строке.
c
Продолжение выполнения до следующей точки прерывания или до окончания программы.
e
Вход в режим вычисления. Когда программа находится в режиме вычисления, можно выполнять определенные запросы, которые будут действовать с точки зрения контекста. Это особенно полезно для отображения значений переменных программы. Другие команды отладчика не будут работать, пока не выйти из режима оценки, набрав: -e.
-e
Выход из режима оценка.
f
Отображение идентификатора файбера, имени программы и процентного соотношения использованной памяти в виде таблицы.
n
Переход на следующую строку с пропуском любых вызовов функций.
globals
Отображение имен переменных или функций, которые являются глобальными.
h
Отображение списка команд отладчика.
locals
Отображение имен и значений переменных, например, переменных для управления Lua-оператором «for».
q
Немедленный выход.

Пример сессии

Сохраните следующую программу в директории по умолчанию и назовите ее «example.lua»:

tdb = require('tdb')
 tdb.start()
 i = 1
 j = 'a' .. i
 print('end of program')

Запустите Tarantool, используя example.lua в качестве файла инициализации.

$ tarantool example.lua

Теперь вывод на экране выглядит следующим образом:

$ :codebold:`tarantool example.lua`
 :codeblue:`(TDB)`  :codegreen:`Tarantool debugger v.0.0.3. Type h for help`
 example.lua
 :codeblue:`(TDB)`  :codegreen:`[example.lua]`
 :codeblue:`(TDB)`  :codenormal:`3: i = 1`
 :codeblue:`(TDB)>`

Запросы отладчика выделены синим, подсказки и информация – зеленым, а текущая строка – 3 строка программы example.lua – цветом, который используется по умолчанию. Введите 6 команд отладчика:

n  -- переход на следующую строку
 n  -- переход на следующую строку
 e  -- вход в режим оценки
 j  -- отображение j
 -e -- выход из режима оценки
 q  -- выход

Теперь вывод на экране выглядит следующим образом:

$ :codebold:`tarantool example.lua`
 :codeblue:`(TDB)`  :codegreen:`Tarantool debugger v.0.0.3. Type h for help`
 example.lua
 :codeblue:`(TDB)`  :codegreen:`[example.lua]`
 :codeblue:`(TDB)`  :codenormal:`3: i = 1`
 :codeblue:`(TDB)>` n
 :codeblue:`(TDB)`  :codenormal:`4: j = 'a' .. i`
 :codeblue:`(TDB)>` n
 :codeblue:`(TDB)`  :codenormal:`5: print('end of program')`
 :codeblue:`(TDB)>` e
 :codeblue:`(TDB)`  :codegreen:`Eval mode ON`
 :codeblue:`(TDB)>` j
 j       a1
 :codeblue:`(TDB)>` -e
 :codeblue:`(TDB)`  :codegreen:`Eval mode OFF`
 :codeblue:`(TDB)>` q

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