Средства отладки
Пользователи Tarantool могут воспользоваться преимуществами встроенных средств отладки, которые составляют часть:
Библиотека debug предоставляет интерфейс для отладки
Lua-программ. Все функции этой библиотеки содержатся в таблице debug.
В функциях для работы с потоками есть дополнительный первый параметр, в
котором указывается необходимый поток. По умолчанию, это всегда текущий
поток.
Ниже приведен перечень всех функций библиотеки debug.
Имя | Назначение |
|---|---|
Вход в интерактивный режим | |
Получение среды объекта | |
Получение текущих настроек ловушки потока | |
Получение информации о функции | |
Получение имени и значения локальной переменной | |
Получение метатаблицы объекта | |
Получение таблицы реестра | |
Получение имени и значения сопоставляющего значения | |
Определение среды объекта | |
Установка функции в качестве ловушки | |
Присвоение значения локальной переменной | |
Определение метатаблицы объекта | |
Присвоение значения сопоставляющему значению | |
Получение имени каталога исходного файла | |
Получение имени исходного файла | |
Получение трассировки стека вызовов |
Вход в интерактивный режим и выполнение каждой строки, которую печатает пользователь. Пользователь может, в частности, проверять глобальные и локальные переменные, изменять их значения и вычислять выражения.
Введите cont для выхода из данной функции, чтобы вызывающий клиент мог
продолжить выполнение.
Параметры:
object(table,userdata,threadилиfunction) — объект, среду которого требуется получить
Возвращает
среда объекта object
Возвращает
текущие настройки ловушки потока thread в виде трех значений:
- текущая функция-ловушка
- текущая маска ловушки
- текущий счетчик ловушки, заданный функцией
debug.sethook()
Параметры:
function(functionилиnumber) — функция, о которой требуется получить информациюwhat(string) — какая информация о функцииfunctionдолжна быть возвращена
Возвращает
таблица с информацией о функции function
Можно передать функцию function напрямую или же передать число,
которое указывает на функцию, выполняемую на уровне function стека
вызовов данного потока thread: уровень 0 – это текущая функция (сама
функция getinfo()), уровень 1 – это функция, которая вызвала
getinfo(), и т.д. Если для функции function указано число больше
числа активных функций, getinfo() вернет nil.
По умолчанию, what – это вся доступная информация, кроме таблицы
допустимых строк. Если задать опцию f, добавится поле под названием
func с самой функцией. Если задать опцию L, добавится поле под
названием activelines с таблицей доступных строк.
Параметры:
level(number) — уровень стекаlocal(number) — индекс локальной переменной
Возвращает
имя и значение локальной переменной с индексом local функции на
уровне level стека или nil, если локальная переменная с данным
индексом отсутствует; вызывает ошибку, если level выходит за
пределы допустимого диапазона
Параметры:
object(table,userdata,threadилиfunction) — объект, метатаблицу которого требуется получить
Возвращает
метатаблица объекта object или nil, если метатаблица отсутствует
Возвращает
таблица реестра
Параметры:
func(function) — функция, сопоставляющее значение которой требуется получитьup(number) — индекс сопоставляющего значения функции
Возвращает
имя и значение сопоставляющего значения с индексом up функции
func или nil, если сопоставляющее значение с данным индексом
отсутствует
Определение среды объекта object для таблицы table.
Параметры:
object(table,userdata,threadилиfunction) — объект, среду которого требуется изменитьtable(table) — таблица, задаваемая в качестве среды объекта
Возвращает
объект object
Определение данной функции в качестве ловушки. При вызове без аргументов ловушка отключается.
Параметры:
-
hook(function) — функция, задаваемая в качестве ловушки -
mask(string) — описывает, когда будет вызвана ловушкаhook; может принимать следующие значения:c— ловушкаhookвызывается каждый раз при вызове функции в Luar— ловушкаhookвызывается каждый раз при возврате из функции в Lual— ловушкаhookвызывается каждый раз при переходе к новой строке кода в Lua
-
count(number) — описывает, когда будет вызвана ловушка; если значение отлично от нуля, ловушкаhookвызывается после каждыхcountинструкций.
Присвоение значения value локальной переменной с индексом local
функции на уровне level стека
Параметры:
level(number) — уровень стекаlocal(number) — индекс локальной переменнойvalue(boolean,number,stringилиuserdata) — значение, присваиваемое локальной переменной
Возвращает
имя локальной переменной или nil, если локальная переменная с
данным индексом отсутствует; вызывает ошибку, если level выходит
за пределы допустимого диапазона
Определение метатаблицы объекта object для таблицы table.
Параметры:
object(table,userdata,threadилиfunction) — объект, метатаблицу которого требуется изменитьtable(table) — таблица, задаваемая в качестве метатаблицы объекта
Присвоение значения value сопоставляющему значению с индексом up
функции func.
Параметры:
func(function) — функция, сопоставляющее значение которой требуется задатьup(number) — индекс сопоставляющего значения функцииvalue(boolean,number,stringилиuserdata) — значение, присваиваемое сопоставляющему значению функции
Возвращает
имя сопоставляющего значения или nil, если сопоставляющее значение
с данным индексом отсутствует
Параметры:
level(number) — уровень стека вызовов, который должен содержать путь (по умолчанию 2)
Возвращает
строка с относительным путем к каталогу исходного файла
Вместо debug.sourcedir() можно использовать debug.__dir__ — это
эквивалентные вызовы.
Определение реального пути к каталогу возможно только в том случае, если функция была определена в Lua-файле (это ограничение может не применяться к loadstring(), так как Lua сохраняет всю строку в отладочной информации).
Если debug.sourcedir() является частью аргумента return, его следует
заключить в скобки: return (debug.sourcedir()).
Параметры:
level(number) — уровень стека вызовов, который должен содержать путь (по умолчанию 2)
Возвращает
строка с относительным путем к исходному файлу
Вместо debug.sourcefile() можно использовать debug.__file__ — это
эквивалентные вызовы.
Определение реального пути к файлу возможно только в том случае, если
функция была определена в Lua-файле (это ограничение может не
применяться к loadstring(), так как Lua сохраняет всю строку в
отладочной информации).
Если debug.sourcefile() является частью аргумента return, его
следует заключить в скобки: return (debug.sourcefile()).
Параметры:
message(string) — необязательное сообщение, добавляемое перед трассировкойlevel(number) — указывает уровень, с которого начинается трассировка (по умолчанию 1)
Возвращает
строка с трассировкой стека вызовов
Пример:
Создайте файл example.lua в каталоге /tmp со следующим содержимым:
function w()print(debug.sourcedir())print(debug.sourcefile())print(debug.traceback())print(debug.getinfo(1)['currentline'])endw()
Выполните tarantool /tmp/example.lua. Ожидаемый результат:
/tmp/tmp/example.luastack traceback:/tmp/example.lua:4: in function 'w'/tmp/example.lua:7: in main chunk5