一种Android程序调试方法和装置的制造方法

文档序号:10534708阅读:180来源:国知局
一种Android程序调试方法和装置的制造方法
【专利摘要】本发明公开一种Android程序调试方法和装置,方法包括:读取回溯信息步骤,读取包括至少一条回溯信息的回溯信息文件,将回溯信息读取到内存中,所述回溯信息文件在所述Android程序出现错误时生成;解析步骤,循环调用Android的解析指令去解析所述回溯信息,每一次调用所述解析指令解析一条所述回溯信息,解析得到关于至少一个出错函数的出错函数信息;打印步骤,将所述出错函数信息打印在显示终端。装置包括:读取回溯信息模块、解析步骤模块和打印步骤模块。通过循环调用Android的解析指令去解析回溯信息,提高了解析回溯信息的效率,也不需要搭建复杂的调试环境。
【专利说明】
一种Android程序调试方法和装置
技术领域
[0001]本发明涉及程序调试领域,尤其设置一种Android程序调试方法和装置。
【背景技术】
[0002]安卓应用程序段错误(Fatal signal 11)是Android开发中常出现的错误,在Android里面,这个致命信号代表了内存错误,意思是程序访问了不该访问到的内存。安卓应用程序段错误发生的具体场景各不相同,导致安卓应用程序段错误发生的原因包含如下列举的原因:1)由多线程同时操作导致内存无法释放;2)由于分配了一段内存后没有释放掉;3)因为数组越界导致的。而定位该错误的原因,需要找到出错的代码所在的行,理清函数调用关系。
[0003]现有技术一般采用两种方式找到出错代码和函数调用关系:
[0004]1.通过Android代码目录下的调试命令(arm-eabi_addr21ine)手动逐条解析发生安卓应用程序段错误时的回溯信息(backtrace),找到函数的调用关系,然而使用该方法时当调用层级比较深时,显然这样手动逐条解析的方式效率比较低。
[0005]2.使用⑶B调试工具调试,通过⑶B工具根据回溯信息(backtrace)来追踪代码的调用逻辑,但是使用该方法,需要搭建GDB的调试环境(gdbserver),而搭建GDB的调试环境又比较复杂。
[0006]所以,有必要提出一种高效且不需要额外安装调试环境的调试方法去调试安卓应用程序段错误。

【发明内容】

