Latest web development tutorials

отладки Lua (Debug)

Lua предоставляет библиотеку отладки для предоставления нам создать пользовательский функций преобразователя. Сам Lua не имеет встроенного губернатора, но многие разработчики делятся своим губернатором Lua код.

Lua в библиотеке отладки включает в себя следующие функции:

sethook ([нить,] крюк, маска [, число]):
Нет. Метод и цель
1. отладки ():

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

2. getfenv (объект):

Возвращает объект переменной окружения.

3. gethook (опционально резьба):

Возвращает представляют три нити крюка набор: текущая функция крюк, текущая маска крюк, и текущий счетчик крюк

4. GetInfo ([нить] е [ то , что]):

Информация о функции возвращает таблицу. Вы можете предоставить эту функцию, вы можете также использовать цифровое представление функции ф. Цифровая функция F представляет работает на стеке вызовов указанного потока в соответствующем уровне: уровень 0 указывает на текущую функцию (GetInfo себя); 1 слой указывает на то, что вызов функции GetInfo (если это не конец разговора, эта ситуация не входит в стек); и т.д. , Если F является функцией числа мероприятий, чем большее число, GetInfo возвращает NIL.

5. debug.getlocal ([нить,] е, локальная):

Эта функция возвращает имя и значение индекса стека слоев функция ф для локальных локальных переменных. Эта функция используется только для доступа к локальным переменным явным образом определены, в том числе параметров, временных переменных.

6. GetMetaTable (значение):

Данные точки индекс к значениям таблицы элементов в стек. Если индекс является недействительным, или стоимость юаня не таблица, функция возвращает 0 и не толкать ничего в стек.

7. getregistry ():

Назад таблицу реестра, которая из предопределенной таблицы могут быть использованы для сохранения любого кода C вы хотите сохранить значение Lua.

8. getupvalue (F, вверх)

Эта функция возвращает имена и значения функции ф первого вверх на значениях. Если этого не произошло от этого значения, то она возвращает ноль.
В '(' (открытые круглые скобки) представляют собой имя переменной, начинающееся, без имени переменной (за исключением отлаживать информации блочного кода).

10. Он будет функционировать как крюк установлен в. Строка маски и цифровой счетчик определяет крючок будет вызываться, когда. Маска представляет собой комбинацию из следующих символов в строку, каждый символ имеет свое значение:

  • ' c ': Всякий раз , когда Lua вызывает функцию, вызовите крюк;
  • ' r ': каждый раз , когда Lua возвращается из функции вызывается , когда крючок;
  • ' l ': каждый раз , когда Lua входит в новую строку, вызовите крюк.
11. SETLOCAL ([нить,] уровень, локальное, значение):

Эта функция будет первым локальное значение, назначенное функции слоя переменной уровня первого стека локального. Если у вас нет этой переменной, функция возвращает ноль. Если уровень приграничному, выдаст ошибку.

12. setmetatable (значение, таблица):

Значение элемента таблицы накрытым столом (может быть нулем). Возвращаемое значение.

13. setupvalue (е, вверх, значение) :

Эта функция будет сначала установить значение на значение функции ф. Если у вас нет этой функции на значение, она возвращает ноль в противном случае она возвращает имя предыдущих значений.

14. отслеживающий ([нить] [сообщение [уровень]]):

Если у Вас есть сообщение, а не строка или ноль, функцию без какого-либо лечения непосредственно обратно сообщение. В противном случае, она возвращает информацию стека обратное прослеживание стека вызовов. Необязательная строка сообщения добавляется в начале информации стека отладочные сообщения. Цифровые параметры заданного уровня, из которых слой стека возвратов (начавшиеся по умолчанию равно 1, что вызывает где отслеживающий о).

В таблице наша общая функция отладки, то мы можем посмотреть на некоторые простые примеры:

function myfunction ()
print(debug.traceback("Stack trace"))
print(debug.getinfo(1))
print("Stack trace end")
	return 10
end
myfunction ()
print(debug.getinfo(1))

Выполните приведенные выше результаты вывода кода:

Stack trace
stack traceback:
	test2.lua:2: in function 'myfunction'
	test2.lua:8: in main chunk
	[C]: ?
table: 0054C6C8
Stack trace end

В данном примере мы используем трассировку и GetInfo функции библиотеки отладки, GetInfo функция возвращает информацию таблица функции.

Другой пример

Часто возникает необходимость отладки локальных переменных внутри функции. Мы можем использовать getupvalue функцию, чтобы установить эти локальные переменные. Примерами могут служить следующие:

function newCounter ()
  local n = 0
  local k = 0
  return function ()
    k = n
    n = n + 1
    return n
    end
end

counter = newCounter ()
print(counter())
print(counter())

local i = 1

repeat
  name, val = debug.getupvalue(counter, i)
  if name then
    print ("index", i, name, "=", val)
	if(name == "n") then
		debug.setupvalue (counter,2,10)
	end
    i = i + 1
  end -- if
until not name

print(counter())

Выполните приведенные выше результаты вывода кода:

1
2
index	1	k	=	1
index	2	n	=	2
11

В приведенном выше примере, счетчик будет увеличиваться каждый раз, когда вызов 1. Примеры мы использовали getupvalue функцию для просмотра текущего состояния локальных переменных. Мы можем установить локальную переменную в новое значение. Пример, перед установкой п = 2, используйте setupvalue функции установите его в 10. Теперь мы называем функцию после выполнения выхода составляет 11 вместо 3.


Тип отладки

  • Отладчик командной строки
  • графический отладчик

Параметры командной строки отладчик: RemDebug, clidebugger, ctrace, xdbLua, LuaInterface - Debugger, Rldb, ModDebug.

Графический интерфейс отладчика: SciTE, Decoda, ZeroBrane Studio, akdebugger, luaedit.