当前位置: 首页 > news >正文

鸿蒙开发:实现全局异常捕获和异常查看

 

前言

开发中的异常信息,我们很容易排查,直接可以在控制台中就可以查看,但是,提交给测试同学或者上线后的异常信息,我们如何获取呢?这里我们很容易想起,三方sdk,比如常见的腾讯Bugly,通过集成它,便可以收集应用的异常信息,直接在他们的后台,我们就可以排查到异常,便于我们进行针对性的解决;使用三方,很是便捷,我们也无须考虑服务器的问题,但是,需要我们付出一定的资金,即便一直免费的Bugly目前还未收费,但从官网去看,已经朝着收费的方向前进了。

收费是一方面,如何灵活的拿到错误信息后,执行我们想要的逻辑,也是自研的一个诉求,比如全局监听到异常后,重启应用,或者上传到自己的服务器,或者可以在应用内查看等等,实现一个全局异常捕获,确实有很多的有用之处。

鸿蒙中,如何实现呢?

实现起来很是简单,直接使用errorManager对象,注册监听即可,ErrorManager可以提供对错误观察器的注册和注销的能力,建议在主EntryAbility或者AbilityStage中。

异常监听功能介绍:

接口名称

说明

onUnhandledException(errMsg: string): void

系统回调接口,应用注册后,当应用产生未捕获的异常时的回调。

onException?(errObject: Error): void

系统回调接口,应用注册后,当应用产生异常上报JS层时的回调。

简单举例如下:

errorManager.on('error', {onUnhandledException: (errMsg) => {console.log('产生未捕获异常时的回调,onUnhandledException:', errMsg);},onException: (errorObj) => {console.log('产生异常上报JS层时的回调,onException');}
})

当有异常信息发生时,就会走以上的监听,需要注意,注册后可以捕获到应用产生的js crash,应用崩溃时进程不会退出。

除了注册之外,系统还提供了注销错误观测器,可以在onDestroy声明周期中进行。registerId就是注册时的id,可以直接赋值errorManager.on()。

errorManager.off('error', registerId, (result) => { }); 

以上的部分,我们只是实现了异常的监听,我们可以在上述中的方法中,进行针对的拓展,比如,异常信息存储到本地,或者上传到服务器,或者定制开发相关的异常UI查看等等,目前这些功能,我做了一层封装,希望可以帮助需要的朋友。

本文主要内容如下:

1、封装之后的catch库效果

2、catch库快速引入

3、catch库主要实现

一、封装之后的catch库效果

目前除了提供了全局异常捕获方法之外,还提供了异常查看UI,方便测试人员或者其他人员遇到异常之后,可以快速的分享给研发人员。

二、catch库快速引入

引入

方式一:在Terminal窗口中,执行如下命令安装三方包,DevEco Studio会自动在工程的oh-package.json5中自动添加三方包依赖。

建议:在使用的模块路径下进行执行命令。

ohpm install @abner/catch

方式二:在工程的oh-package.json5中设置三方包依赖,配置示例如下:

"dependencies": { "@abner/catch": "^1.0.0"}

初始化

建议在AbilityStage里或者主入口的UIAbility进行初始化。

onHandledException({context: this.context,//上下文onExceptionBack: (exception) => {//自己收集异常信息上报,比如上报到服务器或者三方}
})

属性介绍

属性

类型

概述

context

Context

上下文, 用于数据库和文化存储读取

isExceptionSave

boolean

异常信息是否保存到本地,默认保存

isFileSave

boolean

是否以文件形式保存,默认是数据库,true:文件,fasle:数据库

faultType

FaultLogger.FaultType

异常类型,NO_SPECIFIC 不区分故障类型(默认既是),CPP_CRASH C++程序故障类型,JS_CRASH JS程序故障类型,APP_FREEZE 应用程序卡死故障类型

isExceptionIntercept

boolean

异常信息是否拦截,默认true拦截,false不拦截,不拦截,不会走回调,也不会保存异常信息

onExceptionBack

回调函数

回调函数,返回异常信息,可以在这里进行上报

关闭全局异常

onExceptionDestroy()

查看异常信息

如果你想本地查看全局异常信息,可以在使用的地方进行调用,就会弹出异常列表页面。

