前申:果然系统的API没有让我失望,日志完全看不出来崩溃原因所在
一、使用
logCrash() {FaultLogger.query(FaultLogger.FaultType.JS_CRASH,(err,val) => {if (err) {console.log('fault log get an err'+JSON.stringify(err))return}let len = val.lengthfor (let i = 0; i < len; i++) {//FaultLogInfolet logInfo = val[i]console.log('fault log reason '+logInfo.reason)console.log('fault log pid'+logInfo.pid)console.log('fault log uid'+logInfo.uid)console.log('fault log type'+logInfo.type)console.log('fault log timestamp'+logInfo.timestamp)console.log('fault log module'+logInfo.module)console.log('fault log summary'+logInfo.summary)console.log('fault log fullLog'+logInfo.fullLog)console.log('========== fault log end ==========')}})}
贴一下打印结果:
这个打印结果让我很迷茫啊,这能给我带来什么信息呢?reason没有,fullLog也啥有用信息没有。唉~~
不过,还是记录一下这个API吧。
API官方解释可以通过FaultLogger.query方法获取故障信息,然后通过FaultType的类型来获取不同的故障信息。如:NO_SPECIFIC(不区分故障类型)、APP_FREEZE(应用程序卡死故障类型)、JS_CRASH(JS程序故障类型)和CPP_CRASH(C++程序故障类型)。
二、遇到的注意点
我在制造崩溃的时候开始使用的代码是这样的
makeAFaultCrash() {let names: string[] = []//制造一个数组越界的崩溃console.log('制造一个崩溃'+(names[2]))}
这在ArkTS中不会崩溃,除非我对names[2]再调用方法才会崩溃,即
makeAFaultCrash() {let names: string[] = []//这样才会崩溃console.log('制造一个崩溃'+(names[2]).length)}