故障确定方法、装置、电子设备及存储介质制造方法及图纸

技术编号:34912968 阅读:39 留言:0更新日期:2022-09-15 07:02
本公开关于一种故障确定方法、装置、电子设备及存储介质,所述方法包括:接收客户端在目标应用启动时,发送的故障解析请求;所述故障解析请求携带所述目标应用对应的堆栈以及二进制文件;基于所述堆栈以及所述二进制文件,确定所述堆栈中每个栈帧对应的目标动态库;根据每个目标动态库的属性信息,对每个目标动态库对应栈帧的属性信息进行更新,得到每个栈帧的更新属性信息;根据堆栈中各个栈帧的更新属性信息,确定目标应用的故障类型。本公开提高了客户端的运行稳定性和运行效率,并提高了客户端采集堆栈的效率。高了客户端采集堆栈的效率。高了客户端采集堆栈的效率。

【技术实现步骤摘要】
故障确定方法、装置、电子设备及存储介质


[0001]本公开涉及计算机
,尤其涉及一种故障确定方法、装置、电子设备及存储介质。

技术介绍

[0002]相关技术中,在客户端获取堆栈之后,需要获取堆栈中每个栈帧对应二进制文件的偏移量,然后再进行符号化,定位故障问题;客户端在运行过程中,需要多次存储大量的二进制文件并逐一进行遍历,工作量较大,这样不仅占据了客户端的大量内存,还会增加客户端采集堆栈的时长,影响堆栈的采集效率。

技术实现思路