点击条目:查看异常详情,左滑条目:可以删除此条异常信息,右上角点击清空:可以删除所有的异常信息

openExceptionDialog()

异常上报

如果你想自己拿到异常信息,进行上报到自己服务器或者三方,或者自行处理,可以在初始化中实现onExceptionBack回调。

三、catch库主要实现

其实catch库仅仅针对系统的全局异常做了一层封装,实现了本地异常信息的存储,实现文件形式存储和本地数据库形式存储,其它的暂无拓展。

文件存储,大家可以关注文件管理模块fs,数据库可以关注关系型数据库relationalStore。

相关文章:

鸿蒙开发:实现全局异常捕获和异常查看

前言 开发中的异常信息,我们很容易排查,直接可以在控制台中就可以查看,但是,提交给测试同学或者上线后的异常信息,我们如何获取呢?这里我们很容易想起,三方sdk,比如常见的腾讯Bugly…...

Git和GitHub Desktop(Git客户端工具)下载安装教程

不说废话,直接开始。下载网址:https://git-scm.com/ 一.GIT下载 1.点击downloads 2.自己选择自己需要配置的版本 我是windows,所以选择的windows版本的安装 3.根据自己电脑的系统下载软件 我的是64位,选择64位安装 ps :下载很慢…...

Linux经常使用命令汇总和总结

Linux经常使用命令汇总和总结 文章目录 Linux经常使用命令汇总和总结一、基本命令二、目录操作命令三、文件操作命令四、压缩文件操作五、查找命令六、su、sudo七、系统服务八、网络管理九、定时任务指令crontab 配置十、其他命令 一、基本命令 1.1 关机和重启 关机 shutdown …...

three.js 灯光

