无需退出即可获取跟踪信息

时间:2018-08-17 11:22:44

标签: 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 variable/file
     -- continue with program 
  end 
 end

我目前不知道在lua中是否可以告诉函数error() 创建后跟踪后不要停止。有关如何执行此操作的任何想法?

1 个答案:

答案 0 :(得分:3)

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

在这种情况下,您必须使用2级,因为0是debug.traceback函数,1是调用它的函数(即您的函数),2是调用那个的函数。 message可能是您的错误代码。然后,您只需在脚本中本地覆盖error函数即可。调用error只会记录错误,而不会退出程序。

编辑:如果需要,您还可以全局覆盖error,但是如果在其他地方发生严重错误(您未编写自己的代码),则可能会导致意外结果),程序仍然继续。

使用这样的构造会更好:

if os.getenv 'DEBUG' then
  my_error = function()
    -- what I explained above
  end
else
  my_error = error
end

,只需在通常使用my_error的所有地方使用error