提取函数体

我该如何提取函数体作为字符串?例如,我调用了 C 函数,从堆栈中提取函数,检查其类型是否为 LUA_TFUNCTION,那么我需要做什么才能获取其函数体?

原文链接 https://stackoverflow.com/questions/6538152

点赞
stackoverflow用户596285
stackoverflow用户596285

当函数在堆栈上时,它已经被编译了。你可以尝试使用 lua_dump 然后解码字节码

2011-06-30 17:50:26
stackoverflow用户298661
stackoverflow用户298661

Debug库可以实现此功能。而Lua C API中并没有此功能,你需要调用Lua函数来实现。

2011-06-30 17:53:06
stackoverflow用户34799
stackoverflow用户34799

你可以调用 lua_getinfo,参数传入字符串 "S",然后检查 lua_Debug 结构体中的 "source" 成员。如果字符串以 '@' 开头,则是文件名,如果需要源代码,您需要重新读取该文件(因为 Lua 仅仅为了加载函数而逐步读取文件,并未将其保存为字符串)。否则,其内容将是载入函数定义块的字符串本身。

请注意,在任何情况下返回的 "source" 都将是定义该函数的整个代码块。您可以使用结构体中定义的其他字段将字符串缩小到仅适用于该函数:但请注意,这并不能保证您能够将该字符串重新加载以获得相同的行为(例如,函数定义可能引用在外部范围定义的变量)。

2011-06-30 19:49:25