当前位置:网站首页>十八、一起学习Lua 调试(Debug)
十八、一起学习Lua 调试(Debug)
2022-08-10 11:47:00 【m0_66404702】
Lua 调试(Debug)
Lua 提供了 debug 库用于提供创建我们自定义调试器的功能。Lua 本身并未有内置的调试器,但很多开发者共享了他们的 Lua 调试器代码。
Lua 中 debug 库包含以下函数:
上表列出了我们常用的调试函数,接下来我们可以看些简单的例子:
实例
function myfunction ()
print(debug.traceback("Stack trace"))
print(debug.getinfo(1))
print("Stack trace end")
return 10
end
myfunction ()
print(debug.getinfo(1))
执行以上代码输出结果为:
Stack trace
stack traceback:
test2.lua:2: in function 'myfunction'
test2.lua:8: in main chunk
[C]: ?
table: 0054C6C8
Stack trace end
在以实例中,我们使用到了 debug 库的 traceback 和 getinfo 函数, getinfo 函数用于返回函数信息的表。
另一个实例
我们经常需要调试函数的内的局部变量。我们可以使用 getupvalue 函数来设置这些局部变量。实例如下:
实例
function newCounter ()
local n = 0
local k = 0
return function ()
k = n
n = n + 1
return n
end
end
counter = newCounter ()
print(counter())
print(counter())
local i = 1
repeat
name, val = debug.getupvalue(counter, i)
if name then
print ("index", i, name, "=", val)
if(name == "n") then
debug.setupvalue (counter,2,10)
end
i = i + 1
end -- if
until not name
print(counter())
执行以上代码输出结果为:
1
2
index 1 k = 1
index 2 n = 2
11
在以上实例中,计数器在每次调用时都会自增1。实例中我们使用了 getupvalue 函数查看局部变量的当前状态。我们可以设置局部变量为新值。实例中,在设置前 n 的值为 2,使用 setupvalue 函数将其设置为 10。现在我们调用函数,执行后输出为 11 而不是 3。
调试类型
- 命令行调试
- 图形界面调试
命令行调试器有:RemDebug、clidebugger、ctrace、xdbLua、LuaInterface - Debugger、Rldb、ModDebug。
图形界调试器有:SciTE、Decoda、ZeroBrane Studio、akdebugger、luaedit。
边栏推荐
猜你喜欢
随机推荐
CodeForces - 628D (digital dp)
7、Instant-ngp
厚积薄发!安全狗再次获得科技成果转化认证!
LeetCode50天刷题计划(Day 17—— 下一个序列(14.50-16.30)
An enhanced dynamic packet buffer management.论文核心部分
这三个 Go 水平自测题,你手写不出来还是先老实上班吧,过来看看
The 6th "Blue Hat Cup" National College Student Network Security Skills Competition Semi-Final Part WriteUp
Network Fundamentals (Section 1)
你有一份斗破苍穹词库,请查收
LeetCode 109. 有序链表转换二叉搜索树
ssm框架搭建过程[通俗易懂]
Excel function formulas - LOOKUP function
LeetCode 25. K 个一组翻转链表
可视化服务编排在金融APP中的实践
Cannot find symbol log because lombok is not found
中芯CIM国产化项目暂停?上扬软件:未停摆,改为远程开发!
Database management tool: dynamic read-write separation
CLIP还能做分割任务?哥廷根大学提出一个使用文本和图像prompt,能同时作三个分割任务的模型CLIPSeg,榨干CLIP能力...
第六届”蓝帽杯“全国大学生网络安全技能大赛半决赛部分WriteUp
2016,还是到了最后