追踪Lua脚本的执行

我知道你可以使用lua的调试库来获取一些跟踪信息/调试信息。 但这些信息是分散的。 所以我想知道是否有一种方法可以追踪Lua脚本的执行。 一步一步的过程。 每个执行步骤都需要 _生成报告_,例如以下内容;

被调用: 函数xyz  来自: 表abc
它有n个参数
参数1: 苹果
参数2: 橙子
。
。

它有m个返回值
返回值1: 红色
返回值2: 黄色
。
。

被调用: 函数xyz2  来自: 表abc2
它有n个参数
参数1: 梨子
参数2: 香蕉
。
。
它有m个返回值
返回值1: 重的
返回值2: 轻的
。
。

以此类推....
点赞
用户107090
用户107090

以下是从 Lua 软件包中分发的一些代码。 这是来自 2005 年的代码,仍然可以正常运行。

-- 跟踪调用
-- 示例: 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
2018-11-20 18:47:27