首页 > 解决方案 > 在不退出的情况下捕获跟踪信息

问题描述

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

-- 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() 在创建回溯后不要停止。关于如何做到这一点的任何想法?

标签: lua

解决方案


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.


推荐阅读