跳转至

errDump

一、errDump 功能概述

LuatOS 错误日志上报功能模块名叫:errDump,errDump 对“量产投放市场的设备,远程调试初步定位问题”至关重要, 强烈建议客户一定要使用此功能:

errDump 就是将模块运行过程中产生的错误信息或者应用日志通过 TCP/UDP/HTTP 上报到互联网上的指定服务器,技术人员可以在服务器上查阅日志,协助远程了解设备运行情况,或者故障诊断。

迫于服务器压力,只有手动打开 debug 开关,才有日志上报(当使用合宙调试服务器时,开机前先检查一下 log 开关,每 2 小时查询一次 log 开关,如果开关未开启,则不允许上传调试日志)。

二、演示功能概述

本示例将演示上报以下错误内容:

1. 系统主任务运行时的错误日志

此类错误会导致软件重启,错误日志保存在/luaerrinfo.txt 文件中。

2. 调用 sys.taskInit 创建的协程运行过程中的错误日志

此类错误会终止当前协程的运行,但是不会导致软件重启,错误日志保存在/lib_err.txt 中。

3. 调用 errDump.appendErr 或者 sys.restart 接口保存的错误日志

此类错误日志保存在/lib_err.txt 中。

4. 调用 errDump.setNetworkLog 接口打开网络异常日志功能后,会自动保存最近几种网络异常日志

错误日志保存在/lib_network_err.txt 中。

5. 底层固件的死机信息

特别提醒:

其中 2 和 3 保存的错误日志,最多支持 5K 字节。

每次上报错误日志给调试服务器之后,会清空已保存的日志。

三、准备硬件环境

3.1 Air724UG-NFM 开发板

使用 Air724UG-NFM 开发板,如下图所示:

淘宝购买链接:Air724UG-NFM 开发板淘宝购买链接

3.2 SIM 卡

请准备一张可正常上网的 SIM 卡,该卡可以是物联网卡或您的个人手机卡。

特别提醒:

  • 请确保 SIM 卡未欠费且网络功能正常,以便顺利进行后续操作。
  • 专网卡需要找卡商确认 apn 配置信息并进行配置,否则可能无法注网。
  • 专网卡需要自备服务器或找卡商将服务器拉入白名单。

3.3 PC 电脑

准备一台电脑;

电脑操作系统为:WIN10 以及以上版本的 WINDOWS 系统。

注意:电脑有 USB 口,并且可以正常上网!!!

3.4 数据通信线

请准备一根用于连接 Air724UG-NFM 开发板和 PC 电脑的数据线,该数据线将实现业务逻辑的控制与交互。您有两种选择:

  • USB 数据线(其一端为 micro-B 接口(俗称老安卓口),用于连接 Air724UG-NFM 开发板)。通常,这种数据线的外观如下示意图所示:

3.5 组装硬件环境

组装准备:

组装过程:

1. 请按照 SIM 卡槽上的指示方向正确插入 SIM 卡,务必确保插入方向正确,避免插反导致损坏!

2. 安装天线,保证其网络连接和传输质量。

组装完成:

四、准备软件环境

4.1 安装设备驱动

跳转以下连接按照连接教程,并完成设备驱动的安装:https://docs.openluat.com/usb_drv/

4.2 Luatools 工具

使用说明参考:Luatools 下载和详细使用

4.3 源码及固件

1. 添加底层固件,本次 demo 演示使用 core 版本为:LuatOS-Air_V4028_RDA8910

2. 添加脚本运行 lib,本次 demo 演示使用的为 Luat_Lua_Air724Ug 仓库最新的 lib 版本。

3. 添加运行脚本,在解压缩 errdump.7z 压缩文件,找到 lua_run_script 文件夹下的 errdump 文件夹进行添加,也可选择 Luat_Lua_Air724Ug 仓库中最新的 errdump demo 文件。

4.4 合宙 TCP/UDP web 测试工具

为了方便测试,合宙提供了免费的不可商用的 TCP/UDP web 测试工具:合宙 TCP/UDP web 工具 (luatos.com)

详细使用说明参考:合宙 TCP/UDP web 测试工具使用说明

五、AIR724 硬件资料

六、errdump 主要 API 介绍

6.1 追加错误信息

--- 追加错误信息到LIB_ERR_FILE文件中(文件最多允许存储5K字节的数据)
-- @string s:用户自定义的错误信息,errDump功能模块会对此错误信息做如下处理:
-- 1、重启后会通过Luat下载调试工具输出,在trace中搜索errDump.libErr,可以搜索到错误信息
-- 2、如果用户调用errDump.request接口设置了错误信息要上报的调试服务器地址和端口,则每次重启会自动上报错误信息到调试服务器
-- 3、如果用户调用errDump.request接口设置了定时上报,则定时上报时会上报错误信息到调试服务器
-- 其中第2和第3种情况,上报成功后,会自动清除错误信息
-- @return bool result,true表示成功,false或者nil表示失败
-- @usage errDump.appendErr("net working timeout!")
errDump.appendErr(str)

