Средства отладки
Пользователи Tarantool’а могут воспользоваться преимуществами встроенных средств отладки, которые составляют часть:
Библиотека debug
предоставляет интерфейс для отладки Lua-программ. Все функции этой библиотеки содержатся в таблице debug
. В функциях для работы с потоками есть дополнительный первый параметр, в котором указывается необходимый поток. По умолчанию, это всегда текущий поток.
Примечание
Библиотеку следует использовать только для отладки и профилирования, а не в качестве программного средства, поскольку данные функции выполняются слишком долго. Кроме того, некоторые из этих функций могут привести к нарушению работы безопасного в других отношениях кода.
Ниже приведен перечень всех функций библиотеки debug
.
Имя | Назначение |
---|---|
debug.debug() | Вход в интерактивный режим |
debug.getfenv() | Получение среды объекта |
debug.gethook() | Получение текущих настроек ловушки потока |
debug.getinfo() | Получение информации о функции |
debug.getlocal() | Получение имени и значения локальной переменной |
debug.getmetatable() | Получение метатаблицы объекта |
debug.getregistry() | Получение таблицы реестра |
debug.getupvalue() | Получение имени и значения сопоставляющего значения |
debug.setfenv() | Определение среды объекта |
debug.sethook() | Определение данной функции в качестве ловушки |
debug.setlocal() | Присваивание значения локальной переменной |
debug.setmetatable() | Определение метатаблицы объекта |
debug.setupvalue() | Присваивание значения сопоставляющему значению |
debug.traceback() | Получение обратной трассировки стека вызовов |
-
debug.
debug
() Вход в интерактивный режим и выполнение каждой строки, которую печатает пользователь. Пользователь может, в частности, проверять глобальные и локальные переменные, изменять их значения и вычислять выражения.
Введите
cont
для выхода из данной функции, чтобы вызывающий клиент мог продолжить выполнение.Примечание
Команды для
debug.debug()
не вложены лексически в какую-либо функцию, поэтому у них нет прямого доступа к локальным переменным.
-
debug.
getfenv
(object) Параметры: - object – объект, для которого будет получена среда
возвращает: среда объекта
object
-
debug.
gethook
([thread]) возвращает: текущие настройки ловушки потока
thread
в виде трех значений:- текущая функция-ловушка
- текущая маска ловушки
- текущий счетчик ловушки, как определяет функция
debug.sethook()
-
debug.
getinfo
([thread, ]function[, what]) Параметры: - function – функция, по которой будет получена информация
- what (string) – какую информацию о функции
function
вернуть
возвращает: таблица с информацией о функции
function
Можно передать функцию
function
напрямую или же передать число, которое указывает на функцию, выполняемую на уровнеfunction
стека вызовов данного потокаthread
: уровень 0 – это текущая функция (сама функцияgetinfo()
), уровень 1 – это функция, которая вызвалаgetinfo()
, и т.д. Если для функцииfunction
указано число больше числа активных функций,getinfo()
вернетnil
.По умолчанию,
what
– это вся доступная информация, кроме таблицы допустимых строк. Если задать опциюf
, добавится поле под названиемfunc
с самой функцией. Если задать опциюL
, добавится поле под названиемactivelines
с таблицей доступных строк.
-
debug.
getlocal
([thread, ]level, local) Параметры: - level (number) – уровень стека
- local (number) – индекс локальной переменной
возвращает: имя и значение локальной переменной с индексом
local
функции на уровнеlevel
стека илиnil
, если нет локальной переменной с указанным индексом; появится ошибка, если уровеньlevel
вне диапазонаПримечание
Можно вызвать
debug.getinfo()
для проверки доступности уровня.
-
debug.
getmetatable
(object) Параметры: - object – объект, для которого будет получена метатаблица
возвращает: метатаблица объекта
object
илиnil
, если метатаблица отсутствует
-
debug.
getupvalue
(func, up) Параметры: - func (function) – функция, для которой будет получено сопоставляющее значение
- up (number) – индекс сопоставляющего значения функции
возвращает: имя и значение сопоставляющего значения с индексом
up
функцииfunc
илиnil
, если нет сопоставляющего значения в пределах заданного индекса
-
debug.
setfenv
(object, table) Определение среды объекта
object
для таблицыtable
.Параметры: - object – объект, среда которого будет изменена
- table (table) – таблица для определения среды объекта
возвращает: объект
object
-
debug.
sethook
([thread, ]hook, mask[, count]) Определение данной функции в качестве ловушки. При вызове без аргументов ловушка отключается.
Параметры: - hook (function) – функция, которая будет определена в качестве ловушки
- mask (string) – описание того, когда будет вызвана ловушка
hook
; может принимать следующие значения: *c
– ловушка``hook`` вызывается каждый раз, когда Lua вызывает функцию *r
– ловушкаhook
вызывается каждый раз, когда Lua возвращается из функции *l
– ловушкаhook
вызывается каждый раз, когда Lua переходит на новую строку кода - count (number) – описание того, когда будет вызвана ловушка
hook
; если отличается от нуля, ловушкаhook
вызывается после каждой инструкцииcount
.
-
debug.
setlocal
([thread, ]level, local, value) Присвоение значения
value
локальной переменной с индексомlocal
функции на уровнеlevel
стекаПараметры: - level (number) – уровень стека
- local (number) – индекс локальной переменной
- value – значение, присваиваемое локальной переменной
возвращает: имя локальной переменной или
nil
, если локальная переменная с заданным индексом отсутствует; возникает ошибка, если уровеньlevel
вне диапазонаПримечание
Можно вызвать
debug.getinfo()
для проверки доступности уровня.
-
debug.
setmetatable
(object, table) Определение метатаблицы объекта
object
для таблицыtable
.Параметры: - object – объект, метатаблица которого будет изменена
- table (table) – таблица для определения метатаблицы объекта
-
debug.
setupvalue
(func, up, value) Присвоение значения
value
сопоставляющему значению с индексомup
функцииfunc
.Параметры: - func (function) – функция, для которой будет определено сопоставляющее значение
- up (number) – индекс сопоставляющего значения функции
- value – значение, присваиваемое сопоставляющему значению функции
возвращает: имя сопоставляющего значения или
nil
, если сопоставляющее значение с данным индексом отсутствует
-
debug.
traceback
([thread, ][message][, level]) Параметры: - message (string) – необязательное сообщение, добавленное к началу обратной трассировки
- level (number) – указывает на каком уровне начинать обратную трассировку (по умолчанию, 1)
возвращает: строка с обратной трассировкой стека вызовов