Debugging Lua Sripts的跟踪执行
我知道您可以使用lua的调试库获取一些跟踪信息/调试。但信息是零碎的。因此,我想知道是否有一种方法可以跟踪Lua脚本的执行。一个循序渐进的过程。它将是必需的,并将在每个执行步骤自动进行,以生成如下报告:Debugging Lua Sripts的跟踪执行,debugging,lua,trace,Debugging,Lua,Trace,我知道您可以使用lua的调试库获取一些跟踪信息/调试。但信息是零碎的。因此,我想知道是否有一种方法可以跟踪Lua脚本的执行。一个循序渐进的过程。它将是必需的,并将在每个执行步骤自动进行,以生成如下报告: Called: function xyz from : Table abc It has n parameters Param 1: apples Param 2: oranges . . It has m returns return 1: red return 2: yellow . .
Called: function xyz from : Table abc
It has n parameters
Param 1: apples
Param 2: oranges
.
.
It has m returns
return 1: red
return 2: yellow
.
.
Called: function xyz2 from : Table abc2
It has n parameters
Param 1: pears
Param 2: bananas
.
.
It has m reruns
return 1: heavy
return 2: light
.
.
and so on....
下面是一些过去在Lua tarball中分发的代码。这是从2005年开始的,仍然可以正常工作
-- trace calls
-- example: lua -ltrace-calls bisect.lua
local level=0
local function hook(event)
local t=debug.getinfo(3)
io.write(level," >>> ",string.rep(" ",level))
if t~=nil and t.currentline>=0 then io.write(t.short_src,":",t.currentline," ") end
t=debug.getinfo(2)
if event=="call" then
level=level+1
else
level=level-1 if level<0 then level=0 end
end
if t.what=="main" then
if event=="call" then
io.write("begin ",t.short_src)
else
io.write("end ",t.short_src)
end
elseif t.what=="Lua" then
io.write(event," ",t.name or "(Lua)"," <",t.linedefined,":",t.short_src,">")
else
io.write(event," ",t.name or "(C)"," [",t.what,"] ")
end
io.write("\n")
end
debug.sethook(hook,"cr")
level=0
——跟踪调用
--示例:lua-ltrace调用bisect.lua
本地级别=0
本地函数挂钩(事件)
本地t=debug.getinfo(3)
io.write(级别“>>>”,string.rep(“,级别))
如果t~=nil且t.currentline>=0,则io.write(t.short_src,“:”,t.currentline,“)结束
t=debug.getinfo(2)
如果事件==“调用”,则
级别=级别+1
其他的
level=level-1如果level这很好,谢谢。你知道如何捕获函数参数、返回值以及我们现在在哪个表中吗?为什么如果我添加任何东西,即使是一个简单的print语句,整个过程都会崩溃。我将print(t.name)放在t=debug.getinfo(2)行之后,输出就崩溃了。我用的是零膜。卢亚5.1。我试着用打印替换io.write,结果把一切都搞砸了。我对io没有任何经验。write@DaveKay,因为print
添加了一个换行符,而io.write
没有。@Ihf,那么如何调试lua呢?嵌入在C/C++引擎中。用户无法访问引擎,并且由于各种原因无法进行远程调试。当然,我的意思是“除了到处放打印语句(因为我现在就是这么做的”)。一定有一些跟踪脚本可以跟踪lua脚本的执行并生成报告