【技术实现步骤摘要】
文件处理方法、应用程序运行故障定位方法和设备
本申请涉及计算机
,特别是涉及一种文件处理方法、应用程序运行故障定位方法和设备。
技术介绍
运行在安卓(Android)操作系统上的应用程序(APP)在崩溃后,会打印并上报应用程序崩溃时运行的堆栈信息,里面包含崩溃时运行的方法调用堆栈和相应行号,而其中行号是在应用程序的编译阶段保存在应用程序包(apk)中的。在APP崩溃后,这些信息可以帮助开发人员定位应用程序报错的地方。通常情况下,每一行源代码都对应一个行号,占用apk包的一定体积。应用程序的apk包中保存的行号通常占用约1.5MB至3MB的大小。随着APP功能的不断增加,对于某些超级APP,由于其源代码数量庞大,其行号的数量也就更庞大。而对应用程序的apk进行压缩一直是应用程序开发的目标。
技术实现思路
为进一步压缩应用程序的apk,提出一种能够从apk中去除行号的情况下,可实现应用程序故障定位的文件处理方法、应用程序运行故障定位方法和计算机设备。第一方面,本申请实施例提供一种文件处理方法,该文件包括应用程序的第一目标文件和应用程序对应的第二目标文件,第一目标文件的数据区域至少包括调试信息数据区域,该第一目标文件的数据内容至少包括目标映射关系数据,该调试信息数据区域被划分为多个数据子区域,该方法包括:至少根据应用程序的各个方法各自的指令总长度,为各个方法分别指定数据子区域,并将各个方法的指令偏移数据写入方法对应的数据子区域的目标位置,其中,指令偏移数据包括指令偏 ...
【技术保护点】
1.一种文件处理方法,其特征在于,所述文件包括应用程序的第一目标文件和所述应用程序对应的第二目标文件,所述第一目标文件的数据区域至少包括调试信息数据区域,所述第一目标文件的数据内容至少包括目标映射关系数据,所述调试信息数据区域被划分为多个数据子区域,所述方法包括:/n至少根据所述应用程序的各个方法各自的指令总长度,为所述各个方法分别指定所述数据子区域,并将所述各个方法的指令偏移数据写入方法对应的数据子区域的目标位置,所述指令偏移数据包括指令偏移地址,每个数据子区域对应所述应用程序的一个或多个方法,且每个数据子区域的长度不小于本数据子区域对应的各个方法各自的指令总长度,所述目标位置为指令偏移数据中包括的指令偏移地址指向的位置;/n从所述第一目标文件中读取目标映射关系数据,所述目标映射关系数据包括所述各个方法的指令偏移地址与所述应用程序的源代码行号的映射关系数据;/n将所述目标映射关系数据保存到所述应用程序对应的第二目标文件中,并从所述第一目标文件中删除所述目标映射关系数据。/n
【技术特征摘要】
1.一种文件处理方法,其特征在于,所述文件包括应用程序的第一目标文件和所述应用程序对应的第二目标文件,所述第一目标文件的数据区域至少包括调试信息数据区域,所述第一目标文件的数据内容至少包括目标映射关系数据,所述调试信息数据区域被划分为多个数据子区域,所述方法包括:
至少根据所述应用程序的各个方法各自的指令总长度,为所述各个方法分别指定所述数据子区域,并将所述各个方法的指令偏移数据写入方法对应的数据子区域的目标位置,所述指令偏移数据包括指令偏移地址,每个数据子区域对应所述应用程序的一个或多个方法,且每个数据子区域的长度不小于本数据子区域对应的各个方法各自的指令总长度,所述目标位置为指令偏移数据中包括的指令偏移地址指向的位置;
从所述第一目标文件中读取目标映射关系数据,所述目标映射关系数据包括所述各个方法的指令偏移地址与所述应用程序的源代码行号的映射关系数据;
将所述目标映射关系数据保存到所述应用程序对应的第二目标文件中,并从所述第一目标文件中删除所述目标映射关系数据。
2.根据权利要求1所述的方法,其特征在于,所述至少根据所述应用程序的各个方法各自的指令总长度,为所述各个方法分别指定数据子区域,包括:
至少根据所述应用程序的各个方法各自的指令总长度和各自的方法名,为所述各个方法分别指定数据子区域,方法名相同的方法对应不同的数据子区域。
3.根据权利要求1所述的方法,其特征在于,所述至少根据所述应用程序的各个方法各自的指令总长度,为所述各个方法分别指定数据子区域,包括:
至少根据所述应用程序的各个方法各自的指令总长度和各自的方法参数数量,为所述各个方法分别指定数据子区域,方法参数数量不同的方法对应不同的数据子区域。
4.根据权利要求1~3任一项所述的方法,其特征在于,所述指令偏移数据还包括所述指令偏移数据所在数据子区域的标识信息。
5.根据权利要求4所述的方法,其特征在于,所述数据子区域的标识信息包括:所述数据子区域对应的方法的方法参数数量,和/或,所述数据子区域的索引。
6.根据权利要求1~5任一项所述的方法,其特征在于,所述调试信息数据区域的数据子区域划分方式为:
将所述应用程序的各个方法按照各自的指令总长度进行排序;
对所述各个方法构成的排序序列进行至少一次分组,直至每组方法的指令总长度最大值的求和结果不大于所述调制信息数据区域的长度,同一次得到的每组方法数量相同,每次分组的分组数量递减;
针对每次分组,查找每组方法的指令总长度最大值并求和,将求和结果与所述调试信息数据区域的长度比较,若求和结果不大于所述调试信息数据区域的长度,则按照各组方法的指令总长度最大值将所述调试信息数据区域分为与本次分组数量相同的数据子区域。
7.一种文件处理装置,其特征在于,所述文件包括应用程序的第一目标文件和所述应用程序对应的第二目标文件,所述第一目标文件的数据区域至少包括调试信息数据区域,所述第一目标文件的数据内容至少包括目标映射关系数据,所述调试信息数据区域被划分为多个数据子区域,所述装置包括:
指令偏移数据写入模块,用于至少根据所述应用程序的各个方法各自的指令总长度,为所述各个方法分别指定所述数据子区域,并将所述各个方法的指令偏移数据写入方法对应的数据子区域的目标位置,所述指令偏移数据包括指令偏移地址,每个数据子区域对应所述应用程序的一个或多个方法,且每个数据子区域的长度不小于本数据子区域对应的各个方法各自的指令总长度,所述目标位置为指令偏移数据中包括的指令偏移地址指向的位置;
映射关系数据读取模块,用于从所述第一目标文件中读取目标映射关系数据,所述目标映射关系数据包括所述各个方法的指令偏移地址与所述应用程序的源代码行号的映射关系数据;
目标映射关系数据转移模块,用于将所述目标映射关系数据保存到所述应用程序对应的第二目标文件中,并从所述第一目标文件中删除所述目标映射关系数据。
8.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述...
【专利技术属性】
技术研发人员:杨志谦,
申请(专利权)人:北京字节跳动网络技术有限公司,
类型:发明
国别省市:北京;11
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。