文件处理方法、应用程序运行故障定位方法和设备技术

技术编号:23604525 阅读:13 留言:0更新日期:2020-03-28 05:39
本申请涉及一种文件处理及应用程序运行故障定位方法和设备。该文件处理方法包括:至少根据应用程序的各个方法各自的指令总长度为各个方法指定数据子区域,并将各个方法的指令偏移数据写入方法对应的分区的目标位置,每个分区对应所述应用程序的一个或多个方法,且每个分区的长度不小于本分区对应的各个方法各自的指令总长度,目标位置为指令偏移数据中包括的指令偏移地址指向的位置;将目标映射关系数据保存到应用程序对应的第二目标文件中,并从第一目标文件中删除目标映射关系数据,目标映射关系数据包括各个方法的指令偏移地址与源代码行号的映射关系数据。采用本应用程序处理方法能够有效减少应用程序包的大小。

File processing method, application running fault location method and equipment

【技术实现步骤摘要】
文件处理方法、应用程序运行故障定位方法和设备
本申请涉及计算机
,特别是涉及一种文件处理方法、应用程序运行故障定位方法和设备。
技术介绍
运行在安卓(Android)操作系统上的应用程序(APP)在崩溃后,会打印并上报应用程序崩溃时运行的堆栈信息,里面包含崩溃时运行的方法调用堆栈和相应行号,而其中行号是在应用程序的编译阶段保存在应用程序包(apk)中的。在APP崩溃后,这些信息可以帮助开发人员定位应用程序报错的地方。通常情况下,每一行源代码都对应一个行号,占用apk包的一定体积。应用程序的apk包中保存的行号通常占用约1.5MB至3MB的大小。随着APP功能的不断增加,对于某些超级APP,由于其源代码数量庞大,其行号的数量也就更庞大。而对应用程序的apk进行压缩一直是应用程序开发的目标。
技术实现思路
为进一步压缩应用程序的apk,提出一种能够从apk中去除行号的情况下,可实现应用程序故障定位的文件处理方法、应用程序运行故障定位方法和计算机设备。第一方面,本申请实施例提供一种文件处理方法,该文件包括应用程序的第一目标文件和应用程序对应的第二目标文件,第一目标文件的数据区域至少包括调试信息数据区域,该第一目标文件的数据内容至少包括目标映射关系数据,该调试信息数据区域被划分为多个数据子区域,该方法包括:至少根据应用程序的各个方法各自的指令总长度,为各个方法分别指定数据子区域,并将各个方法的指令偏移数据写入方法对应的数据子区域的目标位置,其中,指令偏移数据包括指令偏移地址,每个数据子区域对应应用程序的一个或多个方法,且每个数据子区域的长度不小于本数据子区域对应的各个方法各自的指令总长度,目标位置为指令偏移数据中包括的指令偏移地址指向的位置;从第一目标文件中读取目标映射关系数据,目标映射关系数据包括各个方法的指令偏移地址与应用程序的源代码行号的映射关系数据;将目标映射关系数据保存到应用程序对应的第二目标文件中,并从第一目标文件中删除目标映射关系数据。本专利技术实施例提供的文件处理方法,一方面将第一目标文件中保存的目标映射关系数据删除,即从应用程序的apk包中删除了行号,达到了压缩应用程序的apk的目的;另一方面,将目标映射关系数据保存到第二目标应用文件,并在调试信息数据区域保存应用程序的指令的指令偏移地址,从而使得应用程序崩溃后,从调式信息数据区域读取指令偏移地址而非行号进行上报,使得故障定位阶段,可以根据上报的指令偏移地址在第二目标应用文件中找到对应的行号,进而实现故障定位;再一方面,通过修改调试信息数据区域的数据保存格式,实现了该数据区域的分区共享,相较于现有的每个方法均对应一个调试信息数据区域,本专利技术实施例提供的新的数据保存格式使得调试信息数据区域所占存储空间更小,进一步实现了压缩apk的目的。本专利技术实施例中,为上述各个方法指定数据子区域时,不仅可以依据各个方法各自的指令总长度,还可以依据各个方法各自的方法名和/或各个方法各自的方法参数数量。也就是说,上述至少根据应用程序的各个方法各自的指令总长度,为上述各个方法分别指定数据子区域,其一种实现方式是:至少根据应用程序的各个方法各自的指令总长度和各自的方法名,为上述各个方法分别指定数据子区域,方法名相同的方法对应不同的数据子区域;另一种实现方式是:至少根据应用程序的各个方法各自的指令总长度和各自的方法参数数量,为上述各个方法分别指定数据子区域,方法参数数量不同的方法对应不同的数据子区域;又一种实现方式是:至少根据应用程序的各个方法各自的指令总长度、各自的方法名和各自的方法参数数量,为上述各个方法分别指定数据子区域。专利技术人在实现本专利技术的过程中发现,部分版本的移动终端,若某方法的方法参数数量与为其指定的数据子区域对应的其他方法的方法参数数量不同,则该方法的指令引起应用程序崩溃时,上报的崩溃报告中不携带行号信息(若已将行号信息替换为指令偏移数据,也不会携带指令偏移数据),对崩溃定位造成干扰。为避免这种情况发生,本专利技术实施例提供的方法,在为方法指定数据子区域时,将相同方法参数数量的方法指定到同一个数据子区域(应当指出的是,这并不意味着所有方法参数数量相同的方法均会被指定到同一个数据子区域,这是因为为方法指定数据子区域还与其他参考因素有关)。专利技术人在实现本专利技术的过程中还发现,若将相同方法名的方法指定到同一个数据子区域,那么在应用程序运行故障定位过程中,解析源代码行号时会存在歧义,导致无法成功解析。为避免这种情况发生,本专利技术实施例中,将相同方法名的方法指定到不同的数据子区域。在上述任意方法实施例的基础上,指令偏移数据还可以包括指令偏移数据所在数据子区域的标识信息。通过在指令偏移数据中携带数据子区域的标识信息,是为了在后续的应用程序运行故障定位阶段,根据崩溃报告中携带的偏移数据中的数据子区域的标识信息,对第二目标文件中的目标映射关系数据进行过滤,仅对过滤后的部分目标映射关系数据中查找行号,从而缩短查找时间,提高查找效率。在此基础上,一种实现方式中,将目标映射关系数据保存到应用程序对应的第二目标文件中,具体可以根据对应的数据子区域将目标映射关系数据分组保存到应用程序对应的第二目标文件中,每组目标映射关系数据对应一个数据子区域。另一种实现方式中,目标映射关系数据中还包括各个方法对应的数据子区域的标识信息。本专利技术实施例中,数据子区域的标识信息可以但不仅限于包括:数据子区域对应的方法的方法参数数量,和/或,数据子区域的索引。其中,数据子区域的索引即为该数据子区域的偏移地址。在上述任意方法实施例的基础上,调试信息数据区域的数据子区域划分方式可以为:将应用程序的各个方法按照各自的指令总长度进行排序;对所述各个方法构成的排序序列进行至少一次分组,直至每组方法的指令总长度最大值的求和结果不大于所述调制信息数据区域的长度,同一次得到的每组方法数量相同,每次分组的分组数量递减;针对每次分组,查找每组方法的指令总长度最大值并求和,将求和结果与所述调试信息数据区域的长度比较,若求和结果不大于所述调试信息数据区域的长度,则按照各组方法的指令总长度最大值将所述调试信息数据区域分为与本次分组数量相同的数据子区域。通过上述分区方式,可以使得分区更为均衡,避免出现某个或某些数据子区域对应的方法过多,而某个或某些数据子区域对应的方法过少。第二方面,本专利技术实施例提供一种文件处理装置,该文件包括应用程序的第一目标文件和应用程序对应的第二目标文件,第一目标文件的数据区域至少包括调试信息数据区域,第一目标文件的数据内容至少包括目标映射关系数据,调试信息数据区域被划分为多个数据子区域,该装置包括:指令偏移数据写入模块,用于至少根据上述应用程序的各个方法各自的指令总长度,为上述各个方法分别指定数据子区域,并将各个方法的指令偏移数据写入方法对应的数据子区域的目标位置,指令偏移数据包括指令偏移地址,每个数据子区域对应上述应用程序的一个或多个方法,且每个数据子区域的长本文档来自技高网...

