Lua热更新时正确设置文件名
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:Jinqtemplua>d:Jinqtoolslua-5.3.2_Win64_binlua53
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)
终于正常了。
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net
Photopea 是一个非常实用的在线 PS 网站,与 PS 电脑软件相似度极高。 包括快捷键等。 地址: https://www.photopea.com/ 拉辅助线的几种方法: 按下CTRL+R,将标尺显示出来。从标尺处直接拉出辅助线。 执行“视…