• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

调试lua代码

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

lua没有调试器,但是它提供了很强的调试功能(debug 库), 所以其实一些常用的调试功能都能很方便的使用,就像使用一个命令行调试器一样:

【例子程序】

-- debug.lua
gvar1 = 100 function foo() local var2 = 10 function bar() debug.debug() return var2 end bar() end debug.debug() foo()

 

【设置断点】

这个比较麻烦一点,需要修改代码加入一句:

debug.debug()

如果你要条件断点,或者计数断点,没问题,直接写代码就是了

【开始调试】

直接运行就是:

lua debug.lua

进入断点显示:

[baiyanh@baiyanh-VirtualBox:~/source/arena/lua/PIL/c23-debug.lib]
$ lua debug.lua
lua_debug>

要继续则运行cont(inue):

lua_debug> cont

【打印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

这样就更方便了。

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
使用nginx + lua脚本 + redis进行token鉴权发布时间:2022-07-22
下一篇:
035_lua快速入门发布时间:2022-07-22
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap