Lua熱更新時正確設置文件名
(金慶的專欄 2016.12)
Lua熱更新模塊見:
https://github.com/jinq0123/hotfix
其中使用 load(chunk) 來加載更新后的內容,發(fā)現(xiàn) traceback 打印缺少文件名,
這對于調試糾錯有不小的影響。
文件名信息被文件內容字符串給代替了。
改成: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 ?
>
查看源碼,發(fā)現(xiàn)需要用"@"前綴來表示這是個文件名,于是改成:
load(chunk, '@'..file_path)
終于正常了。
(金慶的專欄 2016.12)
Lua熱更新模塊見:
https://github.com/jinq0123/hotfix
其中使用 load(chunk) 來加載更新后的內容,發(fā)現(xiàn) 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 ?
>
查看源碼,發(fā)現(xiàn)需要用"@"前綴來表示這是個文件名,于是改成:
load(chunk, '@'..file_path)
終于正常了。