[发明专利]崩溃调用栈聚合的方法、装置、介质和设备有效
申请号: | 201910967012.4 | 申请日: | 2019-10-12 |
公开(公告)号: | CN110865898B | 公开(公告)日: | 2023-09-05 |
发明(设计)人: | 刘洪凯 | 申请(专利权)人: | 北京字节跳动网络技术有限公司 |
主分类号: | G06F11/07 | 分类号: | G06F11/07 |
代理公司: | 北京国昊天诚知识产权代理有限公司 11315 | 代理人: | 王思超 |
地址: | 100041 北京市石景山区*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 崩溃 调用 聚合 方法 装置 介质 设备 | ||
本公开提供了一种崩溃调用栈聚合的方法、装置、介质和设备,所述方法包括:通过指定函数对崩溃事件实时监听,当崩溃事件发生时,直接反射获取崩溃调用栈存储元素;基于所述崩溃调用栈存储元素,获取调用栈栈帧的方法签名,其中,所述方法签名包括函数名、类名以及参数类型;将所述函数名、类名以及参数类型发送至服务器,用于对所述崩溃调用栈进行归类。本方法通过准确获取崩溃栈的函数名、类名以及参数类型,并将函数名、类名以及参数类型作为参数计算崩溃栈的哈希值,通过将哈希值相同的崩溃栈聚合为一类,能够提高崩溃调用栈聚合的准确性,让开发者更好更快地排查问题从而提升应用的质量。
技术领域
本公开涉及计算机技术领域,具体而言,涉及一种崩溃调用栈聚合的方法、装置、介质和设备。
背景技术
安卓应用崩溃栈的聚合对解决应用的bug,提升应用的质量非常重要:服务端会收到大量的崩溃调用栈,如果不对这些崩溃调用栈进行聚合而是逐一解决的话是不现实的(崩溃量太多)。当对崩溃栈聚合之后,开发者可以查看哪些崩溃发生的次数多,从而优先解决这种问题,并且可以查看同一个崩溃的分布特征(比如机型分布特征,安卓版本分布特征)帮助排查问题。但是如果聚合算法不完善(将不同的崩溃问题聚合到了一起,或者将同一个问题聚合到不同的问题中)就会影响聚合的准确性,从而影响问题的排查。
现有的崩溃调用栈聚合算法都只会考虑调用栈中每个栈帧对应的方法名和所在类名而没有考虑方法的参数类型,这样导致当不同的崩溃调用栈中有同名的但是参数类型不同的方法时就有可能将这两种不同的崩溃聚合到一起,影响聚合的准确性。
本公开的目的在于提供一种崩溃调用栈聚合的方法、装置、介质和设备,能够解决上述提到的至少一个技术问题。具体方案如下:
根据本公开的具体实施方式,第一方面,本公开提供一种崩溃调用栈聚合方法,包括:
通过指定函数对崩溃事件实时监听,当崩溃事件发生时,直接反射获取崩溃调用栈存储元素;
基于所述崩溃调用栈存储元素,获取调用栈栈帧的方法签名,其中,所述方法签名包括函数名、类名以及参数类型;
将所述函数名、类名以及参数类型发送至服务器,用于对所述崩溃调用栈进行归类。
可选的,所述基于所述崩溃调用栈存储元素,获取调用栈栈帧的方法签名,包括:
将所述调用栈存储元素强转化为元素数组;
取所述元素数组的第一个元素,并将所述第一个元素强转化为指定类型数组;
遍历所述调用栈栈帧,取所述指定类型数组的索引为i的元素作为第一参数,取所述元素数组的索引为i+1的元素作为第二参数,其中i为0到N-1的自然数,N为栈帧个数;
通过所述第一参数和第二参数获得所述调用栈栈帧的方法签名。
可选的,所述通过所述第一参数和第二参数获得所述调用栈栈帧的方法签名,包括:
将所述第一参数和第二参数从第一语言环境转换到第二语言环境;
在第二语言环境中,将所述第一参数和第二参数输入转化函数得到函数对象;
在第一语言环境中,提取所述函数对象的签名,获得所述调用栈栈帧的方法签名。
可选的,所述用于对所述崩溃调用栈进行归类,包括:
将所述函数名、类名以及参数类型作为因子计算所述崩溃调用栈的哈希值;
将所述哈希值相同的所述崩溃调用栈聚合为一类。
根据本公开的具体实施方式,第二方面,本公开提供一种崩溃调用栈聚合方法,包括:
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京字节跳动网络技术有限公司,未经北京字节跳动网络技术有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201910967012.4/2.html,转载请声明来源钻瓜专利网。