DFX-crash定位定界工具

DFX-crash定位定界工具

HarmonyOS
2024-06-13 11:12:57
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
cbaby

脚本文件获取路径\\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 + 行数信息)


分享
微博
QQ
微信
回复
2024-06-13 22:34:52
相关问题
如何实现crash堆栈抓取、crash回调
515浏览 • 1回复 待解决
DFX-Hilog日志打印指导
214浏览 • 1回复 待解决
DFX(Design For X)子系统是什么?
20277浏览 • 4回复 待解决
DFX-性能打点(HiTrace)指导
216浏览 • 1回复 待解决
尝试获取Har context,app crash
508浏览 • 1回复 待解决
app启动时加在so库crash
389浏览 • 1回复 待解决
app启动crash报错Error message:MainPage:
507浏览 • 1回复 待解决
精度优先获取定位失败
423浏览 • 1回复 待解决
startAbility调用失败如何定位
336浏览 • 1回复 待解决
Webview是否支持定位功能?
339浏览 • 1回复 待解决
获取定位权限没有弹框
470浏览 • 1回复 待解决
获取定位信息是否必须联网
370浏览 • 1回复 待解决
preferences工具类封装
349浏览 • 1回复 待解决
SnapShot定位,有人知道怎么处理吗?
375浏览 • 1回复 待解决
鸿蒙系统怎么打开定位开关页面
8819浏览 • 1回复 待解决
定位是否必须联网才能成功?
497浏览 • 1回复 待解决