Lua 在不退出的情况下捕获跟踪信息

Lua 在不退出的情况下捕获跟踪信息,lua,Lua,我正在尝试运行一系列测试,并在每个测试中收集一些元数据。如果在其中一个测试期间出现错误,我希望保存回溯信息,但不退出脚本。例如: -- Example program for _, v in ipairs(tests) do --check some results of function calls if v == nil then --error("function X failed") no exit --save back trace to varia

我正在尝试运行一系列测试,并在每个测试中收集一些元数据。如果在其中一个测试期间出现错误,我希望保存回溯信息,但不退出脚本。例如:

-- Example program

for _, v in ipairs(tests) do
     --check some results of function calls
  if v == nil then
     --error("function X failed") no exit
     --save back trace to variable/file
     -- continue with program 
  end 
 end
我目前不知道在lua中是否可以告诉函数error() 创建回溯跟踪后不停止。有什么想法吗?

debug.traceback([thread,][message[,level]])
()是您需要的。您可以编写一个函数,该函数为1。获取回溯2。打开一个文件3。将回溯写入文件4。关闭文件

在这种情况下,您必须使用级别2,因为0将是
debug.traceback
函数,1将是调用它的函数(即您的函数),2将是调用该函数的函数<代码>消息可能是您的错误代码。然后在脚本中本地重写
error
函数,就完成了;调用
error
只会记录错误,而不会退出程序

编辑:如果愿意,您还可以全局覆盖
错误
,但如果在其他地方出现严重错误(不是您自己编写的代码),并且程序仍在继续,则可能会导致意外结果

您最好使用这样的构造:

if os.getenv 'DEBUG' then
  my_error = function()
    -- what I explained above
  end
else
  my_error = error
end
只要在您通常使用
error
的所有地方使用
my_error