如何使用DFX的ErrorManager来捕获js异常?

使用DFX的ErrorManager来注册错误观测器并捕获js异常,并且希望应用崩溃时进程不会退出。

HarmonyOS
2024-05-28 21:07:11
浏览
收藏 0
回答 1
回答 1
按赞同
/
按时间
五行缺踹

应用错误管理接口由errorManager模块提供

错误管理接口功能介绍:



接口名称




说明


on(type: "error", observer: ErrorObserver): number

注册错误监听接口,当系统监测到应用异常时会回调该监听。该接口为同步接口,返回值为注册的监听对象对应的序号。

off(type: "error", observerId: number, callback: AsyncCallback<void>): void

以callback的形式解除注册监听,传入的number为之前注册监听时返回的序号。

off(type: "error", observerId: number): Promise<void>

以Promise的形式解除注册监听,传入的number为之前注册监听时返回的序号。

当采用callback作为异步回调时,可以在callback中进行下一步处理。当采用Promise对象返回时,可以在Promise对象中类似地处理接口返回值。

异常监听(ErrorObserver)接口功能介绍:



接口名称




说明


onUnhandledException(errMsg: string): void

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

onException?(errObject: Error): void

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

错误测试:

@Entry 
@Component 
struct CrashPage { 
  @State message: string = 'Hello World' 
  build() { 
    Row() { 
      Column() { 
        Button('捕获异常') 
          .onClick(() => { 
            let tempList = ['0', '1'] 
            tempList[5].toString() 
          }) 
      } 
      .width('100%') 
    } 
    .height('100%') 
  } 
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.

错误观察器注册:

import UIAbility from '@ohos.app.ability.UIAbility'; 
import AbilityConstant from '@ohos.app.ability.AbilityConstant'; 
import errorManager from '@ohos.app.ability.errorManager'; 
import Want from '@ohos.app.ability.Want'; 
import window from '@ohos.window'; 
  
let registerId = -1; 
let callback: errorManager.ErrorObserver = { 
    onUnhandledException: (errMsg) => { 
        console.log(errMsg); 
    }, 
    onException: (errorObj) => { 
        console.log('onException, name: ', errorObj.name); 
        console.log('onException, message: ', errorObj.message); 
        if (typeof(errorObj.stack) === 'string') { 
            console.log('onException, stack: ', errorObj.stack); 
        } 
    } 
} 
let abilityWant: Want; 
  
export default class EntryAbility extends UIAbility { 
    onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) { 
        console.log("[Demo] EntryAbility onCreate"); 
        registerId = errorManager.on("error", callback); 
        abilityWant = want; 
    } 
  
    onDestroy() { 
        console.log("[Demo] EntryAbility onDestroy"); 
        errorManager.off("error", registerId, (result) => { 
            console.log("[Demo] result " + result.code + ";" + result.message); 
        }); 
    } 
  
    onWindowStageCreate(windowStage: window.WindowStage) { 
        // Main window is created, set main page for this ability 
        console.log("[Demo] EntryAbility onWindowStageCreate"); 
  
        windowStage.loadContent("pages/index", (err, data) => { 
            if (err.code) { 
                console.error('Failed to load the content. Cause:' + JSON.stringify(err)); 
                return; 
            } 
            console.info('Succeeded in loading the content. Data: ' + JSON.stringify(data)); 
        }); 
    } 
  
    onWindowStageDestroy() { 
        // Main window is destroyed, release UI related resources 
        console.log("[Demo] EntryAbility onWindowStageDestroy"); 
    } 
  
    onForeground() { 
        // Ability has brought to foreground 
        console.log("[Demo] EntryAbility onForeground"); 
    } 
  
    onBackground() { 
        // Ability has back to background 
        console.log("[Demo] EntryAbility onBackground"); 
    } 
};
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.

实现效果:

分享
微博
QQ
微信
回复
2024-05-29 22:11:57


相关问题
ErrorManager捕获js异常
1303浏览 • 1回复 待解决
如何捕获应用发生异常
1222浏览 • 1回复 待解决
HarmonyOS 捕获异常Invalid parameter value
782浏览 • 1回复 待解决
HarmonyOS可以全局捕获异常吗?
702浏览 • 1回复 待解决
烧录捕获异常信息,怎么解决?
9189浏览 • 2回复 待解决
HarmonyOS 捕获异常再抛出为什么报错
775浏览 • 1回复 待解决
HarmonyOS webviewJS 注入异常
696浏览 • 1回复 待解决
DFX-Hilog日志打印指导
2548浏览 • 1回复 待解决
JS调用PA出现RemoteInterfaceProxy异常
7617浏览 • 2回复 待解决
DFX(Design For X)子系统是什么?
23235浏览 • 4回复 待解决
使用js如何使用callback
788浏览 • 1回复 待解决
HarmonyOS如何捕获UnhandledPromiseRejection
974浏览 • 1回复 待解决
可以用JS开发鸿蒙应用吗?
246浏览 • 1回复 已解决
DFX-crash定位定界工具
1258浏览 • 1回复 待解决
DFX-性能打点(HiTrace)指导
1769浏览 • 1回复 待解决
鸿蒙上如何使用jsprotobuf
4342浏览 • 1回复 待解决
创建JS项目如何使用webview?
5188浏览 • 1回复 待解决