在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
lua没有调试器,但是它提供了很强的调试功能(debug 库), 所以其实一些常用的调试功能都能很方便的使用,就像使用一个命令行调试器一样: 【例子程序】 -- debug.lua
【设置断点】 这个比较麻烦一点,需要修改代码加入一句:
如果你要条件断点,或者计数断点,没问题,直接写代码就是了 【开始调试】 直接运行就是:
进入断点显示:
要继续则运行cont(inue):
【打印callstack】 lua_debug> print(debug.traceback()) stack traceback: (debug command):1: in main chunk [C]: in function 'debug' debug.lua:5: in function 'bar' debug.lua:8: in function 'foo' debug.lua:12: in main chunk [C]: ? 注意因为断点是调用库函数debug.debug才进入的,stack trace中的前2帧是debug函数引入的,需要注意。 【查看全局变量】 lua_debug> print(gvar1) 100 lua_debug> for k, v in pairs(_G) do io.write(k) io.write(" ") end lua_debug> string xpcall package tostring print os unpack require getfenv setmetatable next assert tonumber io rawequal collectgarbage arg getmetatable bar module rawset foo gvar1 math debug pcall table newproxy type coroutine _G select gcinfo pairs rawget loadstring ipairs _VERSION dofile setfenv load error loadfile 【查看局部变量】 局部变量不能直接访问,需要用debug.getlocal,比如这里访问foo函数的局部变量: lua_debug> print(debug.getlocal(4,1)) var2 10 这里getlocal的第一个参数为帧数,我们根据debug.traceback返回的数据,知道foo对应第4帧。 【查看upvalue】 这里查看函数bar的upvalue,也就是foo里的那个局部变量 lua_debug> print(debug.getupvalue(debug.getinfo(3,"f").func, 1)) var2 10
这应付日常的调试应该已经足够了(除了那些print党:))。 当然,我们可以把这些复杂的调用事先写成函数放在一个文件里,比如debug,然后可以: lua debug debug.lua 这样就更方便了。
|
请发表评论