[0003]本公开提供一种故障确定方法、装置、电子设备及存储介质,以至少解决相关技术中堆栈采集效率低下的问题。本公开的技术方案如下:
[0004]根据本公开实施例的第一方面,提供一种故障确定方法,包括:
[0005]接收客户端在目标应用启动时,发送的故障解析请求;所述故障解析请求携带所述目标应用对应的堆栈以及二进制文件;
[0006]基于所述堆栈以及所述二进制文件,确定所述堆栈中每个栈帧对应的目标动态库;
[0007]根据每个目标动态库的属性信息,对每个目标动态库对应栈帧的属性信息进行更新,得到每个栈帧的更新属性信息;
[0008]根据所述堆栈中各个栈帧的更新属性信息,确定所述目标应用的故障类型。
[0009]在一示例性的实施方式中,所述基于所述堆栈以及所述二进制文件,确定所述堆栈中每个栈帧对应的目标动态库,包括:
[0010]解析所述二进制文件,得到至少两个动态库;每个动态库包括开始地址和结束地址;
[0011]解析所述堆栈,得到所述堆栈中每个栈帧的栈帧地址;
[0012]根据每个栈帧的栈帧地址,以及每个动态库对应的开始地址和结束地址,确定每个栈帧对应的目标动态库。
[0013]在一示例性的实施方式中,所述根据每个栈帧的栈帧地址,以及每个动态库对应的开始地址和结束地址,确定每个栈帧对应的目标动态库,包括:
[0014]将任一栈帧确定为目标栈帧,并获取所述目标栈帧的目标地址;
[0015]获取每个动态库对应的开始地址和结束地址;
[0016]遍历所述至少两个动态库,查找开始地址和结束地址之间包括所述目标地址的动态库;
[0017]将开始地址和结束地址之间包括所述目标地址的动态库确定为所述目标栈帧的目标动态库。
[0018]在一示例性的实施方式中,所述遍历所述至少两个动态库,查找开始地址和结束地址之间包括所述目标地址的动态库,包括:
[0019]根据每个动态库对应的开始地址,对所述至少两个动态库进行排序;
[0020]根据排序结果以及二分查找算法,查找开始地址和结束地址之间包括所述目标地址的动态库。
[0021]在一示例性的实施方式中,所述根据每个目标动态库的属性信息,对每个目标动态库对应栈帧的属性信息进行更新,得到每个栈帧的更新属性信息,包括:
[0022]获取每个栈帧的初始属性信息;
[0023]将每个栈帧的初始属性信息以及每个栈帧对应的目标动态库的属性信息作为每个栈帧的更新属性信息。
[0024]在一示例性的实施方式中,所述根据所述堆栈中各个栈帧的更新属性信息,确定所述目标应用的故障类型,包括:
[0025]调用符号化工具对每个栈帧的更新属性信息进行符号化处理,得到每个栈帧对应的函数标识;
[0026]根据所述堆栈中各个栈帧函数标识,确定所述目标应用的故障类型。
[0027]在一示例性的实施方式中,所述目标动态库的属性信息包括所述目标动态库的偏移量、识别码、内存中的至少一种。
[0028]根据本公开实施例的第二方面,提供一种故障确定装置,包括:
[0029]故障解析请求发送模块,被配置为执行接收客户端在目标应用启动时,发送的故障解析请求;所述故障解析请求携带所述目标应用对应的堆栈以及二进制文件;
[0030]目标动态库确定模块,被配置为执行基于所述堆栈以及所述二进制文件,确定所述堆栈中每个栈帧对应的目标动态库;
[0031]属性更新模块,被配置为执行根据每个目标动态库的属性信息,对每个目标动态库对应栈帧的属性信息进行更新,得到每个栈帧的更新属性信息;
[0032]故障类型确定模块,被配置为执行根据所述堆栈中各个栈帧的更新属性信息,确定所述目标应用的故障类型。
[0033]在一示例性的实施方式中,所述目标动态库确定模块包括:
[0034]文件解析单元,被配置为执行解析所述二进制文件,得到至少两个动态库;每个动态库包括开始地址和结束地址;
[0035]栈帧地址确定单元,被配置为执行解析所述堆栈,得到所述堆栈中每个栈帧的栈帧地址;
[0036]目标动态库确定单元,被配置为执行根据每个栈帧的栈帧地址,以及每个动态库对应的开始地址和结束地址,确定每个栈帧对应的目标动态库。
[0037]在一示例性的实施方式中,所述目标动态库确定单元包括:
[0038]目标地址获取单元,被配置为执行将任一栈帧确定为目标栈帧,并获取所述目标栈帧的目标地址;
[0039]开始地址获取单元,被配置为执行获取每个动态库对应的开始地址和结束地址;
[0040]动态库查找单元,被配置为执行遍历所述至少两个动态库,查找开始地址和结束地址之间包括所述目标地址的动态库;
[0041]目标动态库确定单元,被配置为执行将开始地址和结束地址之间包括所述目标地址的动态库确定为所述目标栈帧的目标动态库。
[0042]在一示例性的实施方式中,所述动态库查找单元包括:
[0043]排序子单元,被配置为执行根据每个动态库对应的开始地址,对所述至少两个动态库进行排序;
[0044]动态库查找子单元,被配置为执行根据排序结果以及二分查找算法,查找开始地址和结束地址之间包括所述目标地址的动态库。
[0045]在一示例性的实施方式中,所述属性更新模块包括:
[0046]初始属性信息获取单元,被配置为执行获取每个栈帧的初始属性信息;
[0047]更新属性信息确定单元,被配置为执行将每个栈帧的初始属性信息以及每个栈帧对应的目标动态库的属性信息作为每个栈帧的更新属性信息。
[0048]在一示例性的实施方式中,所述故障类型确定模块包括:
[0049]函数标识确定单元,被配置为执行调用符号化工具对每个栈帧的更新属性信息进行符号化处理,得到每个栈帧对应的函数标识;
[0050]故障类型确定单元,被配置为执行根据所述堆栈中各个栈帧函数标识,确定所述目标应用的故障类型。
[0051]在一示例性的实施方式中,所述目标动态库的属性信息包括所述目标动态库的偏移量、识别码、内存中的至少一种。
[0052]根据本公开实施例的第三方面,提供一种电子设备,包括:
[0053]处理器;
[0054]用于存储所述处理器可执行指令的存储器;
[0055]其中,所述处理器被配置为执行所述指令,以实本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种故障确定方法,其特征在于,包括:接收客户端在目标应用启动时,发送的故障解析请求;所述故障解析请求携带所述目标应用对应的堆栈以及二进制文件;基于所述堆栈以及所述二进制文件,确定所述堆栈中每个栈帧对应的目标动态库;根据每个目标动态库的属性信息,对每个目标动态库对应栈帧的属性信息进行更新,得到每个栈帧的更新属性信息;根据所述堆栈中各个栈帧的更新属性信息,确定所述目标应用的故障类型。2.根据权利要求1所述的方法,其特征在于,所述基于所述堆栈以及所述二进制文件,确定所述堆栈中每个栈帧对应的目标动态库,包括:解析所述二进制文件,得到至少两个动态库;每个动态库包括开始地址和结束地址;解析所述堆栈,得到所述堆栈中每个栈帧的栈帧地址;根据每个栈帧的栈帧地址,以及每个动态库对应的开始地址和结束地址,确定每个栈帧对应的目标动态库。3.根据权利要求2所述的方法,其特征在于,所述根据每个栈帧的栈帧地址,以及每个动态库对应的开始地址和结束地址,确定每个栈帧对应的目标动态库,包括:将任一栈帧确定为目标栈帧,并获取所述目标栈帧的目标地址;获取每个动态库对应的开始地址和结束地址;遍历所述至少两个动态库,查找开始地址和结束地址之间包括所述目标地址的动态库;将开始地址和结束地址之间包括所述目标地址的动态库确定为所述目标栈帧的目标动态库。4.根据权利要求3所述的方法,其特征在于,所述遍历所述至少两个动态库,查找开始地址和结束地址之间包括所述目标地址的动态库,包括:根据每个动态库对应的开始地址,对所述至少两个动态库进行排序;根据排序结果以及二分查找算法,查找开始地址和结束地址之间包括所述目标地址的动态库。5.根据权利要求1所述的方法,其特征在于,所述根据每个目标动态库的属性信息,对每个目标动态库对应栈帧的属性信息进行更新,得到每个栈帧的更新属性信息,包括:获取每个栈帧的初始属性信息;将每个栈帧的初始属性信息以...

【专利技术属性】
技术研发人员:刘俊龙
申请(专利权)人:北京达佳互联信息技术有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1