IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    Lua热更新时正确设置文件名

    金庆发表于 2016-12-18 08:32:00
    love 0
    Lua热更新时正确设置文件名

    (金庆的专栏 2016.12)

    Lua热更新模块见:
    https://github.com/jinq0123/hotfix

    其中使用 load(chunk) 来加载更新后的内容,发现 traceback 打印缺少文件名,
    这对于调试纠错有不小的影响。


    test.lua

    local M = {}

    function M.test()
      assert(false, "test assert 5")
    end

    return M


    如下测试:

    D:\Jinq\temp\lua>d:\Jinq\tools\lua-5.3.2_Win64_bin\lua53
    Lua 5.3.2  Copyright (C) 1994-2015 Lua.org, PUC-Rio
    > hf = require("hotfix")
    > t = require("test")
    > t.test()
    .\test.lua:4: test assert
    stack traceback:
            [C]: in function 'assert'
            .\test.lua:4: in function 'test.test'
            (...tail calls...)
            [C]: in ?
    > hf.hotfix_module("test")
    table: 000000000078a6d0
    > t.test()
    [string "local M = {}..."]:4: test assert 2
    stack traceback:
            [C]: in function 'assert'
            [string "local M = {}..."]:4: in function 'test.test'
            (...tail calls...)
            [C]: in ?
    >

           
    文件名信息被文件内容字符串给代替了。

    改成:load(chunk, file_path), 结果是这样的:

    > t.test()
    [string ".\test.lua"]:4: test assert 3
    stack traceback:
            [C]: in function 'assert'
            [string ".\test.lua"]:4: in function 'test.test'
            (...tail calls...)
            [C]: in ?
    >

    查看源码,发现需要用"@"前缀来表示这是个文件名,于是改成:

        load(chunk, '@'..file_path)
        
    终于正常了。



    金庆 2016-12-18 16:32 发表评论


沪ICP备19023445号-2号
友情链接