Вобщем озадачился я созданием лога в стиле пилота при использовании луа. Все относительно неплохо реализовывается, однако появилась проблемка, которую решить пока не получилось:
var = var2 + func()
При выводе в лог, естественно, хочется чтобы, как и в пилоте это выражение приняло примерно такой вид:
var(10) = var2(4) + func()(6)
Если с преобразованием переменных особых проблем нет, то как перехватить занчение функции? Тут нужно понимать, что просто вытащить return из функции может не получится, т.к. там тоже может содержаться функция либо это может быть вообще внешняя С-функция и никаких return там не найти и по стаку не пробежаться.
Для затравки (IMG:
style_emoticons/default/smile.gif)
Настройки:
Код
local dbg = {}
dbg.trace = 1 -- Отображение стека
dbg.line = 1 -- Отображение номеров строк
dbg.code = 1 -- Отображение исходного кода
dbg.source = 1 -- Отображение источника кода(адрес файла, строка и т.д.)
dbg.source_abs = 0 -- Абсолютные адреса фалов.
dbg.tab = 75 -- Выравнивание исходного кода в символах.
-- стек выравнивание код
--(213)main-> mycall()
--(213)main->(209)mycall-> file_echo()
-- стек выравнивание код
dbg.file = {} -- Настройки файла лога
dbg.file.enable = 1 -- Включить логирование в файл
dbg.file.path = "lua_log.txt" -- Путь файла лога
dbg.file.append = 0 -- Дописывать лог (не удалять старый)
dbg.file.handle = nil -- Хендл файла
dbg.buffer = {} -- Буфер с файлами скриптов.
Образец вывода в лог:
Код
(227)main-> mycall()
(227)main->(223)mycall-> mycall2()
(227)main->(223)mycall->(219)mycall2-> echo()
(227)main->(223)mycall->(219)mycall2->(214)echo-> log("123")
(227)main->(223)mycall->(219)mycall2->(215)echo-> log("321")
(227)main->(223)mycall->(219)mycall2->(216)echo-> end
(227)main->(223)mycall->(220)mycall2-> end
(227)main->(224)mycall-> end
(229)main-> file_test()
(229)main->"lua\test.lua"->(11)file_test-> file_test2()
(229)main->"lua\test.lua"->(11)file_test->(8)file_test2-> file_echo()
(229)main->"lua\test.lua"->(11)file_test->(8)file_test2->(4)file_echo-> log("my file echo")
(229)main->"lua\test.lua"->(11)file_test->(8)file_test2->(5)file_echo-> end
(229)main->"lua\test.lua"->(11)file_test->(9)file_test2-> end
(229)main->"lua\test.lua"->(12)file_test-> end
(231)main-> stop_script()
Это вывод в файл.
log() преобразует немножко лишнего, чем нужно, упрашиваю кнайта сделать доп вывод в лог без форматирования.