gpt4 book ai didi

debugging - Lua:获取函数源

转载 作者:行者123 更新时间:2023-12-01 10:51:00 24 4
gpt4 key购买 nike

我正在开发一个用于序列化/反序列化的系统,并且我正在尝试让一些非常奇特的东西与函数一起使用。我的目标是以人类可读和可逆的方式序列化包含函数的对象(序列化的文件需要在 loadfile() 步骤之后进行处理)。我需要一种方法来获取函数的实际源代码,看起来我不能总是使用 debug.getinfo() 来做到这一点。

我知道 debug.getinfo() 将给出定义它的文件和行(或函数的源,取决于它的来源)。有没有办法从该文件中读取函数文本?我愿意使用某种解析器实用程序来这样做。也许有用于解析 Lua 代码的 Lua 包?

也许有一种方法可以让 loadfile() 或 require() 自动将函数源保留在某处?

是的,我知道您可以从 debug.getinfo 中获取各种信息,但它无法处理通过 stdin 加载的函数...

uberblah@glade-m:~$ lua
Lua 5.1.5 Copyright (C) 1994-2012 Lua.org, PUC-Rio
> a = function() print("hello, world!") end
> require("serpent")
> s = require("serpent")
> =s.block(debug.getinfo(a))
{
currentline = -1,
func = loadstring("LuaQ\000\000\000\000\000\000\000\000\000=stdin\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000A@\000\000@\000\000�\000\000\000\000\000\000\000\000\000\000\000print\000\000\000\000\000\000\000\000hello, world!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000",'@serialized') --[[function: 0x2068a30]],
lastlinedefined = 1,
linedefined = 1,
namewhat = "",
nups = 0,
short_src = "stdin",
source = "=stdin",
what = "Lua"
} --[[table: 0x206cf80]]
> f = io.open("stdin", "r")
> =f
nil

来自标准源的解决方案...1)捕获所有STDIN,将其写入文件2)从该文件加载信息,而不是从标准输入3) 调试将跟踪该文件中的函数行号

最佳答案

使用debug.getinfo,您可以获得sourcelinedefinedlaSTLinedefined。除非你真的很奇怪地格式化你的代码,否则你应该能够从这个信息中提取你的函数的完整代码。无需解析代码,只需获取正确的行集即可。

关于debugging - Lua:获取函数源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20386499/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com