HarmonyOS 鸿蒙Next如何从崩溃上报日志定位问题
HarmonyOS 鸿蒙Next如何从崩溃上报日志定位问题
如何后台获取的崩溃日志位置不明确很难定位具体问题 比如
Error name:RangeError Error message:Stack overflow! Stacktrace: Cannot get SourceMap info, dump raw stack: at getPreferencesFromStorage (mcdapp|harmony_library|1.0.0|src/main/ets/common/utils/PreferenceUtil.ts:1:1) at getPreference (mcdapp|harmony_library|1.0.0|src/main/ets/common/utils/PreferenceUtil.ts:1:1) at enable (mcdapp|harmony_library|1.0.0|src/main/ets/common/utils/Logger.ts:1:1) at error (mcdapp|harmony_library|1.0.0|src/main/ets/common/utils/Logger.ts:0:1) at getPreferencesFromStorage (mcdapp|harmony_library|1.0.0|src/main/ets/common/utils/PreferenceUtil.ts:1:1) at getPreference (mcdapp|harmony_library|1.0.0|src/main/ets/common/utils/PreferenceUtil.ts:1:1)
更多关于HarmonyOS 鸿蒙Next如何从崩溃上报日志定位问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
2 回复
1.使用的DevEco在进行release模式打包可能默认开启了混淆,检查下工程的模块级别的build-profile.json5文件是否开启了在release模式下进行混淆的配置,如不需要混淆可以将"enable"设置为 false再试试,是否还会报错,设置如下所示
"obfuscation": {
"ruleOptions": {
"enable": false,
"files": [
"./obfuscation-rules.txt"
]
}
}
2.如果在release模式下必要开启混淆配置,JS Crash多为应用问题,分析JS Crash(进程崩溃)可参考链接https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/jscrash-guidelines-V5,开发者可通过崩溃文件中的 Error message 和 StackTrace 来定位问题。
针对报错信息分析:
(1)RangeError(边界错误)类:表示超出有效范围时发生的异常,主要的有以下几种情况:
数组长度为负数或超长
数字类型的方法参数超出预定义范围
函数堆栈调用超过最大值
(2)Cannot get SourceMap info, dump raw stack 信息表示该应用为release包安装,JS栈转换eTS行列号失败,可考虑使用应用堆栈解析来解析行号。
如果出现Cannot get Source Map info, dump raw stack信息代表js栈转换ets行列号失败,在DevEco Studio中点击链接会跳转到不正确的代码位置或不存在的代码行位置。
应用代码运行出错时,会打印错误栈信息。如果ts栈转换ets行列号失败时错误栈的后缀仍显示为ets,开发者需要在build目录下编译中间产物以生成ts代码,在js代码中定位对应错误代码行。
应用堆栈轨迹解析:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/ide-release-app-stack-analysis-V5
"obfuscation": {
"ruleOptions": {
"enable": false,
"files": [
"./obfuscation-rules.txt"
]
}
}
2.如果在release模式下必要开启混淆配置,JS Crash多为应用问题,分析JS Crash(进程崩溃)可参考链接https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/jscrash-guidelines-V5,开发者可通过崩溃文件中的 Error message 和 StackTrace 来定位问题。
针对报错信息分析:
(1)RangeError(边界错误)类:表示超出有效范围时发生的异常,主要的有以下几种情况:
数组长度为负数或超长
数字类型的方法参数超出预定义范围
函数堆栈调用超过最大值
(2)Cannot get SourceMap info, dump raw stack 信息表示该应用为release包安装,JS栈转换eTS行列号失败,可考虑使用应用堆栈解析来解析行号。
如果出现Cannot get Source Map info, dump raw stack信息代表js栈转换ets行列号失败,在DevEco Studio中点击链接会跳转到不正确的代码位置或不存在的代码行位置。
应用代码运行出错时,会打印错误栈信息。如果ts栈转换ets行列号失败时错误栈的后缀仍显示为ets,开发者需要在build目录下编译中间产物以生成ts代码,在js代码中定位对应错误代码行。
应用堆栈轨迹解析:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/ide-release-app-stack-analysis-V5
更多关于HarmonyOS 鸿蒙Next如何从崩溃上报日志定位问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
HarmonyOS 鸿蒙Next从崩溃上报日志定位问题,可以采取以下步骤:
- 查看日志文件:崩溃时,系统会生成日志文件,通常位于/data/log/faultlog/faultlogger/路径下。使用DevEco Studio的Logcat功能,过滤E/或FATAL等关键字,可以找到堆栈跟踪信息,这是定位问题的关键。
- 分析崩溃信息:日志文件中会包含崩溃发生时的调用堆栈、错误代码以及系统状态信息。检查这些信息,尤其是错误代码和调用堆栈,以确定崩溃发生的具体位置。
- 代码和资源检查:根据崩溃信息,检查相关代码和资源文件。确认无空指针异常、内存泄漏等问题,且资源文件正确引用。
- 使用调试工具:如有源代码访问权限,设置断点逐步调试,观察变量值和执行流程,以进一步确认问题所在。
通过上述步骤,通常可以定位并解决HarmonyOS 鸿蒙Next应用崩溃的问题。如果问题依旧没法解决,请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html 。