Debugging Lua Sripts的跟踪执行

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 . .

我知道您可以使用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 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脚本的执行并生成报告