Lua热更新时正确设置文件名
2016-12-18 16:31
106 查看
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)
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)
终于正常了。
相关文章推荐
- Lua热更新时正确设置文件名
- windows7下系统保护中出现错误“文件名、目录名或卷标语法不正确。(0x8007007B)“ 以及保护设置列表中出现“Windows7_os(c:)(找不到)”选项时的解决方法
- lib路径设置正确,lib文件名设置正确,链接时却出现莫名错误
- servlet 下载中文文件名正确设置
- Android SDK Manager下载失败后 更新列表的正确设置
- 正确设置Firefox下载文件文件名的方法
- nagios 无法打开要更新的命令文件,外部命令文件或目录权限不对,参考FAQ设置正确的权限
- TF54000: 由于服务器时钟设置可能不正确,无法更新数据(再转)
- 关于Android SDK Manager无法获取更新列表的正确设置
- TF54000: 由于服务器时钟设置可能不正确,无法更新数据解决方案(补充)
- 索引视图更新失败,因为下列 SET 选项的设置不正确: 'ARITHABORT'
- 正确设置Winserver服务器的更新方式
- 关于Android SDK Manager无法获取更新列表的正确设置
- 关于Android SDK Manager无法获取更新列表的正确设置
- 在FC6上设置yum的国内镜像更新源
- 如何正确设置BT,以达到自己带宽的最大速度!(转自六月联盟)
- Tomcat设置404错误页无法正确定向
- GUI的一些设置和标准菜单中一些选项的功能(不断更新中...)
- 卡巴6正式版-中文傻瓜安装免设置,自激活[2006-12-5更新]
- 利用WMI获取和更新网络设置(VBS脚本)