Tarantool CE/EE Documentation portal logo
Помощь
Обновлена 15 сентября 2026 г. в 08:55

Средства отладки

Общие сведения

Пользователи Tarantool могут воспользоваться преимуществами встроенных средств отладки, которые составляют часть:

  • Lua (библиотека debug, подробности см. ниже) и
  • LuaJIT (функции debug.*).

Библиотека 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.sourcedir()

Получение имени каталога исходного файла

debug.sourcefile()

Получение имени исходного файла

debug.traceback()

Получение трассировки стека вызовов

debug.debug()

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

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

debug.getfenv(object)

Параметры:

  • object (table, userdata, thread или function) — объект, среду которого требуется получить

Возвращает

среда объекта object

debug.gethook([thread])

Возвращает

текущие настройки ловушки потока thread в виде трех значений:

  • текущая функция-ловушка
  • текущая маска ловушки
  • текущий счетчик ловушки, заданный функцией debug.sethook()

debug.getinfo([thread,] function [, what])

Параметры:

  • function (function или number) — функция, о которой требуется получить информацию
  • 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.getmetatable(object)

Параметры:

  • object (table, userdata, thread или function) — объект, метатаблицу которого требуется получить

Возвращает

метатаблица объекта object или nil, если метатаблица отсутствует

debug.getregistry()

Возвращает

таблица реестра

debug.getupvalue(func, up)

Параметры:

  • func (function) — функция, сопоставляющее значение которой требуется получить
  • up (number) — индекс сопоставляющего значения функции

Возвращает

имя и значение сопоставляющего значения с индексом up функции func или nil, если сопоставляющее значение с данным индексом отсутствует

debug.setfenv(object, table)

Определение среды объекта object для таблицы table.

Параметры:

  • object (table, userdata, thread или function) — объект, среду которого требуется изменить
  • 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 вызывается после каждых count инструкций.

debug.setlocal([thread,] level, local, value)

Присвоение значения value локальной переменной с индексом local функции на уровне level стека

Параметры:

  • level (number) — уровень стека
  • local (number) — индекс локальной переменной
  • value (boolean, number, string или userdata) — значение, присваиваемое локальной переменной

Возвращает

имя локальной переменной или nil, если локальная переменная с данным индексом отсутствует; вызывает ошибку, если level выходит за пределы допустимого диапазона

debug.setmetatable(object, table)

Определение метатаблицы объекта object для таблицы table.

Параметры:

  • object (table, userdata, thread или function) — объект, метатаблицу которого требуется изменить
  • table (table) — таблица, задаваемая в качестве метатаблицы объекта

debug.setupvalue(func, up, value)

Присвоение значения value сопоставляющему значению с индексом up функции func.

Параметры:

  • func (function) — функция, сопоставляющее значение которой требуется задать
  • up (number) — индекс сопоставляющего значения функции
  • value (boolean, number, string или userdata) — значение, присваиваемое сопоставляющему значению функции

Возвращает

имя сопоставляющего значения или nil, если сопоставляющее значение с данным индексом отсутствует

debug.sourcedir([level])

Параметры:

  • level (number) — уровень стека вызовов, который должен содержать путь (по умолчанию 2)

Возвращает

строка с относительным путем к каталогу исходного файла

Вместо debug.sourcedir() можно использовать debug.__dir__ — это эквивалентные вызовы.

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

Если debug.sourcedir() является частью аргумента return, его следует заключить в скобки: return (debug.sourcedir()).

debug.sourcefile([level])

Параметры:

  • level (number) — уровень стека вызовов, который должен содержать путь (по умолчанию 2)

Возвращает

строка с относительным путем к исходному файлу

Вместо debug.sourcefile() можно использовать debug.__file__ — это эквивалентные вызовы.

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

Если debug.sourcefile() является частью аргумента return, его следует заключить в скобки: return (debug.sourcefile()).

debug.traceback([thread,] [message] [, level])

Параметры:

  • 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