CN116069612A - 一种异常定位方法、装置和电子设备 - Google Patents
一种异常定位方法、装置和电子设备 Download PDFInfo
- Publication number
- CN116069612A CN116069612A CN202111277702.0A CN202111277702A CN116069612A CN 116069612 A CN116069612 A CN 116069612A CN 202111277702 A CN202111277702 A CN 202111277702A CN 116069612 A CN116069612 A CN 116069612A
- Authority
- CN
- China
- Prior art keywords
- application program
- function
- information
- running track
- track information
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3644—Software debugging by instrumenting at runtime
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Software Systems (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明实施例提供了一种异常定位方法、装置和电子设备,在应用程序中***预设插桩代码,其中,所述方法包括:在所述应用程序运行时基于所述预设插桩代码记录函数运行轨迹信息;在所述应用程序出现异常时获取所述应用程序的崩溃堆栈信息;基于所述函数运行轨迹信息和所述崩溃堆栈信息对所述应用程序进行异常定位。本发明实施例基于在应用程序中预设插桩代码来记录函数运行轨迹信息,并且在应用程序异常时获取应用程序的崩溃堆栈信息,结合函数运行轨迹信息和崩溃堆栈信息可以对应用程序精确进行异常定位,进而可以根据异常定位的结果解决应用程序的异常问题。
Description
技术领域
本发明实施例涉及互联网技术领域,特别是涉及一种异常定位方法、装置和电子设备。
背景技术
在应用程序在运行过程中,有时候会出现一些异常的情况,例如程序崩溃,或者出现卡顿,或者无响应等等,影响用户体验,甚至影响应用程序的正常运行,因此开发人员需要对应用程序进行异常信息采样,以对应用程序进行异常定位,进而解决应用程序程序的异常问题。
在应用程序程序崩溃时,通常***会输出当前的崩溃堆栈信息,在崩溃堆栈信息中包含了崩溃时各种环境信息,然而,仅基于崩溃堆栈信息难以对应用程序精确进行异常定位。
发明内容
本发明实施例提供一种异常定位方法,以对应用程序精确进行异常定位,以解决应用程序的异常问题。
相应的,本发明实施例还提供了一种异常定位装置和一种电子设备,用以保证上述方法的实现及应用。
为了解决上述问题,本发明实施例公开了一种异常定位方法,在应用程序中***预设插桩代码,具体包括:
在所述应用程序运行时基于所述预设插桩代码记录函数运行轨迹信息;
在所述应用程序出现异常时获取所述应用程序的崩溃堆栈信息;
基于所述函数运行轨迹信息和所述崩溃堆栈信息对所述应用程序进行异常定位。
可选地,所述函数运行轨迹信息至少包括所述应用程序的函数标识、函数运行时间以及函数引用关系;所述崩溃堆栈信息包括环境信息。
可选地,还包括:获取所述应用程序的字节码文件;扫描所述字节码文件的函数,确定所述字节码文件的插桩位置;在所述字节码文件中的所述插桩位置处***预设插桩代码。
可选地,所述在所述应用程序运行时基于所述预设插桩代码记录函数运行轨迹信息,包括:在所述应用程序运行至所述的所述插桩位置时,基于所述插桩位置对应的所述预设插桩代码记录所述应用程序中的函数的函数运行轨迹信息。
可选地,所述基于所述函数运行轨迹信息和所述崩溃堆栈信息对所述应用程序进行异常定位,包括:从所述函数运行轨迹信息中确定获取所述崩溃堆栈信息时关联的目标函数运行轨迹信息;将所述应用程序中所述目标函数运行轨迹信息对应的位置,定位为所述应用程序出现异常的位置。
可选地,所述基于所述函数运行轨迹信息和所述崩溃堆栈信息对所述应用程序进行异常定位,包括:将所所述函数运行轨迹信息和所述崩溃堆栈信息上报至日志分析平台,以通过所述日志分析平台对所述应用程序进行异常定位。
本发明实施例还公开了一种异常定位装置,在应用程序中***预设插桩代码,所述装置包括:
轨迹信息获取模块,用于在所述应用程序运行时基于所述预设插桩代码记录函数运行轨迹信息;
堆栈信息获取模块,用于在所述应用程序出现异常时获取所述应用程序的崩溃堆栈信息;
异常定位模块,用于基于所述函数运行轨迹信息和所述崩溃堆栈信息对所述应用程序进行异常定位。
可选地,所述函数运行轨迹信息至少包括所述应用程序的函数标识、函数运行时间以及函数引用关系;所述崩溃堆栈信息包括环境信息。
可选地,所述装置还包括:程序插桩模块,用于获取所述应用程序的字节码文件;扫描所述字节码文件的函数,确定所述字节码文件的插桩位置;在所述字节码文件中的所述插桩位置处***预设插桩代码。
可选地,所述轨迹信息获取模块,用于在所述应用程序运行至所述的所述插桩位置时,基于所述插桩位置对应的所述预设插桩代码记录所述应用程序中的函数的函数运行轨迹信息。
可选地,所述异常定位模块,用于从所述函数运行轨迹信息中确定获取所述崩溃堆栈信息时关联的目标函数运行轨迹信息;将所述应用程序中所述目标函数运行轨迹信息对应的位置,定位为所述应用程序出现异常的位置。
可选地,所述异常定位模块,用于将所所述函数运行轨迹信息和所述崩溃堆栈信息上报至日志分析平台,以通过所述日志分析平台对所述应用程序进行异常定位。
本发明实施例还公开了一种可读存储介质,当所述存储介质中的指令由电子设备的处理器执行时,使得电子设备能够执行如本发明实施例任一所述的异常定位方法。
本发明实施例还公开了一种电子设备,包括有存储器,以及一个或者一个以上的程序,其中一个或者一个以上程序存储于存储器中,且经配置以由一个或者一个以上处理器执行所述一个或者一个以上程序包含用于进行如本发明实施例任一所述的异常定位方法。
本发明实施例包括以下优点:
本发明实施例中,在应用程序运行时,基于在应用程序中的预设插桩代码来记录函数运行轨迹信息,在应用程序出现异常时,获取应用程序的崩溃堆栈信息,基于函数运行轨迹信息和崩溃堆栈信息对应用程序进行异常定位。本发明实施例基于在应用程序中预设插桩代码来记录函数运行轨迹信息,并且在应用程序异常时获取应用程序的崩溃堆栈信息,结合函数运行轨迹信息和崩溃堆栈信息可以对应用程序精确进行异常定位,进而可以根据异常定位的结果解决应用程序的异常问题。
附图说明
图1是本发明的一种异常定位方法实施例的步骤流程图;
图2是本发明的一种异常定位方法可选实施例的步骤流程图;
图3是本发明的一种异常定位装置实施例的结构框图;
图4是根据一示例性实施例示出的一种用于异常定位的电子设备的结构框图;
图5是本发明根据另一示例性实施例示出的一种用于异常定位的电子设备的结构示意图。
具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。
在实际中,往往大部分的应用程序的异常是很难准确定位,异常往往跟终端设备的机器性能,运行环境,以及应用程序本身甚至是操作偏好等因素息息相关。一般也是从用户反馈中得到应用程序的异常,通常表述为“新版本变卡了”,“打不开”,“经常无响应”,开发人员很难基于这些描述直接定位到应用程序中异常的位置,来解决应用程序中的异常问题,虽然可以在应用程序程序崩溃时,基于***输出的当前的崩溃堆栈信息进行异常定位,然而由于崩溃堆栈信息主要是环境信息,因此仅基于崩溃堆栈信息难以对应用程序精确进行异常定位。
针对上述问题,本发明实施例提出了一种异常定位方法,通过扫描应用程序,确定在应用程序中需要***用于记录函数运行轨迹信息的预设插桩代码的位置,从而可以基于预设插桩代码记录的函数运行轨迹信息,以及应用程序崩溃时获取的崩溃堆栈信息,对应用程序精确进行异常定位解决异常问题。
参照图1,示出了本发明的一种异常定位方法实施例的步骤流程图,在应用程序中***预设插桩代码,具体可以包括如下步骤:
步骤102、在所述应用程序运行时基于所述预设插桩代码记录函数运行轨迹信息。
其中,所述函数运行轨迹信息至少包括所述应用程序的函数标识、函数运行时间以及函数引用关系。
具体地,应用程序的功能是由逻辑代码编写实现的,而每个功能可能包括多个函数(方法指令),函数是具体实现逻辑或功能的最小单元,具有名称或编号等标识,各函数之间可能存在继承、引用或调用等函数引用关系。函数运行轨迹信息中包括应用程序运行时的函数及其名称、函数运行时间、引用关系等信息。例如,函数标识包括A、B、C,函数运行时间包括10分钟、5分钟、3分钟,函数引用关系包括函数B引用函数A,函数C引用函数B。
在本发明实施例中,在应用程序运行之前,可以在应用程序中进行程序插桩处理,具体地,程序插桩处理是指在保证应用程序的原有逻辑完整性的基础上,在应用程序中***一些预设插桩代码,其中,预设插桩代码本质上来说是进行信息采集的代码段,可以是赋值语句或采集覆盖信息的函数调用等等,则在诸如智能手机、平板电脑、个人计算机等电子设备中运行应用程序时,可以基于预先***的预设插桩代码来实现想要增加的功能需求,例如,获取应用程序运行时产生的函数运行轨迹信息,用于对应用程序精确进行异常定位。
步骤104、在所述应用程序出现异常时获取所述应用程序的崩溃堆栈信息。
其中,堆栈信息可以包括环境信息。具体地,环境信息可以包括应用程序运行时的操作***、应用程序运行时的终端设备的配置信息,例如CPU、内存、显卡、硬盘等等。
在实际应用中,堆栈是一种数据项按序排列的数据结构,只能在一端(称为栈顶top)对数据项进行***和删除。终端设备的操作***会为每个应用程序(进程及线程)设置一个堆栈,在堆栈中保存有堆栈信息。在本发明实施例中,在应用程序出现异常,例如在程序崩溃(例如内存不足),或者出现卡顿(例如应用程序的界面卡顿),或者无响应(例如点击程序中的按钮无反馈)时,从应用程序的堆栈中提取出当前的堆栈信息作为崩溃堆栈信息。
步骤106、基于所述函数运行轨迹信息和所述崩溃堆栈信息对所述应用程序进行异常定位。
在应用程序出现异常时,可以从堆栈中获取到崩溃堆栈数据,此时还可以进一步获取函数运行轨迹信息,并将函数运行轨迹信息补充到崩溃堆栈信息中,从而可以基于崩溃堆栈信息和函数运行轨迹信息进行精确异常定位,从而可以更有针对性地解决应用程序的异常问题。
在上述异常定位方法中,在应用程序运行时,基于在应用程序中的预设插桩代码来记录函数运行轨迹信息,在应用程序出现异常时,获取应用程序的崩溃堆栈信息,基于函数运行轨迹信息和崩溃堆栈信息对应用程序进行异常定位。本发明实施例基于在应用程序中预设插桩代码来记录函数运行轨迹信息,并且在应用程序异常时获取应用程序的崩溃堆栈信息,结合函数运行轨迹信息和崩溃堆栈信息可以对应用程序精确进行异常定位,进而可以根据异常定位的结果解决应用程序的异常问题。
参照图2,示出了本发明的一种异常定位方法可选实施例的步骤流程图,在应用程序中***预设插桩代码,具体可以包括如下步骤:
步骤202、获取所述应用程序的字节码文件。
步骤204、扫描所述字节码文件的函数,确定所述字节码文件的插桩位置。
步骤206、在所述字节码文件中的所述插桩位置处***预设插桩代码。
其中,字节码文件(class文件)是指对应用程序的源代码进行编译后生成为字节码格式的文件,通常也称为可执行文件。
在本发明实施例中,可以利用Java字节码修改工具,在对应用程序的源代码进行编译期间收集所有生成的class文件,随后扫描出class文件中所有的函数(方法指令)进行统一的程序插桩处理。作为一个可选示例,可以在class文件中的函数的入口位置作为插桩位置,然后在插桩位置处***预设插桩代码,从而可以在应用程序运行时,根据预设插桩代码获取应用程序的函数运行轨迹信息。
可选地,可以在所有的函数的入口位置处***预设插桩代码,也可以是在一些指定的函数的入口位置处***预设插桩代码,本发明实施例对此不加以限制。其中,仅在指定的函数的入口位置处***预设插桩代码,而无需在应用程序中大量埋点的情况下,能够快速进行应用程序进行异常定位,提高异常解决效率。
步骤208、在所述应用程序运行至所述的所述插桩位置时,基于所述插桩位置对应的所述预设插桩代码记录所述应用程序中的函数的函数运行轨迹信息。
具体地,应用程序可以按照设定逻辑在终端设备中运行,其中,当应用程序运行到***预设插桩代码的插桩位置时,可以运行该插桩位置的预设插桩代码,从而得到函数的函数运行轨迹信息。例如,假设在应用程序的一函数A,处***了预设插桩代码,并且函数A引用了函数B,假设在该函数A处出现异常,那么就可以获取到该函数A的函数运行轨迹信息,具体可以包括:函数A的函数标识:A、函数A的函数引用关系。
步骤210、在所述应用程序出现异常时获取所述应用程序的崩溃堆栈信息。
步骤212、从所述函数运行轨迹信息中确定获取所述崩溃堆栈信息时关联的目标函数运行轨迹信息。
步骤214、将所述应用程序中所述目标函数运行轨迹信息对应的位置,定位为所述应用程序出现异常的位置。
在实际应用中,可以实时检测应用程序是否出现异常,其中,应用程序是否异常的规则也可以预先根据实际需求设定,例如,当应用程序中的某个函数的函数运行时间超过预设时间,例如超过1秒,则可以确定该应用程序存在异常,或者当应用程序中的某个函数的函数运行次数超过预设次数,例如超过3次,则可以确定该应用程序存在异常。
在检测到应用程序出现异常时,可以从堆栈中获取到当前的堆栈信息作为崩溃堆栈信息,并且,在从堆栈信息中获取到崩溃堆栈信息时,从函数运行轨迹信息获取到关联的目标函数运行轨迹信息,即,目标函数运行轨迹信息是应用程序出现异常时的相关的函数运行轨迹信息,因此基于目标函数运行轨迹信息可以精确定位到应用程序中函数运行存在异常的位置。例如,假设在应用程序出现异常时,确定的目标函数运行轨迹信息包括函数标识:函数x,函数引用关系:调用函数x的函数y,则可以确定该应用程序中存在异常的位置为函数x和函数y所在的位置。
在本发明的一个可选实施例中,所述步骤212、基于所述函数运行轨迹信息和所述崩溃堆栈信息对所述应用程序进行异常定位,可以包括如下步骤:
将所所述函数运行轨迹信息和所述崩溃堆栈信息上报至日志分析平台,以通过所述日志分析平台对所述应用程序进行异常定位。
在本发明实施例中,可以有终端设备根据函数运行轨迹信息和崩溃堆栈信息对应用程序进行异常定位,也可以将函数运行轨迹信息和崩溃堆栈信息对所述应用程序进行异常定位上报至日志分析平台,从而可以基于日志分析平台对应用程序进行异常定位。可选地,日志分析平台可以结合该应用程序在先上传的函数运行轨迹信息和崩溃堆栈信息,共同对应用程序进行异常定位。
在本发明实施例中,可以预置函数名单,从而可以基于函数名单来对应用程序进行异常分析。示例性地,可以设置函数白名单,在函数白名单中包括函数标识或者class文件名称,在确定目标函数运行轨迹信息时,若函数在函数白名单中则不会被视为异常,举例来说,若目标函数运行轨迹信息中存在函数A、函数B、函数C,若经分析确定函数A和函数C为异常,但是函数A在函数白名单(例如函数白名单中包括函数标识A,或者函数A是函数白名单中class文件名称对应的class文件中的函数)中,则可以仅将函数C的位置确定为应用程序存在异常的位置。类似地,也可以设置函数黑名单或者函数灰名单等等,以针对性对应用程序中进行异常定位,以更加精确进行应用程序的异常定位。
在上述异常定位方法中,在编译应用程序时,对应用程序的字节码文件进行程序插桩处理,以在***的预设插桩代码记录应用程序的函数运行轨迹信息,在应用程序出现异常时,从堆栈中获取到崩溃堆栈信息,并将函数运行轨迹信息与崩溃堆栈信息一起上报至日志分析平台,以使日志分析平台能够精确进行异常定位,进而可以更好地解决应用程序中异常位置中存在的问题。
需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明实施例并不受所描述的动作顺序的限制,因为依据本发明实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本发明实施例所必须的。
参照图3,示出了本发明的一种异常定位装置实施例的结构框图,在应用程序中***预设插桩代码,具体可以包括如下模块:
轨迹信息获取模块302,用于在所述应用程序运行时基于所述预设插桩代码记录函数运行轨迹信息;
堆栈信息获取模块304,用于在所述应用程序出现异常时获取所述应用程序的崩溃堆栈信息;
异常定位模块306,用于基于所述函数运行轨迹信息和所述崩溃堆栈信息对所述应用程序进行异常定位。
在一示例性实施例中,所述函数运行轨迹信息至少包括所述应用程序的函数标识、函数运行时间以及函数引用关系;所述崩溃堆栈信息包括环境信息。
在一示例性实施例中,所述装置还包括:程序插桩模块,用于获取所述应用程序的字节码文件;扫描所述字节码文件的函数,确定所述字节码文件的插桩位置;在所述字节码文件中的所述插桩位置处***预设插桩代码。
在一示例性实施例中,所述轨迹信息获取模块302,用于在所述应用程序运行至所述的所述插桩位置时,基于所述插桩位置对应的所述预设插桩代码记录所述应用程序中的函数的函数运行轨迹信息。
在一示例性实施例中,所述异常定位模块306,用于从所述函数运行轨迹信息中确定获取所述崩溃堆栈信息时关联的目标函数运行轨迹信息;将所述应用程序中所述目标函数运行轨迹信息对应的位置,定位为所述应用程序出现异常的位置。
在一示例性实施例中,所述异常定位模块306,用于将所所述函数运行轨迹信息和所述崩溃堆栈信息上报至日志分析平台,以通过所述日志分析平台对所述应用程序进行异常定位。
综上,本发明实施例中,在应用程序运行时,基于在应用程序中的预设插桩代码来记录函数运行轨迹信息,在应用程序出现异常时,获取应用程序的崩溃堆栈信息,基于函数运行轨迹信息和崩溃堆栈信息对应用程序进行异常定位。本发明实施例基于在应用程序中预设插桩代码来记录函数运行轨迹信息,并且在应用程序异常时获取应用程序的崩溃堆栈信息,结合函数运行轨迹信息和崩溃堆栈信息可以对应用程序精确进行异常定位,进而可以根据异常定位的结果解决应用程序的异常问题。
对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
图4是根据一示例性实施例示出的一种用于异常定位的电子设备400的结构框图。例如,电子设备400可以是移动电话,计算机,数字广播终端,消息收发设备,游戏控制台,平板设备,医疗设备,健身设备,个人数字助理、智能穿戴设备等。
参照图4,电子设备400可以包括以下一个或多个组件:处理组件402,存储器404,电力组件404,多媒体组件408,音频组件410,输入/输出(I/O)的接口412,传感器组件414,以及通信组件416。
处理组件402通常控制电子设备400的整体操作,诸如与显示,电话呼叫,数据通信,相机操作和记录操作相关联的操作。处理元件402可以包括一个或多个处理器420来执行指令,以完成上述的方法的全部或部分步骤。此外,处理组件402可以包括一个或多个模块,便于处理组件402和其他组件之间的交互。例如,处理部件402可以包括多媒体模块,以方便多媒体组件408和处理组件402之间的交互。
存储器404被配置为存储各种类型的数据以支持在设备400的操作。这些数据的示例包括用于在电子设备400上操作的任何应用程序或方法的指令,联系人数据,电话簿数据,消息,图片,视频等。存储器404可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(SRAM),电可擦除可编程只读存储器(EEPROM),可擦除可编程只读存储器(EPROM),可编程只读存储器(PROM),只读存储器(ROM),磁存储器,快闪存储器,磁盘或光盘。
电力组件404为电子设备400的各种组件提供电力。电力组件404可以包括电源管理***,一个或多个电源,及其他与为电子设备400生成、管理和分配电力相关联的组件。
多媒体组件408包括在所述电子设备400和用户之间的提供一个输出接口的屏幕。在一些实施例中,屏幕可以包括液晶显示器(LCD)和触摸面板(TP)。如果屏幕包括触摸面板,屏幕可以被实现为触摸屏,以接收来自用户的输入信号。触摸面板包括一个或多个触摸传感器以感测触摸、滑动和触摸面板上的手势。所述触摸传感器可以不仅感测触摸或滑动动作的边界,而且还检测与所述触摸或滑动操作相关的持续时间和压力。在一些实施例中,多媒体组件408包括一个前置摄像头和/或后置摄像头。当电子设备400处于操作模式,如拍摄模式或视频模式时,前置摄像头和/或后置摄像头可以接收外部的多媒体数据。每个前置摄像头和后置摄像头可以是一个固定的光学透镜***或具有焦距和光学变焦能力。
音频组件410被配置为输出和/或输入音频信号。例如,音频组件410包括一个麦克风(MIC),当电子设备400处于操作模式,如呼叫模式、记录模式和语音识别模式时,麦克风被配置为接收外部音频信号。所接收的音频信号可以被进一步存储在存储器404或经由通信组件416发送。在一些实施例中,音频组件410还包括一个扬声器,用于输出音频信号。
I/O接口412为处理组件402和***接口模块之间提供接口,上述***接口模块可以是键盘,点击轮,按钮等。这些按钮可包括但不限于:主页按钮、音量按钮、开启按钮和锁定按钮。
传感器组件414包括一个或多个传感器,用于为电子设备400提供各个方面的状态评估。例如,传感器组件414可以检测到设备400的打开/关闭状态,组件的相对定位,例如所述组件为电子设备400的显示器和小键盘,传感器组件414还可以检测电子设备400或电子设备400一个组件的位置改变,用户与电子设备400接触的存在或不存在,电子设备400方位或加速/减速和电子设备400的温度变化。传感器组件414可以包括接近传感器,被配置用来在没有任何的物理接触时检测附近物体的存在。传感器组件414还可以包括光传感器,如CMOS或CCD图像传感器,用于在成像应用中使用。在一些实施例中,该传感器组件414还可以包括加速度传感器,陀螺仪传感器,磁传感器,压力传感器或温度传感器。
通信组件414被配置为便于电子设备400和其他设备之间有线或无线方式的通信。电子设备400可以接入基于通信标准的无线网络,如WiFi,2G或3G,或它们的组合。在一个示例性实施例中,通信部件414经由广播信道接收来自外部广播管理***的广播信号或广播相关信息。在一个示例性实施例中,所述通信部件414还包括近场通信(NFC)模块,以促进短程通信。例如,在NFC模块可基于射频识别(RFID)技术,红外数据协会(IrDA)技术,超宽带(UWB)技术,蓝牙(BT)技术和其他技术来实现。
在示例性实施例中,电子设备400可以被一个或多个应用专用集成电路(ASIC)、数字信号处理器(DSP)、数字信号处理设备(DSPD)、可编程逻辑器件(PLD)、现场可编程门阵列(FPGA)、控制器、微控制器、微处理器或其他电子元件实现,用于执行上述方法。
在示例性实施例中,还提供了一种包括指令的非临时性计算机可读存储介质,例如包括指令的存储器404,上述指令可由电子设备400的处理器420执行以完成上述方法。例如,所述非临时性计算机可读存储介质可以是ROM、随机存取存储器(RAM)、CD-ROM、磁带、软盘和光数据存储设备等。
一种非临时性计算机可读存储介质,当所述存储介质中的指令由电子设备的处理器执行时,使得电子设备能够执行一种异常定位方法,所述方法包括:在所述应用程序运行时基于所述预设插桩代码记录函数运行轨迹信息;在所述应用程序出现异常时获取所述应用程序的崩溃堆栈信息;基于所述函数运行轨迹信息和所述崩溃堆栈信息对所述应用程序进行异常定位。
可选地,所述函数运行轨迹信息至少包括所述应用程序的函数标识、函数运行时间以及函数引用关系;所述崩溃堆栈信息包括环境信息。
可选地,还包括:获取所述应用程序的字节码文件;扫描所述字节码文件的函数,确定所述字节码文件的插桩位置;在所述字节码文件中的所述插桩位置处***预设插桩代码。
可选地,所述在所述应用程序运行时基于所述预设插桩代码记录函数运行轨迹信息,包括:在所述应用程序运行至所述的所述插桩位置时,基于所述插桩位置对应的所述预设插桩代码记录所述应用程序中的函数的函数运行轨迹信息。
可选地,所述基于所述函数运行轨迹信息和所述崩溃堆栈信息对所述应用程序进行异常定位,包括:从所述函数运行轨迹信息中确定获取所述崩溃堆栈信息时关联的目标函数运行轨迹信息;将所述应用程序中所述目标函数运行轨迹信息对应的位置,定位为所述应用程序出现异常的位置。
可选地,所述基于所述函数运行轨迹信息和所述崩溃堆栈信息对所述应用程序进行异常定位,包括:将所所述函数运行轨迹信息和所述崩溃堆栈信息上报至日志分析平台,以通过所述日志分析平台对所述应用程序进行异常定位。
图5是本发明根据另一示例性实施例示出的一种用于异常定位的电子设备500的结构示意图。该电子设备500可以是服务器,该服务器可因配置或性能不同而产生比较大的差异,可以包括一个或一个以***处理器(central processing units,CPU)522(例如,一个或一个以上处理器)和存储器532,一个或一个以上存储应用程序542或数据544的存储介质530(例如一个或一个以上海量存储设备)。其中,存储器532和存储介质530可以是短暂存储或持久存储。存储在存储介质530的程序可以包括一个或一个以上模块(图示没标出),每个模块可以包括对服务器中的一系列指令操作。更进一步地,中央处理器522可以设置为与存储介质530通信,在服务器上执行存储介质530中的一系列指令操作。
服务器还可以包括一个或一个以上电源526,一个或一个以上有线或无线网络接口550,一个或一个以上输入输出接口558,一个或一个以上键盘556,和/或,一个或一个以上操作***541,例如Windows ServerTM,Mac OS XTM,UnixTM,LinuxTM,FreeBSDTM等等。
一种电子设备,包括有存储器,以及一个或者一个以上的程序,其中一个或者一个以上程序存储于存储器中,且经配置以由一个或者一个以上处理器执行所述一个或者一个以上程序包含用于进行以下操作的指令:在所述应用程序运行时基于所述预设插桩代码记录函数运行轨迹信息;在所述应用程序出现异常时获取所述应用程序的崩溃堆栈信息;基于所述函数运行轨迹信息和所述崩溃堆栈信息对所述应用程序进行异常定位。
可选地,所述函数运行轨迹信息至少包括所述应用程序的函数标识、函数运行时间以及函数引用关系;所述崩溃堆栈信息包括环境信息。
可选地,还包括:获取所述应用程序的字节码文件;扫描所述字节码文件的函数,确定所述字节码文件的插桩位置;在所述字节码文件中的所述插桩位置处***预设插桩代码。
可选地,所述在所述应用程序运行时基于所述预设插桩代码记录函数运行轨迹信息,包括:在所述应用程序运行至所述的所述插桩位置时,基于所述插桩位置对应的所述预设插桩代码记录所述应用程序中的函数的函数运行轨迹信息。
可选地,所述基于所述函数运行轨迹信息和所述崩溃堆栈信息对所述应用程序进行异常定位,包括:从所述函数运行轨迹信息中确定获取所述崩溃堆栈信息时关联的目标函数运行轨迹信息;将所述应用程序中所述目标函数运行轨迹信息对应的位置,定位为所述应用程序出现异常的位置。
可选地,所述基于所述函数运行轨迹信息和所述崩溃堆栈信息对所述应用程序进行异常定位,包括:将所所述函数运行轨迹信息和所述崩溃堆栈信息上报至日志分析平台,以通过所述日志分析平台对所述应用程序进行异常定位。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
本发明实施例是参照根据本发明实施例的方法、终端设备(***)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理终端设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明实施例的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明实施例范围的所有变更和修改。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。
以上对本发明所提供的一种异常定位方法、一种异常定位装置和一种电子设备,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
Claims (14)
1.一种异常定位方法,其特征在于,在应用程序中***预设插桩代码,所述方法包括:
在所述应用程序运行时基于所述预设插桩代码记录函数运行轨迹信息;
在所述应用程序出现异常时获取所述应用程序的崩溃堆栈信息;
基于所述函数运行轨迹信息和所述崩溃堆栈信息对所述应用程序进行异常定位。
2.根据权利要求1所述的方法,其特征在于,所述函数运行轨迹信息至少包括所述应用程序的函数标识、函数运行时间以及函数引用关系;所述崩溃堆栈信息包括环境信息。
3.根据权利要求1所述的方法,其特征在于,还包括:
获取所述应用程序的字节码文件;
扫描所述字节码文件的函数,确定所述字节码文件的插桩位置;
在所述字节码文件中的所述插桩位置处***预设插桩代码。
4.根据权利要求3所述的方法,其特征在于,所述在所述应用程序运行时基于所述预设插桩代码记录函数运行轨迹信息,包括:
在所述应用程序运行至所述的所述插桩位置时,基于所述插桩位置对应的所述预设插桩代码记录所述应用程序中的函数的函数运行轨迹信息。
5.根据权利要求1所述的方法,其特征在于,所述基于所述函数运行轨迹信息和所述崩溃堆栈信息对所述应用程序进行异常定位,包括:
从所述函数运行轨迹信息中确定获取所述崩溃堆栈信息时关联的目标函数运行轨迹信息;
将所述应用程序中所述目标函数运行轨迹信息对应的位置,定位为所述应用程序出现异常的位置。
6.根据权利要求1至5任一项所述的方法,其特征在于,所述基于所述函数运行轨迹信息和所述崩溃堆栈信息对所述应用程序进行异常定位,包括:
将所所述函数运行轨迹信息和所述崩溃堆栈信息上报至日志分析平台,以通过所述日志分析平台对所述应用程序进行异常定位。
7.一种异常定位装置,其特征在于,在应用程序中***预设插桩代码,所述装置包括:
轨迹信息获取模块,用于在所述应用程序运行时基于所述预设插桩代码记录函数运行轨迹信息;
堆栈信息获取模块,用于在所述应用程序出现异常时获取所述应用程序的崩溃堆栈信息;
异常定位模块,用于基于所述函数运行轨迹信息和所述崩溃堆栈信息对所述应用程序进行异常定位。
8.根据权利要求7所述的装置,其特征在于,所述函数运行轨迹信息至少包括所述应用程序的函数标识、函数运行时间以及函数引用关系;所述崩溃堆栈信息包括环境信息。
9.根据权利要求7所述的装置,其特征在于,所述装置还包括:程序插桩模块,用于获取所述应用程序的字节码文件;扫描所述字节码文件的函数,确定所述字节码文件的插桩位置;在所述字节码文件中的所述插桩位置处***预设插桩代码。
10.根据权利要求9所述的装置,其特征在于,所述轨迹信息获取模块,用于在所述应用程序运行至所述的所述插桩位置时,基于所述插桩位置对应的所述预设插桩代码记录所述应用程序中的函数的函数运行轨迹信息。
11.根据权利要求7所述的装置,其特征在于,所述异常定位模块,用于从所述函数运行轨迹信息中确定获取所述崩溃堆栈信息时关联的目标函数运行轨迹信息;将所述应用程序中所述目标函数运行轨迹信息对应的位置,定位为所述应用程序出现异常的位置。
12.根据权利要求7至11任一项所述的装置,其特征在于,所述异常定位模块,用于将所所述函数运行轨迹信息和所述崩溃堆栈信息上报至日志分析平台,以通过所述日志分析平台对所述应用程序进行异常定位。
13.一种电子设备,其特征在于,包括有存储器,以及一个或者一个以上的程序,其中一个或者一个以上程序存储于存储器中,且经配置以由一个或者一个以上处理器执行所述一个或者一个以上程序包含用于进行如方法权利要求1-6任一所述的异常定位方法。
14.一种可读存储介质,其特征在于,当所述存储介质中的指令由电子设备的处理器执行时,使得电子设备能够执行如方法权利要求1-6任一所述的异常定位方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111277702.0A CN116069612A (zh) | 2021-10-29 | 2021-10-29 | 一种异常定位方法、装置和电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111277702.0A CN116069612A (zh) | 2021-10-29 | 2021-10-29 | 一种异常定位方法、装置和电子设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116069612A true CN116069612A (zh) | 2023-05-05 |
Family
ID=86170308
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111277702.0A Pending CN116069612A (zh) | 2021-10-29 | 2021-10-29 | 一种异常定位方法、装置和电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116069612A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116909800A (zh) * | 2023-09-13 | 2023-10-20 | 深圳市智慧城市科技发展集团有限公司 | 崩溃信息的定位方法、崩溃信息的定位装置及存储介质 |
CN117149667A (zh) * | 2023-10-31 | 2023-12-01 | 宁德时代新能源科技股份有限公司 | 异常数据获取方法、装置、设备和计算机可读存储介质 |
-
2021
- 2021-10-29 CN CN202111277702.0A patent/CN116069612A/zh active Pending
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116909800A (zh) * | 2023-09-13 | 2023-10-20 | 深圳市智慧城市科技发展集团有限公司 | 崩溃信息的定位方法、崩溃信息的定位装置及存储介质 |
CN116909800B (zh) * | 2023-09-13 | 2024-03-08 | 深圳市智慧城市科技发展集团有限公司 | 崩溃信息的定位方法、崩溃信息的定位装置及存储介质 |
CN117149667A (zh) * | 2023-10-31 | 2023-12-01 | 宁德时代新能源科技股份有限公司 | 异常数据获取方法、装置、设备和计算机可读存储介质 |
CN117149667B (zh) * | 2023-10-31 | 2024-04-05 | 宁德时代新能源科技股份有限公司 | 异常数据获取方法、装置、设备和计算机可读存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP3076646B1 (en) | Methods and devices for labeling a number | |
CN111274131A (zh) | 接口测试方法、装置、电子设备及存储介质 | |
CN116069612A (zh) | 一种异常定位方法、装置和电子设备 | |
CN111221733A (zh) | 信息处理方法、装置、移动终端及存储介质 | |
CN111538502A (zh) | 安装包的处理方法、装置、电子设备及存储介质 | |
CN111813932B (zh) | 文本数据的处理方法、分类方法、装置及可读存储介质 | |
CN111209195B (zh) | 一种生成测试用例的方法及装置 | |
CN112256563A (zh) | 安卓应用稳定性测试方法、装置、电子设备及存储介质 | |
CN106354595B (zh) | 移动终端、硬件组件状态检测方法及装置 | |
CN115982024A (zh) | 测试脚本生成方法、设备、存储介质及程序产品 | |
CN112383661B (zh) | 移动端自动化测试方法、装置、电子设备及存储介质 | |
CN111240927B (zh) | 检测程序中方法耗时的方法、装置及存储介质 | |
CN111290882B (zh) | 数据文件备份方法、数据文件备份装置及电子设备 | |
CN109947640B (zh) | 基于回归测试的核心功能覆盖度统计方法及装置 | |
CN107526683B (zh) | 应用程序功能冗余度的检测方法、装置及存储介质 | |
CN111831292A (zh) | 生成安装包的方法、装置、存储介质和电子设备 | |
CN112631695A (zh) | 一种数据校验方法、装置、电子设备及存储介质 | |
CN107193622B (zh) | 代码编译的处理方法、装置及终端 | |
CN113806227B (zh) | 一种信息处理方法、装置、电子设备及存储介质 | |
CN114554283B (zh) | 目标对象展示方法、装置、电子设备及存储介质 | |
CN112612516B (zh) | 一种代码处理方法及装置 | |
CN114020504B (zh) | 一种数据处理方法、装置、电子设备及存储介质 | |
CN113946346B (zh) | 一种数据处理方法、装置、电子设备及存储介质 | |
CN110659081B (zh) | 用于程序对象的文件处理方法、装置及电子设备 | |
CN111538486B (zh) | 布局文件嵌套层数筛查方法、装置及电子设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 40085714 Country of ref document: HK |