【技术保护点】
1.一种文件处理方法,其特征在于,所述文件包括应用程序的第一目标文件和所述应用程序对应的第二目标文件,所述第一目标文件的数据区域至少包括调试信息数据区域,所述第一目标文件的数据内容至少包括目标映射关系数据,所述调试信息数据区域被划分为多个数据子区域,所述方法包括:/n至少根据所述应用程序的各个方法各自的指令总长度,为所述各个方法分别指定所述数据子区域,并将所述各个方法的指令偏移数据写入方法对应的数据子区域的目标位置,所述指令偏移数据包括指令偏移地址,每个数据子区域对应所述应用程序的一个或多个方法,且每个数据子区域的长度不小于本数据子区域对应的各个方法各自的指令总长度,所述目标位置为指令偏移数据中包括的指令偏移地址指向的位置;/n从所述第一目标文件中读取目标映射关系数据,所述目标映射关系数据包括所述各个方法的指令偏移地址与所述应用程序的源代码行号的映射关系数据;/n将所述目标映射关系数据保存到所述应用程序对应的第二目标文件中,并从所述第一目标文件中删除所述目标映射关系数据。/n

【技术特征摘要】
1.一种文件处理方法,其特征在于,所述文件包括应用程序的第一目标文件和所述应用程序对应的第二目标文件,所述第一目标文件的数据区域至少包括调试信息数据区域,所述第一目标文件的数据内容至少包括目标映射关系数据,所述调试信息数据区域被划分为多个数据子区域,所述方法包括:
至少根据所述应用程序的各个方法各自的指令总长度,为所述各个方法分别指定所述数据子区域,并将所述各个方法的指令偏移数据写入方法对应的数据子区域的目标位置,所述指令偏移数据包括指令偏移地址,每个数据子区域对应所述应用程序的一个或多个方法,且每个数据子区域的长度不小于本数据子区域对应的各个方法各自的指令总长度,所述目标位置为指令偏移数据中包括的指令偏移地址指向的位置;
从所述第一目标文件中读取目标映射关系数据,所述目标映射关系数据包括所述各个方法的指令偏移地址与所述应用程序的源代码行号的映射关系数据;
将所述目标映射关系数据保存到所述应用程序对应的第二目标文件中,并从所述第一目标文件中删除所述目标映射关系数据。