6.2 配置网络错误日志开关

--- 配置网络错误日志开关
-- @bool[opt=nil] flag,是否打开网络错误日志开关,true为打开,false或者nil为关闭
-- @usage
-- errDump.setNetworkLog(true)
errDump.setNetworkLog(boolean)

6.3 参数配置

--- 配置调试服务器地址,启动错误信息上报给调试服务器的功能,上报成功后,会清除错误信息
-- @string addr,调试服务器地址信息,支持http,udp,tcp
-- 1、如果调试服务器使用http协议,终端将采用POST命令,把错误信息上报到addr指定的URL中,addr的格式如下
--   (除protocol和hostname外,其余字段可选;目前的实现不支持hash)
--   |------------------------------------------------------------------------------|
--   | protocol |||   auth    |      host       |           path            | hash  |
--   |----------|||-----------|-----------------|---------------------------|-------|
--   |          |||           | hostname | port | pathname |     search     |       |
--   |          |||           |----------|------|----------|----------------|       |
--   "   http   :// user:pass @ host.com : 8080   /p/a/t/h ?  query=string  # hash  "
--   |          |||           |          |      |          |                |       |
--   |------------------------------------------------------------------------------|
-- 2、如果调试服务器使用udp协议,终端将错误信息,直接上报给调试服务器,调试服务器收到信息后,要回复大写的OK;addr格式如下:
--   |----------|||----------|------|
--   | protocol ||| hostname | port |
--   |          |||----------|------|
--   "   udp    :// host.com : 8081 |
--   |          |||          |      |
--   |------------------------------|
-- 3、如果调试服务器使用tcp协议,终端将错误信息,直接上报给调试服务器;addr格式如下:
--   |----------|||----------|------|
--   | protocol ||| hostname | port |
--   |          |||----------|------|
--   "   tcp    :// host.com : 8082 |
--   |          |||          |      |
--   |------------------------------|
-- @number[opt=600000] period,单位毫秒,定时检查错误信息并上报的间隔
-- @return bool result,成功返回true,失败返回nil
-- @usage
-- errDump.request("http://www.user_server.com/errdump")
-- errDump.request("udp://www.user_server.com:8081")
-- errDump.request("tcp://www.user_server.com:8082")
-- errDump.request("tcp://www.user_server.com:8082",6*3600*1000)
errDump.request(str,opt)

以上接口函数不做详细介绍,可通过此链接查看具体介绍: API 链接

七、 errdump 实战演练

7.1 配置云平台

7.1.1 云平台配置

合宙云平台:https://iot.openluat.com

7.1.2 打开 IoT 平台

7.1.3 查询设备 imei

imei 查询方式,air724ug 目前有三种方法:

1. 扫描模块二维码。

2. 查看模块丝印获取。

3. 发送 at 指令查询。(注:展锐 8910 平台的模块都可以支持部分 at 指令使用的)

模块开机上电后,在 lua lib2.4.3 版本中该功能在上电后会自动查询,直接搜索对应的打印即可,at 需要发送以下命令才可以查询。

7.1.4 创建项目

注:创建项目后,这里需要找一下合宙的工作人员设置一下设备项目归属,才可以使用 iot 云平台。

7.1.5 打开设备 dbug 状态

7.2 修改 demo 参数

7.2.1 修改上报频率

解压缩 demo 文件后,找到 main.lua 文件对其进行修改,这里修改为 30s 上报一次的频率,实际在项目应用场景中,根据自己的频率设置。

7.2.2 选择脚本运行示例

解压缩 demo 文件后,找到 test_errdump.lua 文件对其进行修改,可以设置多种示例,建议只开启一个示例验证一次的方式,这样在云平台查看时效果可以更加明显,本次演示只设置示例 1 的加载控制参数为 true。

7.3 luatools 下载

添加底层 core、lib 脚本、脚本进行下载,具体添加操作流程请参照章节 4.2 Luatools 工具 篇进行详细查看。

7.4 查看效果

7.4.1 查看上位机效果

打开 luatools 上位机 log 输出界面,在运行示例 1 后,会出现以下 log 信息,可以根据 log 信息去修改对应的脚本。

7.4.2 查看云平台效果

返回浏览器打开合宙云平台,选择 iot 功能下的调式日志输入 imei 进行查看。

八、总结

本文章对 errdump demo 的具体使用进行了详细讲解,扩展了读者对 luat 在运行中的错误处理。

扩展

常见问题

给读者的话

本篇文章由DreamChen开发;

本篇文章描述的内容,如果有错误、细节缺失、细节不清晰或者其他任何问题,总之就是无法解决您遇到的问题;

请登录合宙技术交流论坛,点击文档找错赢奖金-Air724UG-LuatOS-软件指南-LuatOS基础-errDump

用截图标注+文字描述的方式跟帖回复,记录清楚您发现的问题;

我们会迅速核实并且修改文档;

同时也会为您累计找错积分,您还可能赢取月度找错奖金!