[0007]基于以上问题,本发明提出一种Andro i d程序调试方法,通过自动循环调用Android的解析指令,得到出错函数的出错函数信息的方式提供了一种高效简单的Android程序调试方法。本发明还提出一种Android程序调试装置。
[0008]—方面,本发明提出一种Android程序调试方法,包括:
[0009]读取回溯信息步骤,读取包括至少一条回溯信息的回溯信息文件,将回溯信息读取到内存中,所述回溯信息文件在所述Android程序出现错误时生成;
[0010]解析步骤,循环调用Android的解析指令去解析所述回溯信息,每一次调用所述解析指令解析一条所述回溯信息,解析得到关于至少一个出错函数的出错函数信息;
[0011]打印步骤,将所述出错函数信息打印在显示终端。
[0012]优选地,在所述读取回溯信息步骤之前,还包括:获取解析指令存储路径步骤,获取所述解析指令的存储路径,在所述解析步骤中,根据所述解析指令的所述存储路径循环调用所述解析指令。
[0013]优选地,所述回溯信息包括符号信息,在所述解析步骤之前,还包括:读取符号文件步骤,读取符号文件到内存,若所述解析步骤中的所述解析指令解析所述回溯信息的符号信息时,则在所述内存的所述符号文件中找到所述符号信息对应的解析。
[0014]优选地,所述解析步骤中,所述出错函数信息至少包括:所述出错函数的所属文件的文件名和所述出错函数的函数名。
[0015]优选地,所述出错函数信息还包括:所述出错函数在所属文件中的行数。
[0016]优选地,所述出错函数信息还包括:两个以上的所述出错函数的调用关系,所述调用关系根据两个以上的所述出错函数的所属文件的文件名和所述出错函数的函数名得到。
[0017]另一方面,本发明提出一种Android程序调试装置,包括:
[0018]读取回溯信息模块,用于读取包括至少一条回溯信息的回溯信息文件,将回溯信息读取到内存中,所述回溯信息文件在所述Android程序出现错误时生成;
[0019]解析模块,用于循环调用Android的解析指令去解析所述回溯信息,每一次调用所述解析指令解析一条所述回溯信息,解析得到关于至少一个出错函数的出错函数信息;
[0020]打印模块,用于将所述出错函数信息打印在显示终端。
[0021]优选地,还包括:获取解析指令存储路径模块,用于获取所述解析指令的存储路径,在所述解析模块中,根据所述解析指令的所述存储路径循环调用所述解析指令。
[0022]优选地,所述回溯信息包括符号信息,所述Android程序调试装置还包括:读取符号文件模块,用于读取符号文件到内存,若所述解析模块中的所述解析指令解析所述回溯信息的符号信息时,则在所述内存的所述符号文件中找到所述符号信息对应的解析。
[0023]优选地,所述解析模块中,所述出错函数信息至少包括:所述出错函数的所属文件的文件名和所述出错函数的函数名。
[0024]优选地,所述出错函数信息还包括:所述出错函数在所属文件中的行数。
[0025]优选地,所述出错函数信息还包括:两个以上的所述出错函数的调用关系,所述调用关系根据两个以上的所述出错函数的所属文件的文件名和所述出错函数的函数名得到。
[0026]采用上述技术方案,具有如下有益效果:
[0027]通过读取Android程序出现错误时生成的回溯信息文件,循环调用Android的解析指令去解析回溯信息,解析得到出错函数的出错函数信息,并将出错函数信息打印在显示终端的方式使利用Android的解析指令去解析回溯信息的效率大大提高,无需手动调用Android的解析指令,且无需安装复杂的调试环境。
【附图说明】
[0028]图1是根据本发明一个实施例的Android程序调试方法的流程图;
[0029]图2是根据本发明另一个实施例的Android程序调试方法的流程图;
[0030]图3是根据本发明另一个实施例的Android程序调试方法中回溯文件示意图;
[0031]图4是根据本发明另一个实施例的Android程序调试装置的框图。
【具体实施方式】
[0032]为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0033]参照图1,本发明提出一种Android程序调试方法,包括:读取回溯信息步骤S001,读取包括至少一条回溯信息的回溯信息文件,将回溯信息读取到内存中,回溯信息文件在Android程序出现错误时生成;解析步骤S002,循环调用Android的解析指令去解析回溯信息,每一次调用解析指令解析一条回溯信息,解析得到关于至少一个出错函数的出错函数信息;打印步骤S003,将出错函数信息打印在显示终端。
[0034]步骤SOOI中的回溯信息文件由用户手动或者Andro i d系统自动将回溯信息(backtrace)保存到文件中,如保存到后缀格式为.txt的error, txt中。回溯信息为Android程序出现运行失败或出错时,Android系统通过Android设备自身或者Android设备连接的串口打印的出错信息,用户通过该信息去定位出错的函数及出错原因。
[0035]步骤S002中采用循环调用Android的解析指令的方式逐条解析回溯信息。如安卓应用程序段错误(Fatal signal 11)出现时表示内存出错,通过Android设备打印回溯信息,对应解析该回溯信息的Android解析命令为arm-eabi_addr21ine,循环调用arm-eab1-addr2line去解析回溯信息。
[0036]步骤S003中,将最终解析出的出错函数信息打印出来,出错函数信息可包括以下一种或几种组合:出错函数的所属文件的文件名、出错函数的函数名、出错函数在所属文件中的行数及两个以上的所述出错函数的调用关系。Android程序调试方法写在一个脚本文件中,如python脚本文件,利用Linux执行该脚本文件即可实现以上各步骤。
[0037]通过读取Android程序出现错误时生成的回溯信息文件,循环调用Android的解析指令去解析回溯信息,解析得到出错函数的出错函数信息,并将出错函数信息打印在显示终端的方式使利用Android的解析指令去解析回溯信息的效率大大提高,无需手动调用Android的解析指令,且无需安装复杂的调试环境。
[0038]在其中的一个实施例中,在读取回溯信息步骤之前,还包括:获取解析指令存储路径步骤,获取解析指令的存储路径,在解析步骤中,根据解析指令的存储路径循环调用解析指令。An droid系统的解析指令如arm-eabi_addr21ine放置在Android固定的目录下,想要使用该解析指令需要先获取其存储路径,找到存储路径后,将存储路径与解析指令合成为一个调用指令,通过循环调用该调用指令使Android系统循环执行解析指令。举例如存储路径为/system/bin/,将存储路径与解析指令合成为/system/bin/arm-eabi_addr21ine,Android系统通过循环调用/system/bin/arm-eabi_addr21ine即可实现循环执行解析指令 arm-eabi_addr21ine0
[0039]在其中的一个实施例中,回溯信息包括符号信息,在解析步骤之前,还包括:读取符号文件步骤,读取符号文件到内存,若解析步骤中的解析指令解析回溯信息的符号信息时,则在内存的符号文件中找到符号信息对应的解析。参照图3,回溯信息举例如图3,一般回溯信息会包含符号信息例如301所示的“#”,当解析指令遇到“#”符号时,会去符号文件中找到该符号对应的符号解析,若符号文件中定义了该符号“ # ”对应地址编号前缀,则解析指令会根据该符号的释义去处理该符号及该符号后面的数字“01”,这样才能对“#”及其后面的“01”进行正确的解析。通过使用Android系统提供的符号文件去解析符号信息,这样才能进行完整正确的解析。
[0040]另外还可以通过读取符号文件的存储路径到内存中,当解析指令解析符号信息时,根据存储路径打开所述符号文件,找到所述符号信息对应的解析的方式来实现符号信息的解析。如符号文件的名字为“symbol, txt”,它的存储路径为“/system/symbol/”,贝Ij根据该存储路径找到该符号文件。
[0041]在其中的一个实施例中,解析步骤中,出错函数信息至少包括:出错函数的所属文件的文件名和出错函数的函数名。出错函数信息需要包括出错函数的所属文件的文件名和出错函数的函数名,才能够找到出错函数的位置。如图3所示,^/system/1ib/hw/camera.meson6.so”中的“/system/lib/hw/”代表出错函数所属文件的存储路径,“camera.meson6.so”代表出错函数所属文件的文件名,“previewThreadO ”代表出错函数。
[0042]在其中的一个实施例中,出错函数信息还包括:出错函数在所属文件中的行数。通过出错函数在所属文件中的行数更方便定位出错函数的位置。如图3所示,^previewThread O +490”中的“490”代表出错函数的位置。
[0043]在其中的一个实施例中,出错函数信息还包括:两个以上的出错函数的调用关系,调用关系根据两个以上的出错函数的所属文件的文件名和出错函数的函数名得到。打印两个以上的出错函数的调用关系,让用户可以清晰的看到函数之间的调用关系,更方便定位Andro i d程序出错原因及位置。举例如得到的出错函数的调用关系为:CameraSnap O ->CameraPreviewO->CameraAdjustO。
[0044]参照图2,作为本发明的最佳实施例,通过读取回溯信息,循环调用Android的解析指令去解析回溯信息的方式,最终将出错函数调用关系打印出来。步骤S201,获取Android的解析指令(arm-eabi_addr21ine)的存储路径/system/bin/,将存储路径/system/bin/与arm-eabi_addr21ine合并为一个调用指令。步骤S202,读取符号文件“symbol, txt”的存储位置“/system/symbol/”,根据存储位置和符号文件名读取符号文件的内容到内存。步骤S203,读取回溯信息(backtrace)到内存。步骤S204,调用解析指令去逐条解析回溯信息,参照图3,例如解析回溯信息时遇到了符号信息“#”,此时根据符号文件“symbol, txt”的保存地址“/system/symbol/”在内存中找到符号文件“/system/symbol/”,得到符号信息对应的解析为地址编号前缀,根据该解析读取后面的数字,得到正确的解析结果。步骤S205,重复S204步骤,直至回溯信息被完全解析完毕。步骤S206,将解析出的出错函数信息打印在显示终端上。步骤S207,同时将多个出错函数之间的调用关系打印在显示终端上,出错函数信息与多个出错函数之前的调用关系可切换显示。显示终端如手机、PC等。出错函数信息包括出错函数所属文件的文件名、出错函数的函数名及出错函数在所属文件中的行数;同时打印多个出错函数的调用关系。
[0045]参照图4,本发明还提出一种Android程序调试装置,包括:读取回溯信息模块401,用于读取包括至少一条回溯信息的回溯信息文件,将回溯信息读取到内存中,回溯信息文件在Android程序出现错误时生成;解析模块402,用于循环调用Android的解析指令去解析回溯信息,每一次调用所述解析指令解析一条回溯信息,解析得到关于至少一个出错函数的出错函数信息;打印模块403,用于将出错函数信息打印在显示终端。
[0046]在其中的一个实施例中,还包括:获取解析指令存储路径模块,用于获取解析指令的存储路径,在解析模块402中,根据解析指令的存储路径循环调用解析指令。
[0047]在其中的一个实施例中,回溯信息包括符号信息,Android程序调试装置还包括:读取符号文件模块,用于读取符号文件到内存,若解析模块402中的解析指令解析回溯信息的符号信息时,则在内存的符号文件中找到符号信息对应的解析。
[0048]在其中的一个实施例中,解析模块402中,出错函数信息至少包括:出错函数的所属文件的文件名和出错函数的函数名。
[0049]在其中的一个实施例中,出错函数信息还包括:出错函数在所属文件中的行数。
[0050]在其中的一个实施例中,出错函数信息还包括:两个以上的出错函数的调用关系,调用关系根据两个以上的出错函数的所属文件的文件名和出错函数的函数名得到。
[0051]以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
[0052]通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如R0M/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
[0053]最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
【主权项】
1.一种Android程序调试方法,其特征在于,包括: 读取回溯信息步骤,读取包括至少一条回溯信息的回溯信息文件,将回溯信息读取到内存中,所述回溯信息文件在所述Android程序出现错误时生成; 解析步骤,循环调用Android的解析指令去解析所述回溯信息,每一次调用所述解析指令解析一条所述回溯信息,解析得到关于至少一个出错函数的出错函数信息; 打印步骤,将所述出错函数信息打印在显示终端。2.根据权利要求1所述的Android程序调试方法,其特征在于,在所述读取回溯信息步骤之前,还包括:获取解析指令存储路径步骤,获取所述解析指令的存储路径,在所述解析步骤中,根据所述解析指令的所述存储路径循环调用所述解析指令。3.根据权利要求1所述的Android程序调试方法,其特征在于,所述回溯信息包括符号信息,在所述解析步骤之前,还包括:读取符号文件步骤,读取符号文件到内存,若所述解析步骤中的所述解析指令解析所述回溯信息的符号信息时,则在所述内存的所述符号文件中找到所述符号信息对应的解析。4.根据权利要求1所述的Android程序调试方法,其特征在于,所述解析步骤中,所述出错函数信息至少包括:所述出错函数的所属文件的文件名和所述出错函数的函数名。5.根据权利要求4所述的Android程序调试方法,其特征在于,所述出错函数信息还包括:所述出错函数在所属文件中的行数。6.根据权利要求4所述的Android程序调试方法,其特征在于,所述出错函数信息还包括:两个以上的所述出错函数的调用关系,所述调用关系根据两个以上的所述出错函数的所属文件的文件名和所述出错函数的函数名得到。7.一种Android程序调试装置,其特征在于,包括: 读取回溯信息模块,用于读取包括至少一条回溯信息的回溯信息文件,将回溯信息读取到内存中,所述回溯信息文件在所述Android程序出现错误时生成; 解析模块,用于循环调用Android的解析指令去解析所述回溯信息,每一次调用所述解析指令解析一条所述回溯信息,解析得到关于至少一个出错函数的出错函数信息; 打印模块,用于将所述出错函数信息打印在显示终端。8.根据权利要求7所述的Android程序调试装置,其特征在于,还包括:获取解析指令存储路径模块,用于获取所述解析指令的存储路径,在所述解析模块中,根据所述解析指令的所述存储路径循环调用所述解析指令。9.根据权利要求7所述的Android程序调试装置,其特征在于,所述回溯信息包括符号信息,所述Android程序调试装置还包括:读取符号文件模块,用于读取符号文件到内存,若所述解析模块中的所述解析指令解析所述回溯信息的符号信息时,则在所述内存的所述符号文件中找到所述符号信息对应的解析。10.根据权利要求7所述的Android程序调试装置,其特征在于,所述解析模块中,所述出错函数信息至少包括:所述出错函数的所属文件的文件名和所述出错函数的函数名。11.根据权利要求10所述的Android程序调试装置,其特征在于,所述出错函数信息还包括:所述出错函数在所属文件中的行数。12.根据权利要求10所述的Android程序调试装置,其特征在于,所述出错函数信息还包括:两个以上的所述出错函数的调用关系,所述调用关系根据两个以上的所述出错函数 的所属文件的文件名和所述出错函数的函数名得到。
【文档编号】G06F11/36GK105893240SQ201510812765
【公开日】2016年8月24日
【申请日】2015年11月20日
【发明人】董森林
【申请人】乐视致新电子科技(天津)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1