отладки Lua (Debug)
Lua предоставляет библиотеку отладки для предоставления нам создать пользовательский функций преобразователя. Сам Lua не имеет встроенного губернатора, но многие разработчики делятся своим губернатором Lua код.
Lua в библиотеке отладки включает в себя следующие функции:
Нет. | Метод и цель |
---|---|
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. | sethook ([нить,] крюк, маска [, число]): Он будет функционировать как крюк установлен в. Строка маски и цифровой счетчик определяет крючок будет вызываться, когда. Маска представляет собой комбинацию из следующих символов в строку, каждый символ имеет свое значение:
|
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.