lua debug库的一些玩法

本文介绍了 Lua 中 debug 库的一些独特应用,包括如何在 Lua 5.2 及以后版本实现 `getfenv` 和 `setfenv`,以及如何创建沙盒环境以安全执行代码片段。通过示例展示了如何在沙盒中执行代码而不污染全局环境,并探讨了单步调试期间修改局部变量的方法。推荐查阅 MobDebug 源码以深入了解 Lua 的奇妙用法。
摘要由CSDN通过智能技术生成


lua一直是游戏领域广泛使用的脚步语言,但从整个IT行业来说确实特别小众,所以和python比起来网络上使用lua的“奇技淫巧”特别少,本文简单介绍一些对debug的一些奇妙用法。


本文对debug的一些用法大部分是从mobdebug(https://github.com/pkulchenko/MobDebug)总结来,推荐大家看看mobdebug的实现源码,里面把coroutine用的特别奇妙,简化了很多实现思路。(里面用源代码方式内嵌了serpent,用来序列化以及反序列化lua数据,作者能写一行就绝对不写两行,特别难看懂)


  • get/setfenv实现

过了lua5.2之后就没有这两个函数了,替代方式是_ENV,下面给出实现方式

(实在不愿意用csdn的代码片功能了)

if not setfenv then

    local function findenv(f)

        local index = 1

        repeat

            local name, value = debug.getupvalue(f, index)

            if name == "_ENV" then

                return index, value

            end

            index = index + 1

        until name == nil

        return nil

    end

    getfenv = function (f) return (selec

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值