Debugging Lua堆栈回溯中缺少函数名
我正在尝试改进运行Lua脚本的程序中的错误处理。 简化版:Debugging Lua堆栈回溯中缺少函数名,debugging,lua,traceback,Debugging,Lua,Traceback,我正在尝试改进运行Lua脚本的程序中的错误处理。 简化版: function _errH(msg) print(msg .. "\n" .. debug.traceback(nil, 1)) end function _main() -- cause some random error print(a-2) end function main() xpcall(_main, errH) end main() 给我以下调用堆栈(请忽略错误的行号): 堆栈回
function _errH(msg)
print(msg .. "\n" .. debug.traceback(nil, 1))
end
function _main()
-- cause some random error
print(a-2)
end
function main()
xpcall(_main, errH)
end
main()
给我以下调用堆栈(请忽略错误的行号):
堆栈回溯:
[字符串“”]:7428:在函数“\uu sub”中
[字符串“”]:7651:在函数中
[C] :在函数“xpcall”中
[字符串“”]:7658:在函数“main”中
[字符串“”]:7928:在主块中
现在我想知道为什么到处都是[string”“]
有没有办法影响这些缺失的文本?除了定义函数外,我还必须命名函数吗?
例如,为什么我在函数“\uuu sub”中看到
,
而不是在函数“\u main”中看到,这[string”“]
来自于将块加载到vm的方式。您没有提供filename作为lua_dofile/lua_loadfile/lua_dostring/lua_loadstring的参数,或者只是在那里提供了空字符串
请注意,string是lua文件(lua chunk)的名称,而不是函数的名称。通常,您可以在需要时指定chunk名称。辅助功能使用lua\u load
,大多数会根据加载的内容类型设置区块名称:
lua\u load
接受块名称
luaL_loadfile
将使用文件名
luaL\u-dofile
使用luaL\u-loadfile
luaL\u loadstring
将使用字符串内容
luaL\u-dostring
使用luaL\u-loadstring
luaL\u loadbuffer
接受块名
如果您查看以下内容的源代码:
注意,它实际上只是一个方便的函数,用字符串作为块名调用luaL\u loadbuffer
。因此,需要从以下字符串加载代码:
luaL_loadbuffer(L, s, strlen(s), "=my_chunk");
其中,“=my_chunk”
是将出现在中的块的名称
名称前的等号将更改回溯:
my_chunk:1: in main chunk
其中省略等号将显示:
[string "my_chunk"]:1: in main chunk
my_chunk:1: in main chunk
[string "my_chunk"]:1: in main chunk