相关问题
HarmonyOS crash日志如何定位问题代码
583浏览 • 1回复 待解决
打包模式不同导致部分web页面不显示定位定界指导?
134浏览 • 0回复 待解决
打包模式不同导致部分web页面不显示定位定界指导
391浏览 • 1回复 待解决
webview初始化加载网页后crash,请问如何定位
2025浏览 • 0回复 待解决
基于反混淆工具混淆后的日志定位
426浏览 • 1回复 待解决
DFX-Hilog日志打印指导
1271浏览 • 1回复 待解决
DFX(Design For X)子系统是什么?
22166浏览 • 4回复 待解决
如何实现crash堆栈抓取、crash回调
1838浏览 • 1回复 待解决
DFX-性能打点(HiTrace)指导
920浏览 • 1回复 待解决
HarmonyOS APP发生crash之后如何上传crash日志并重启应用
611浏览 • 1回复 待解决
HarmonyOS 关于crash问题
386浏览 • 1回复 待解决
如何使用DFX的ErrorManager来捕获js异常?
793浏览 • 1回复 待解决
HarmonyOS taskpool使用crash
1416浏览 • 2回复 待解决
HarmonyOS 遇到JSON.stringify crash
432浏览 • 1回复 待解决
尝试获取Har context,app crash
1826浏览 • 1回复 待解决
开发者如何利用Profiler工具进行性能问题识别、定位、优化及验证的完整过程?
573浏览 • 1回复 待解决
app启动crash报错Error message:MainPage:
1793浏览 • 1回复 待解决
#鸿蒙通关秘籍# 如何使用ArkUI Inspector工具快速定位和解决鸿蒙应用中的UI布局问题?
48浏览 • 0回复 待解决
HarmonyOS 请问当前滑动和点击事件的判断是否有定界呢
28浏览 • 1回复 待解决
HarmonyOS使用 napi 调用封装的 quickjs crash
403浏览 • 1回复 待解决
app启动时加在so库crash
822浏览 • 1回复 待解决
HarmonyOS 支持获取应用的crash日志吗
21浏览 • 1回复 待解决
Tabs如何在切换到指定界面后才加载界面的数据
289浏览 • 1回复 待解决
使用faultLogger.querySelfFaultLog实现crash堆栈的抓取
493浏览 • 1回复 待解决
脚本文件获取路径\\10.175.127.15\Z_disk\测试工具\cppcrash_parser
用法:
脚本
命令
cppcrash
python main.py cppcrash存放目录
在上面的链接取出 parseCppcrash.rar,执行命令,自动在该目录下筛选cppcrash文件并进行处理,分析结果输出在cppcrash存放目录下
addr2line
python addr2line.py cppcrash单个文件/存放目录
在上面的链接取出 addr2line.rar,执行命令;如图,必须将欲解析的cppcrash和appfreeze文件的对应版本的lib.unstripped copy到脚本所在文件夹,在解析每一个cppcrash或appfreeze文件时都会生成一个对应的processd_cppcrash或processd_appfreeze文件作为结果,存放在原cppcrash文件相同目录,故与上面cppcrash解析脚本不冲突;不支持同时解析rk和wgr;
jscrash
python jscrashParser.py jscrash存放目录
在上面的链接取出 parseOthers.rar,执行命令,自动在该目录下筛选jscrash文件并进行处理,分析结果输出在jscrash存放目录下
appfreeze
python appfreezeParser.py appfreeze存放目录
在上面的链接取出 parseOthers.rar,执行命令,自动在该目录下筛选appfreeze文件并进行处理,分析结果输出在appfreeze存放目录下
service_block
python serviceBlockParser.py service_block存放目录
在上面的链接取出 parseOthers.rar,执行命令,自动在该目录下筛选service_block 文件并进行处理,分析结果输出在service_block存放目录下
解析规则表:
脚本
规则
cppcrash
1、原始崩溃so及其分类依据:# 开头的行,从 # 00 的那一行一直到第一个非C库so的那一行,根据他们的so名及其行数;如右图红框所示内容,可以直接以so名到该行尾为判断依据;C库so判断依据:该so含有下面任一字段,并且下一个字符不是字母['libc.so', 'libc++', 'glibc', 'musl', 'bionic', 'libutils']如果找不到非C库的so,那么归类为无效so。如果不符合下面2-4的规则,那么,第一个非C库的so,就是崩溃栈。
2、多线程:当第一个非c库so是ark相关的so,并且是主动abort时,崩溃so为ark后面的非ark的非C库的so
3、libace_napi:如果问题so是libace_napi开头的,那么跳过ace相关的so,再向下找到/system/lib/module/或/system/lib64/module/开头的那个so作为责任归属
4、# 开头的某一行,如果它的地址后面为空,或者包含下面任意一个字符串,则跳过该行继续向下寻找。如果找不到有效的so,并且出现此种情况,那么归类为DFX问题,找 曾智 00371290['[anon:libc_malloc]', 'Unknown', '[anon:.bss]', '[heap]', '[stack]']
5、Maps之前如果没有 # 开头的行,归类为异常,Maps以后的so不看
其他:如果进程名包含下列任一进程,则归类为关键进程["foundation", "render_service"]如果进程名包含下列任一字符串,则为测试用例,只有没有崩溃so或者找不到责任人的测试用例才归类为测试用例['test', 'acts', 'ceshi']
jscrash
1、Module name和Stacktrace后面第一个调用栈的名字
appfreeze
1、MSG:Blocked thread id,根据 thread id 找到下面相同的 Tid ,然后用分析cppcrash的方法去分析该Tid下 # 开头的行
2、若找不到该Tid,则根据包名PACKAGE_NAME和Stacktrace后面第一个调用栈的名字
3、过滤测试用例(含’ceshi’, ‘test’, ‘ix’,可在originAppfreeze.py第98行修改过滤的关键字)
service_block
1、线程名
如图,将需要进行 addr2line 解析的cppcrash文件对应版本的lib.unstripped copy到脚本所在文件夹,执行命令:python addr2line.pycppcrash单个文件/目录
第一种报错,虽然报错,但是能得到解析结果
第二种是找不到这个so文件
问题分类:若某一崩溃so下有关键进程挂了,则分类为关键进程;关键进程挂了的测试用例,分类为关键进程+测试用例;含[anon:libc_malloc],Unknown,[stack],以及栈名为空的,分类为内存异常;无进程名或so 的,分类为exception;
increFilter:汇总重复和新增的问题的csv表格,是否重复或新增的判断依据为,该问题在“说明”这一列的所有so及其行数;
参考标准:
1、获取软件包后新建文件夹,名称需要能描述其类型、时间、版本等信息;将测试结果的日志压缩包(也可以是解压后的日志文件或文件夹,支持批量处理,支持过滤C库, 支持多线程问题)输出到该文件夹。
2、脚本执行:安装python3并加入环境变量,在 parse_cppcrash 目录下打开命令行,执行命令 ‘python parse_cppcrash.py rar文件所在目录’,执行成功后结果输出在 rar 文件所在目录下(命令执行完毕也会打印日志路径)。
如下图:python parse_cppcrash.py D:\Downloads\xts_test_alalala
3、结果说明如下:
按照问题so 分块,同一个 so 为一个分块,每个问题so 下面按照问题类型分类;
每一类问题下面:
问题崩溃栈:
进程名
线程信息
同类问题 计数:
出现这类问题的文件
判断是否是同类问题的依据是: # 00 的行到不是C库那一行的所有行,它的物理地址之后的所有部分(SO + 行数信息)