Debugging 重写和函数,但仍获得修改的信息

Debugging 重写和函数,但仍获得修改的信息,debugging,lua,overriding,Debugging,Lua,Overriding,是否有任何方法可以重写函数并仍然获得以下结果: debug.getinfo(pairs).linedefined == -1 ? 我想重写一个函数,但仍然要绕过对debug.getinfo 否则,或者我可以重写debug.getinfo?从技术上讲,您可以在查找表中存储对旧函数的引用,然后在定期调用自身之前包装getinfo以检查此表。这将有效地完成您试图做的事情 但是,我必须强调,如果您使用沙箱,或者以某种方式禁止或限制用户,禁用调试库是必要的。是的,您可以对它们进行沙箱处理,但在我看来,这

是否有任何方法可以重写函数并仍然获得以下结果:

debug.getinfo(pairs).linedefined == -1 ?
我想重写一个函数,但仍然要绕过对
debug.getinfo

否则,或者我可以重写
debug.getinfo

从技术上讲,您可以在查找表中存储对旧函数的引用,然后在定期调用自身之前包装getinfo以检查此表。这将有效地完成您试图做的事情

但是,我必须强调,如果您使用沙箱,或者以某种方式禁止或限制用户,禁用调试库是必要的。是的,您可以对它们进行沙箱处理,但在我看来,这和用loadstring对字节码进行沙箱处理一样困难(如果是的话,您也应该禁用它)


但是,我不会给你一个代码示例,因为这样做是非常不鼓励的,我希望你能找到另一个选择。

从技术上讲,你可以在查找表中存储对旧函数的引用,然后在定期调用它之前包装getinfo来检查这个表。这将有效地完成您试图做的事情

但是,我必须强调,如果您使用沙箱,或者以某种方式禁止或限制用户,禁用调试库是必要的。是的,您可以对它们进行沙箱处理,但在我看来,这和用loadstring对字节码进行沙箱处理一样困难(如果是的话,您也应该禁用它)


但是,我不会给您一个代码示例,因为这样做非常不鼓励,我希望您能找到另一种选择。

为什么要这样做?如果调试信息出错,如何调试代码?可以像其他任何函数一样覆盖debug.getinfo。你想要实现什么还不是很清楚。请提供更多的细节和一个例子。似乎你正在用Lua制作一个沙盒。您只需覆盖getinfo(以及traceback和其他您想要的内容)即可降低沙盒的可检测性。如果要在Lua中创建沙盒,则必须删除
调试
库。沙箱的目的是创建一个安全区域,但
调试
库的目的(部分)是允许做不安全的事情。他们互相矛盾。您可能可以包装某些
debug
库函数,但最好是放弃整个函数。我想禁用此函数debug.getinfo.linedefined,使其无法工作,但如果调用(对)它会给你一个我声明的特定结果,更像是一个变量,而不是一个我不知道的函数,如果这是可以理解的:/你为什么要这样做?如果调试信息出错,如何调试代码?可以像其他任何函数一样覆盖debug.getinfo。你想要实现什么还不是很清楚。请提供更多的细节和一个例子。似乎你正在用Lua制作一个沙盒。您只需覆盖getinfo(以及traceback和其他您想要的内容)即可降低沙盒的可检测性。如果要在Lua中创建沙盒,则必须删除
调试
库。沙箱的目的是创建一个安全区域,但
调试
库的目的(部分)是允许做不安全的事情。他们互相矛盾。您可能可以包装某些
debug
库函数,但最好是放弃整个函数。我想禁用此函数debug.getinfo.linedefined,使其无法工作,但如果调用(对)它会给你一个我声明的特定结果,更像是一个变量,而不是一个函数,我不知道,如果这是可以理解的:/是的,这是一个想法,但我非常喜欢一个例子,让我开始这件事,如果不是,怎么可能禁用库?(在lua中仍然不是advane)@user
debug=nil
是的,这是一个想法,但我希望有一个例子,让我开始这件事,如果不是的话,怎么可能禁用库?(在lua中仍然不高级)@user
debug=nil