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() 在创建回溯后不要停止。关于如何做到这一点的任何想法?
解决方案
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
.
推荐阅读
- procmail - procmail - 使用 {} 不会传送到 mbox
- flutter - Flutter/provider——用构造函数初始化一个状态
- powershell - powershell string urldecode 执行时间
- python - 从 Python 数据框中的整数中检索工作日名称
- c# - Toolstripmenuitem 未运行方法 C#
- javascript - 未捕获的类型错误:ctx.clearReact 不是动画中的函数
- pip - 如何修复纸浆值错误:太多值无法解包?
- mysql - 在 MySQL 中更新包含 KEYWORD 语句的字符串的 LENGTH 部分
- node.js - 端口 8070 上的 NODEJS,SOCKET 连接渲染但不直接打开
- c++ - 将标量的多维向量(张量)写入 C++ 文件