环境光探针(AmbientLightProbe) 光照探针是一种在3D场景中添加光源的另一种方法。 AmbientLightProbe 是场景中单个环境光的光照估算数据。 有关光照探针的更多信息,请转到 LightProbe 。 构造函数 AmbientLightProbe( color : Color, int…...

ELK日志收集

目前,各个微服务系统的日志都保存在各自指定的目录中,如果这些微服务部署在不同的服务器上,那么日志文件也是分散在各自的服务器上。分散的日志不利于我们快速通过日志定位问题,我们可以借助ELK来收集各个微服务系统的日志并集中展…...

常见docker命令

1、查询已安装docker中某个image依赖包 docker run -it --rm --name my-python-container 【python37:v001】 /bin/bash 【】改成自己环境名字 docker run -it --name lane python37_test:v006 /bin/bash lane是容器名字,python37_test:v006 是镜像名 开启容器 do…...

测试新人刚入行,该如何规划以后的发展路径?

作为一个刚入行的测试新人,应该如何规划自己的职业发展路径?如何规划自己的技术路线?软件测试的段位都有哪些?他们之间的薪资差异如何? 听说这些问题,是目前想要入行软件测试的同学们最关心的。那么我们今…...

Boosting Object Detection with Zero-Shot Day-Night Domain Adaptation

摘要:低亮度场景检测是一个小众且重要的方向,首先在于数据集和过往的研究都集中在光照充足的环境下,其次如果使用传统的训练方法的话由于训练难度大,模型效果也不会很好,有幸的是,现在关于低亮度的研究已经…...

Chromium html<lable>c++接口定义

HTML <label> 元素&#xff08;标签&#xff09;表示用户界面中某个元素的说明。 1、<label> 在html_tag_names.json5中接口定义&#xff1a; &#xff08;third_party\blink\renderer\core\html\html_tag_names.json5&#xff09; {name: "label",inte…...

QT中中文显示乱码问题

在VS2013中用QT开发GUI应用程序&#xff0c;Qt中显示中文乱码 一&#xff1a; //解决QT中中文显示乱码问题 #pragma execution_character_set("utf-8") 二&#xff1a;在main函数中添加以下代码&#xff1a; #include <QTextCodec>void main() {QTextCod…...

[面试常见]Javascript基础知识

#1024程序员节|征文# Object.assign 和对象扩展运算符有什么区别?是深拷贝还是浅拷贝? 都进行浅拷贝&#xff0c;只赋值对象的第一层属性&#xff0c;而不会递归复制整个对象结构 **const mergedObj Object.assign({},obj1,obj2) JavaScript 中 Map 和 Object 的区别是什么?…...

使用注解@ExcelIgnoreUnannotated实现了在导出 Excel 时忽略没有被标注的字段

ExcelIgnoreUnannotated 注解用于在使用 Apache POI 或其他 Excel 处理库时&#xff0c;指示在导出 Excel 时忽略没有被标注的字段。这意味着只有被特定注解&#xff08;如 ExcelProperty&#xff09;标注的字段会被处理和导出。 作用 简化导出过程&#xff1a;只导出需要的字…...

线程的同步

目录 引入 认识条件变量 快速认识接口​编辑 认识条件变量​编辑 测试代码​编辑 生产消费模型 为何要使用生产者消费者模型 理解 编写生产消费模型 BlockingQueue 单生产单消费 多生产多消费 引入 同步&#xff1a;在保证数据安全的前提下&#xff0c;让线程…...

【启明智显分享】ZX7981PG/ZX7981PM融入官方OpenWrt,启明智显SDK/官方OpenWrt任由选择!

好消息&#xff01;好消息&#xff01;启明智显ZX7981PG和ZX7981PM正式融入官方 OpenWrt 的大家庭啦&#xff01;现在开发者不仅可以基于启明智显的SDK进行二次开发&#xff0c;还可以直接应用官方OpenWrt以及我们的开源资料进行开发&#xff01; 借助OpenWrt的强大生态&…...

如何用java发送包含表格形式的邮件

问题&#xff1a; 如何用java发送包含表格形式的邮件&#xff1f; 方法&#xff1a; 发用freemaker工具来替换html的表格变量&#xff0c;从而动态生成了html。然后再发送这个html格式&#xff08;不能用纯文本&#xff09;文本即可。 优化流程&#xff1a; 1、准备模板&#x…...

讲个故事:关于一次接口性能优化的心里路程

这是一个程序猿写的第一个故事&#xff0c;请各位懂行的客官静下心来&#xff0c;慢慢品读。就知道我为什么要单独写一个文章来记录这次过程了&#xff0c;因为实在是太坎坷了...... 背景介绍 近期项目投产时遇到一个问题&#xff0c;投产后在验证时发现大部分用户系统登…...

Centos7升级到openssh9.9

openssh9.9 是2024.9.20出的最新版ssh。因为客户扫描出一大堆centos7的漏洞&#xff0c;全是这个openssh的&#xff0c;好多补丁&#xff0c;所以索性升级到最新版。 需要自己制作rpm包&#xff0c;这个我是不懂&#xff0c;照这个来&#xff1a; Linux服务器升级openssh9.9最…...

使用 STM32F407 串口实现 485 通信

准备工作 了解485通信基本概念与原理&#xff1a;RS485通信详解_485通讯de接什么口-CSDN博客 安装编译软件&#xff1a;keil uVision 5.6 软件资料&#xff1a;STM32CubeF4 固件包&#xff0c;正点原子RS485通信例程 ​​​​​​​参考视频&#xff1a;第26讲 基础篇-新建H…...

基于NERF技术重建学习笔记

NeRF&#xff08;Neural Radiance Fields&#xff09;是一种用于3D场景重建的神经网络模型&#xff0c;能够从2D图像生成逼真的3D渲染效果。它将场景表征为一个连续的5D函数&#xff0c;利用了体积渲染和神经网络的结合&#xff0c;通过学习光线穿过空间时的颜色和密度来重建场…...

webView 支持全屏播放

webView 支持全屏播放 直接上代码 public class CustomFullScreenWebViewClient extends WebChromeClient {WebView webView;Context context;/*** 视频全屏参数*/protected static final FrameLayout.LayoutParams COVER_SCREEN_PARAMS new FrameLayout.LayoutParams(ViewG…...

FPGA实战:8点FFT运算的Verilog实现与误差优化技巧

FPGA实战&#xff1a;8点FFT运算的Verilog实现与误差优化技巧 在数字信号处理领域&#xff0c;快速傅里叶变换&#xff08;FFT&#xff09;算法是频谱分析的核心工具。对于FPGA开发者而言&#xff0c;掌握FFT的硬件实现不仅能提升系统性能&#xff0c;更能深入理解算法与硬件的…...

次元画室+AI绘图工作流:从文字描述到精准提示词的无缝衔接

次元画室AI绘图工作流&#xff1a;从文字描述到精准提示词的无缝衔接 1. 为什么需要AI绘图工作流&#xff1f; 在动漫角色设计领域&#xff0c;创作者们长期面临一个核心矛盾&#xff1a;脑海中有丰富的创意&#xff0c;却难以准确转化为视觉形象。传统工作流程中&#xff0c…...

Citra 3DS模拟器:如何在PC端重温任天堂经典游戏的终极指南

Citra 3DS模拟器&#xff1a;如何在PC端重温任天堂经典游戏的终极指南 【免费下载链接】citra A Nintendo 3DS Emulator 项目地址: https://gitcode.com/gh_mirrors/cit/citra 想要在Windows、Linux或macOS系统上体验《精灵宝可梦》、《塞尔达传说》等经典3DS独占游戏吗…...

Crawl4AI浏览器配置文件创建与键盘交互处理终极指南:打造个性化爬虫身份

Crawl4AI浏览器配置文件创建与键盘交互处理终极指南&#xff1a;打造个性化爬虫身份 【免费下载链接】crawl4ai &#x1f525;&#x1f577;️ Crawl4AI: Open-source LLM Friendly Web Crawler & Scrapper 项目地址: https://gitcode.com/GitHub_Trending/craw/crawl4ai…...

Wan2.2-I2V-A14B开源大模型:支持ONNX导出与边缘设备轻量化部署探索

Wan2.2-I2V-A14B开源大模型&#xff1a;支持ONNX导出与边缘设备轻量化部署探索 1. 开箱即用的私有部署方案 Wan2.2-I2V-A14B是一款强大的文生视频开源大模型&#xff0c;专为RTX 4090D 24GB显存环境深度优化。这个私有部署镜像已经内置了完整的运行环境和所有必要组件&#x…...

MoveBase导航实战:Livox MID360与FAST-LIO+AMCL混合定位的调优与避障策略

1. Livox MID360雷达与FAST-LIO的实战配置 第一次用Livox MID360雷达时&#xff0c;我被它的非重复扫描模式惊艳到了——这种固态激光雷达能实现360无死角覆盖&#xff0c;特别适合狭小空间导航。但要让它在MoveBase系统中稳定工作&#xff0c;需要先解决几个关键配置问题。 雷…...

Git提交时Personal Access Token权限不足:如何正确配置workflow scope

1. 为什么Git提交会提示Personal Access Token权限不足&#xff1f; 最近在团队协作中遇到一个典型问题&#xff1a;当开发者尝试推送包含.github/workflows目录的代码到GitHub仓库时&#xff0c;系统突然报错refusing to allow a Personal Access Token to create or update w…...

终极简单教程:如何使用bilibili-parse免费获取B站视频资源

终极简单教程&#xff1a;如何使用bilibili-parse免费获取B站视频资源 【免费下载链接】bilibili-parse bilibili Video API 项目地址: https://gitcode.com/gh_mirrors/bi/bilibili-parse 想要快速获取B站视频资源却不知道从何入手&#xff1f;bilibili-parse作为一款简…...

微信公众号自动回复避坑指南:如何高效处理用户关键词匹配(PHP版)

微信公众号自动回复进阶实战&#xff1a;PHP高效关键词匹配与消息处理 在运营微信公众号时&#xff0c;自动回复功能是与用户互动的第一道门槛。一个响应迅速、匹配精准的自动回复系统不仅能提升用户体验&#xff0c;还能有效减轻人工客服压力。本文将深入探讨如何用PHP构建一个…...

OpenClaw镜像体验报告:GLM-4.7-Flash云端部署3大优势

OpenClaw镜像体验报告&#xff1a;GLM-4.7-Flash云端部署3大优势 1. 为什么选择云端体验OpenClaw 上周我在本地笔记本上折腾OpenClaw时&#xff0c;经历了所有开发者都熟悉的"依赖地狱"——Node.js版本冲突、Python环境污染、系统权限问题接踵而至。当终于看到open…...