2.根据权利要求1所述的方法,其特征在于,所述至少根据所述应用程序的各个方法各自的指令总长度,为所述各个方法分别指定数据子区域,包括:
至少根据所述应用程序的各个方法各自的指令总长度和各自的方法名,为所述各个方法分别指定数据子区域,方法名相同的方法对应不同的数据子区域。


3.根据权利要求1所述的方法,其特征在于,所述至少根据所述应用程序的各个方法各自的指令总长度,为所述各个方法分别指定数据子区域,包括:
至少根据所述应用程序的各个方法各自的指令总长度和各自的方法参数数量,为所述各个方法分别指定数据子区域,方法参数数量不同的方法对应不同的数据子区域。


4.根据权利要求1~3任一项所述的方法,其特征在于,所述指令偏移数据还包括所述指令偏移数据所在数据子区域的标识信息。


5.根据权利要求4所述的方法,其特征在于,所述数据子区域的标识信息包括:所述数据子区域对应的方法的方法参数数量,和/或,所述数据子区域的索引。


6.根据权利要求1~5任一项所述的方法,其特征在于,所述调试信息数据区域的数据子区域划分方式为:
将所述应用程序的各个方法按照各自的指令总长度进行排序;
对所述各个方法构成的排序序列进行至少一次分组,直至每组方法的指令总长度最大值的求和结果不大于所述调制信息数据区域的长度,同一次得到的每组方法数量相同,每次分组的分组数量递减;
针对每次分组,查找每组方法的指令总长度最大值并求和,将求和结果与所述调试信息数据区域的长度比较,若求和结果不大于所述调试信息数据区域的长度,则按照各组方法的指令总长度最大值将所述调试信息数据区域分为与本次分组数量相同的数据子区域。


7.一种文件处理装置,其特征在于,所述文件包括应用程序的第一目标文件和所述应用程序对应的第二目标文件,所述第一目标文件的数据区域至少包括调试信息数据区域,所述第一目标文件的数据内容至少包括目标映射关系数据,所述调试信息数据区域被划分为多个数据子区域,所述装置包括:
指令偏移数据写入模块,用于至少根据所述应用程序的各个方法各自的指令总长度,为所述各个方法分别指定所述数据子区域,并将所述各个方法的指令偏移数据写入方法对应的数据子区域的目标位置,所述指令偏移数据包括指令偏移地址,每个数据子区域对应所述应用程序的一个或多个方法,且每个数据子区域的长度不小于本数据子区域对应的各个方法各自的指令总长度,所述目标位置为指令偏移数据中包括的指令偏移地址指向的位置;
映射关系数据读取模块,用于从所述第一目标文件中读取目标映射关系数据,所述目标映射关系数据包括所述各个方法的指令偏移地址与所述应用程序的源代码行号的映射关系数据;
目标映射关系数据转移模块,用于将所述目标映射关系数据保存到所述应用程序对应的第二目标文件中,并从所述第一目标文件中删除所述目标映射关系数据。


8.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述...

【专利技术属性】
技术研发人员:杨志谦
申请(专利权)人:北京字节跳动网络技术有限公司
类型:发明
国别省市:北京;11

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

1