CN110083471A - 一种防止应用程序崩溃的方法和装置 - Google Patents

一种防止应用程序崩溃的方法和装置 Download PDF

Info

Publication number
CN110083471A
CN110083471A CN201810072575.2A CN201810072575A CN110083471A CN 110083471 A CN110083471 A CN 110083471A CN 201810072575 A CN201810072575 A CN 201810072575A CN 110083471 A CN110083471 A CN 110083471A
Authority
CN
China
Prior art keywords
function
configuration information
collapsed
function name
name
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
Application number
CN201810072575.2A
Other languages
English (en)
Inventor
檀兵
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Jingdong Century Trading Co Ltd
Beijing Jingdong Shangke Information Technology Co Ltd
Original Assignee
Beijing Jingdong Century Trading Co Ltd
Beijing Jingdong Shangke Information Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beijing Jingdong Century Trading Co Ltd, Beijing Jingdong Shangke Information Technology Co Ltd filed Critical Beijing Jingdong Century Trading Co Ltd
Priority to CN201810072575.2A priority Critical patent/CN110083471A/zh
Publication of CN110083471A publication Critical patent/CN110083471A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0793Remedial or corrective actions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3003Monitoring arrangements specially adapted to the computing system or computing system component being monitored
    • G06F11/302Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a software system

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Quality & Reliability (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Stored Programmes (AREA)

Abstract

本发明公开了一种防止应用程序崩溃的方法和装置,涉及计算机技术领域。该方法的一具体实施方式包括:获取已发生崩溃的函数的配置信息;其中,所述配置信息包括已发生崩溃的函数名称;当在应用程序中调用函数时,判断所述配置信息中是否包括被调用的函数名称;如果所述配置信息中包括所述被调用的函数名称,则终止执行所述函数。该实施方式中,客户端从服务端获取包括已发生崩溃的函数名称的配置信息,在调用某个函数时,首先判断配置信息中是否有该函数名称,如果有该函数名称,则终止执行该函数。通过上述方式,禁止了导致崩溃的函数的执行,进而防止应用程序的崩溃。

Description

一种防止应用程序崩溃的方法和装置
技术领域
本发明涉及计算机领域,尤其涉及一种防止应用程序崩溃的方法和装置。
背景技术
应用程序的每个功能都是由多个函数串联起来实现的,如果函数实现错误会导致应用程序崩溃。比如,我们使用一款拍照应用程序,在点击了拍照按钮后,需要由应用程序的底层逻辑完成以下三个拍照功能,一是获取摄像头的原始图像,二是对原始图像进行美化,三是把完成美化的图像保存到本地。如果第二个功能在实现时,调用了高版本系统的API(Application Programming Interface,应用程序接口)来美化原始图像,就会导致该应用程序发生崩溃。
现有技术中,防止应用崩溃有两种实现方式,方式一:利用Runtime(运行时)的Hook(钩子)函数给某个函数前面添加执行逻辑;方式二:通过热修复的方式修复崩溃,即在发版后通过下发可执行代码的方式替换掉原来的函数。
在实现本发明过程中,发明人发现现有技术中至少存在如下问题:方式一需要预先知道哪些函数可能出现崩溃,但是应用程序的源程序中有很多函数,无法预知所有可能出现崩溃的函数,导致会有遗漏。方式二虽然能够防止应用程序崩溃,且能够修复函数实现逻辑,但是应用商店禁止该行为,比如苹果应用商店,如果被发现通过热修复的方式修复崩溃,该应用程序会被下架。
发明内容
有鉴于此,本发明实施例提供一种防止应用程序崩溃的方法和装置。该方法中,客户端从服务端获取包括已发生崩溃的函数名称的配置信息,在调用某个函数时,首先判断配置信息中是否有该函数名称,如果有该函数名称,则终止执行该函数。通过上述方式,禁止导致崩溃的函数执行,进而防止应用程序的崩溃。
实现上述目的,根据本发明实施例的一个方面,提供了一种防止应用程序崩溃的方法。
本发明实施例的一种防止应用程序崩溃的方法,包括:获取已发生崩溃的函数的配置信息,其中,所述配置信息包括已发生崩溃的函数名称;当在应用程序中调用函数时,判断所述配置信息中是否包括被调用的函数名称;如果所述配置信息中包括所述被调用的函数名称,则终止执行所述函数。
可选地,所述判断所述配置信息中是否包括被调用的函数名称,包括:遍历所述配置信息中的每一项数据,以获取所有所述已发生崩溃的函数名称;获取当前被调用的函数名称,判断所述被调用的函数名称与所述已发生崩溃的函数名称是否相同。
可选地,所述配置信息的存储格式为数组,数组中的每一项数据均为键值对形式,键包括所述已发生崩溃的函数以及所述函数执行所需最低系统版本,所述键对应的值包括所述已发生崩溃的函数名称以及所述函数执行所需最低系统版本号;所述遍历所述配置信息中的每一项数据的步骤之后以及所述判断所述被调用的函数名称与所述已发生崩溃的函数名称是否相同的步骤之前,还包括:获取所述函数执行所需最低系统版本号以及当前系统版本号;所述如果所述配置信息中包括所述被调用的函数名称的步骤之后,以及所述终止执行所述函数的步骤之前,还包括:确认所述当前系统版本号小于所述函数执行所需最低系统版本号。
可选地,所述获取已发生崩溃的函数的配置信息的步骤之前,还包括:分析所述应用程序的源程序的抽象语法树,以获取所述源程序中的所有函数;通过编译前端Clang的Rewriter类,将防止应用程序崩溃的执行程序分别插入到所述源程序的每个函数中;其中,所述防止应用程序崩溃的执行程序包括:判断所述配置信息中是否包括被调用的函数名称;如果所述配置信息中包括所述被调用的函数名称,则终止执行所述函数。
为实现上述目的,根据本发明实施例的一个方面,提供了一种防止应用程序崩溃的装置。
本发明实施例的一种防止应用程序崩溃的装置,包括:获取模块,用于获取已发生崩溃的函数的配置信息,其中,所述配置信息包括已发生崩溃的函数名称;判断模块,用于当在应用程序中调用函数时,判断所述配置信息中是否包括被调用的函数名称;终止模块,用于如果所述配置信息中包括所述被调用的函数名称,则终止执行所述函数。
可选地,所述判断模块,还用于:遍历所述配置信息中的每一项数据,以获取所有所述已发生崩溃的函数名称;获取当前被调用的函数名称,判断所述被调用的函数名称与所述已发生崩溃的函数名称是否相同。
可选地,所述配置信息的存储格式为数组,数组中的每一项数据均为键值对形式,键包括所述已发生崩溃的函数以及所述函数执行所需最低系统版本,所述键对应的值包括所述已发生崩溃的函数名称以及所述函数执行所需最低系统版本号;所述装置还包括:版本号获取模块,用于获取所述函数执行所需最低系统版本号以及当前系统版本号;所述装置还包括:确认模块,用于确认所述当前系统版本号小于所述函数执行所需最低系统版本号。
可选地,所述装置还包括:插入模块,用于分析所述应用程序的源程序的抽象语法树,以获取所述源程序中的所有函数;以及通过编译前端Clang的Rewriter类,将防止应用程序崩溃的执行程序分别插入到所述源程序的每个函数中;其中,所述防止应用程序崩溃的执行程序包括:判断所述配置信息中是否包括被调用的函数名称;如果所述配置信息中包括所述被调用的函数名称,则终止执行所述函数。
为实现上述目的,根据本发明实施例的再一方面,提供了一种电子设备。
本发明实施例的一种电子设备,包括:一个或多个处理器;存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现本发明实施例的一种防止应用程序崩溃的方法。
为实现上述目的,根据本发明实施例的再一方面,提供了一种计算机可读介质。
本发明实施例的一种计算机可读介质,其上存储有计算机程序,所述程序被处理器执行时实现本发明实施例的一种防止应用程序崩溃的方法。
上述发明中的一个实施例具有如下优点或有益效果:通过从服务端获取包括已发生崩溃的函数名称的配置信息,在调用某个函数时,首先判断配置信息中是否有该函数名称,如果有,就终止执行该函数的方式,禁止导致崩溃的函数执行,进而防止应用程序崩溃;通过判断版本号,避免了由于调用高版本API导致的应用程序崩溃;通过编译前端Clang(Clang是C语言、C++、Objective-C、Objective-C++语言的轻量级编译前端),在编译前在每个函数中插入防止应用程序崩溃的执行程序,相当于自己编写的执行程序,既避免了被下架风险,又不会遗漏,而且避免了重复劳动、降低了插入出错的风险。
上述的非惯用的可选方式所具有的进一步效果将在下文中结合具体实施方式加以说明。
附图说明
附图用于更好地理解本发明,不构成对本发明的不当限定。其中:
图1是根据本发明实施例的防止应用程序崩溃的方法的主要步骤的示意图;
图2是根据本发明实施例的防止应用程序崩溃的方法的主要流程示意图;
图3是根据本发明实施例的防止应用程序崩溃的装置的主要模块的示意图;
图4是本发明实施例可以应用于其中的示例性系统架构图;
图5是适用于来实现本发明实施例的电子设备的计算机装置的结构示意图。
具体实施方式
以下结合附图对本发明的示范性实施例做出说明,其中包括本发明实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本发明的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
图1是根据本发明实施例的防止应用程序崩溃的方法的主要步骤的示意图。如图1所示,本发明实施例的防止应用程序崩溃的方法,主要包括如下步骤:
步骤S101:获取已发生崩溃的函数的配置信息;其中,所述配置信息包括已发生崩溃的函数名称。客户端向服务端发送配置信息请求,服务端将根据崩溃堆栈信息生成的配置信息反馈至客户端。该配置信息的具体内容中必须包括已发生崩溃的函数名称,其余可由用户自定义设置,比如如果服务端将根据崩溃堆栈信息分析出该崩溃是由于调用高版本API导致的,那么配置信息中还可以包括该函数执行所需的最低系统版本。
步骤S102:当在应用程序中调用函数时,判断所述配置信息中是否包括被调用的函数名称。具体判断过程为:首先遍历所述配置信息中的每一项数据,以获取所有所述已发生崩溃的函数名称;然后获取当前被调用的函数名称,判断所述被调用的函数名称与所述已发生崩溃的函数名称是否相同。
步骤S103:如果所述配置信息中包括所述被调用的函数名称,则终止执行所述函数。通过Return语句终止执行该函数。
图2是根据本发明实施例的防止应用程序崩溃的方法的主要流程示意图。如图2所示,本发明实施例的防止应用程序崩溃的方法,可适用于IOS操作系统,主要包括以下步骤:
步骤S201:客户端在应用程序发生崩溃后,收集崩溃堆栈信息并上传至服务端。实施例中,客户端通过KSCrash或者PLCrashReporter收集崩溃堆栈信息并上传至服务端。其中,KSCrash是一个开源的第三方框架,可以将用户的崩溃日志以邮件的形式发给某个人或者某个服务器;PLCrashReporter是用来收集崩溃日志的开源框架。
步骤S202:服务端接收到来自客户端的崩溃堆栈信息后,根据所述崩溃堆栈信息生成配置信息。服务端将所述崩溃堆栈信息进行符号化处理后即可得出发生崩溃的函数名称和发生崩溃的代码行数,对符号化处理后的崩溃堆栈信息进行分析即可得出崩溃原因。依据得出的发生崩溃的函数名称和分析出的崩溃原因(比如调用高版本API、未判断是否有硬件资源等),结合用户需求(比如是否提示用户、提示信息等),即可生成配置信息。实施例中,针对调用高版本API导致的崩溃,所述配置信息中可以包括已发生崩溃的函数名称、函数执行所需的最低系统版本、崩溃原因、是否需要提示用户、提示信息等,其中,已发生崩溃的函数名称是配置信息中必须包括的,其他是可选的。
在一优选的实施例中,所述配置信息以数组格式存储,数组中的每一项数据均为键值对形式,具体可以如下:
该配置信息中的键包括已发生崩溃的类、已发生崩溃的函数(本申请中函数跟方法可以替换)、函数执行所需最低系统版本、函数执行所需最高系统版本以及函数执行需要依赖的硬件资源,所述键对应的值包括已发生崩溃的类名、已发生崩溃的函数名称、函数执行所需最低系统版本号、函数执行所需最高系统版本号以及需要或者不需要依赖硬件资源。可以用1表示需要依赖此硬件资源,用0表示不需要依赖此硬件资源。
步骤S203:客户端向服务端发送配置信息拉取请求,以获取所述配置信息。客户端向服务端发送配置信息拉取请求的时机可以是应用程序启动时,也可以是应用程序从后台切换到前台。
步骤S204:当在应用程序中调用函数时,客户端判断所述配置信息中是否包括被调用的函数名称,如果所述配置信息中包括所述被调用的函数名称,则终止执行所述函数;否则,继续执行所述函数。该步骤中“客户端判断所述配置信息中是否包括被调用的函数名称,如果所述配置信息中包括所述被调用的函数名称,则终止执行所述函数;否则,继续执行所述函数”用来防止应用程序崩溃。在一优选的实施例中,客户端将上述防止应用程序崩溃的执行程序预先插入到应用程序的源程序的每个函数中。具体插入过程为:
(1)分析所述应用程序的源程序的抽象语法树,以获取所述源程序中的所有函数。在一优选的实施例中,通过RecursiveASTVisitor类分析源程序对应的抽象语法树(Abstract Syntax Tree,AST),以找到源程序中的每个函数。其中,RecursiveASTVisitor类是Clang提供的访问AST的一个接口。
(2)通过Clang的Rewriter类,将上述执行程序分别插入到所述源程序的每个函数的第一行。Objective-C是IOS操作系统中常用的编程语言,其使用编译前端Clang和编译后端LLVM(Low Level Virtual Machine,是架构编译器的框架系统)来生成可执行文件,故可以在编译成可执行文件前通过Rewriter类重写所有的函数,以在所有函数前插入上述执行程序。通过这种方式,使得客户端的应用程序在执行某个函数时,先执行此程序。
在另一优选的实施例中,结合常见的导致应用程序崩溃的崩溃原因生成所述防止应用程序崩溃的执行程序。下面以防止由于调用高版本API导致应用程序崩溃为例,对所述防止应用程序崩溃的执行程序的执行过程进行详细说明:
(1)遍历所述配置信息中的每一项数据,以获取所有所述已发生崩溃的类名和已发生崩溃的函数名称;
(2)获取已发生崩溃的函数执行所需最低系统版本号以及当前系统版本号;
(3)获取当前被调用的类名和当前被调用的函数名称,判断所述当前被调用的类名与获取的所述已发生崩溃的类名是否相同,所述当前被调用的函数名称与获取的所述已发生崩溃的函数名称是否相同;
(4)如果当前被调用的类名与已发生崩溃的类名相同,并且当前被调用的函数名称与已发生崩溃的函数名称也相同,则判断所述当前系统版本号是否小于所述函数执行所需最低系统版本号;
(5)如果所述当前系统版本号小于所述函数执行所需最低系统版本号,则终止执行所述函数;否则,继续执行所述函数。
在一优选的实施例中,如果所述配置信息中包括所述被调用的函数名称,则输出提示信息并通过Return语句终止执行该函数。其中,所述提示信息,比如可以是系统不支持该功能。
通过本发明实施例的防止应用程序崩溃的方法可以看出,通过从服务端获取包括已发生崩溃的函数名称的配置信息,在调用某个函数时,首先判断配置信息中是否有该函数名称,如果有,就终止执行该函数的方式,禁止导致崩溃的函数执行,进而防止应用程序崩溃;通过判断版本号,避免了由于调用高版本API导致的应用程序崩溃;通过编译前端Clang,在编译前在每个函数中插入防止应用程序崩溃的执行程序,相当于自己编写的执行程序,既避免了被下架风险,又不会遗漏,而且避免了重复劳动、降低了插入出错的风险。
图3是根据本发明实施例的防止应用程序崩溃的装置的主要模块的示意图。如图3所示,本发明实施例的防止应用程序崩溃的装置300,主要包括:
获取模块301,用于获取已发生崩溃的函数的配置信息;其中,所述配置信息包括已发生崩溃的函数名称。客户端向服务端发送配置信息请求,服务端将根据崩溃堆栈信息生成的配置信息反馈至客户端。该配置信息的具体内容中必须包括已发生崩溃的函数名称,其余可由用户自定义设置,比如如果服务端将根据崩溃堆栈信息分析出该崩溃是由于调用高版本API导致的,那么配置信息中还可以包括该函数执行所需的最低系统版本。
判断模块302,用于当在应用程序中调用函数时,判断所述配置信息中是否包括被调用的函数名称。该模块的具体判断过程为:首先遍历所述配置信息中的每一项数据,以获取所有所述已发生崩溃的函数名称;然后获取当前被调用的函数名称,判断所述被调用的函数名称与所述已发生崩溃的函数名称是否相同。
终止模块303,用于如果所述配置信息中包括所述被调用的函数名称,则终止执行所述函数。通过Return语句终止执行该函数。
另外,本发明实施例的防止应用程序崩溃的装置300还可以包括:版本号获取模块、确认模块和插入模块。其中,版本号获取模块,用于获取所述函数执行所需最低系统版本号以及当前系统版本号。确认模块,用于确认所述当前系统版本号小于所述函数执行所需最低系统版本号。插入模块,用于分析所述应用程序的源程序的抽象语法树,以获取所述源程序中的所有函数;以及通过编译前端Clang的Rewriter类,将防止应用程序崩溃的执行程序分别插入到所述源程序的每个函数中;其中,所述防止应用程序崩溃的执行程序包括:判断所述配置信息中是否包括被调用的函数名称;如果所述配置信息中包括所述被调用的函数名称,则终止执行所述函数。
从以上描述可以看出,通过从服务端获取包括已发生崩溃的函数名称的配置信息,在调用某个函数时,首先判断配置信息中是否有该函数名称,如果有,就终止执行该函数的方式,禁止导致崩溃的函数执行,进而防止应用程序崩溃;通过判断版本号,避免了由于调用高版本API导致的应用程序崩溃;通过编译前端Clang,在编译前在每个函数中插入防止应用程序崩溃的执行程序,相当于自己编写的执行程序,既避免了被下架风险,又不会遗漏,而且避免了重复劳动、降低了插入出错的风险。
图4示出了可以应用本发明实施例的处理实时消息的方法或处理实时消息的系统的示例性系统架构400。
如图4所示,系统架构400可以包括终端设备401、402、403,网络404和服务器405。网络404用以在终端设备401、402、403和服务器405之间提供通信链路的介质。网络404可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。
用户可以使用终端设备401、402、403通过网络404与服务器405交互,以接收或发送消息等。终端设备401、402、403上可以安装有各种通讯客户端应用,例如购物类应用、网页浏览器应用、搜索类应用、即时通信工具、邮箱客户端、社交平台软件等(仅为示例)。
终端设备401、402、403可以是具有显示屏并且支持网页浏览的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等等。
服务器405可以是提供各种服务的服务器,例如对用户利用终端设备401、402、403所产生的点击事件提供支持的后台管理服务器(仅为示例)。后台管理服务器可以对接收到的点击数据、文本内容等数据进行分析等处理,并将处理结果(例如目标推送信息、产品信息--仅为示例)反馈给终端设备。
需要说明的是,本申请实施例所提供的防止应用程序崩溃的方法一般由终端设备401、402、403执行,相应地,防止应用程序崩溃的装置一般设置于终端设备401、402、403中。
应该理解,图4中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。
根据本发明的实施例,本发明还提供了一种电子设备和一种计算机可读介质。
本发明的电子设备包括:一个或多个处理器;存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现本发明实施例的一种防止应用程序崩溃的方法。
本发明的计算机可读介质,其上存储有计算机程序,所述程序被处理器执行时实现本发明实施例的一种防止应用程序崩溃的方法。
下面参考图5,其示出了适用于来实现本发明实施例的电子设备的计算机系统500的结构示意图。图5示出的电子设备仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如图5所示,计算机系统500包括中央处理单元(CPU)501,其可以根据存储在只读存储器(ROM)502中的程序或者从存储部分508加载到随机访问存储器(RAM)503中的程序而执行各种适当的动作和处理。在RAM 503中,还存储有计算机系统500操作所需的各种程序和数据。CPU 501、ROM 502以及RAM 503通过总线504彼此相连。输入/输出(I/O)接口505也连接至总线504。
以下部件连接至I/O接口505:包括键盘、鼠标等的输入部分506;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分507;包括硬盘等的存储部分508;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分509。通信部分509经由诸如因特网的网络执行通信处理。驱动器510也根据需要连接至I/O接口505。可拆卸介质511,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器510上,以便于从其上读出的计算机程序根据需要被安装入存储部分508。
特别地,根据本发明公开的实施例,上文主要步骤图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行主要步骤图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分509从网络上被下载和安装,和/或从可拆卸介质511被安装。在该计算机程序被中央处理单元(CPU)501执行时,执行本发明的系统中限定的上述功能。
需要说明的是,本发明所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本发明中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本发明中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、RF等等,或者上述的任意合适的组合。
附图中的流程图和框图,图示了按照本发明各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本发明实施例中所涉及到的模块可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的模块也可以设置在处理器中,例如,可以描述为:一种处理器包括获取模块、判断模块和终止模块。其中,这些模块的名称在某种情况下并不构成对该模块本身的限定,例如,获取模块还可以被描述为“获取已发生崩溃的函数的配置信息的模块”。
作为另一方面,本发明还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的设备中所包含的;也可以是单独存在,而未装配入该设备中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被一个该设备执行时,使得该设备包括:获取已发生崩溃的函数的配置信息;其中,所述配置信息包括已发生崩溃的函数名称;当在应用程序中调用函数时,判断所述配置信息中是否包括被调用的函数名称;如果所述配置信息中包括所述被调用的函数名称,则终止执行所述函数。
从以上描述可以看出,通过从服务端获取包括已发生崩溃的函数名称的配置信息,在调用某个函数时,首先判断配置信息中是否有该函数名称,如果有,就终止执行该函数的方式,禁止导致崩溃的函数执行,进而防止应用程序崩溃;通过判断版本号,避免了由于调用高版本API导致的应用程序崩溃;通过编译前端Clang,在编译前在每个函数中插入防止应用程序崩溃的执行程序,相当于自己编写的执行程序,既避免了被下架风险,又不会遗漏,而且避免了重复劳动、降低了插入出错的风险。
上述产品可执行本发明实施例所提供的方法,具备执行方法相应的功能模块和有益效果。未在本实施例中详尽描述的技术细节,可参见本发明实施例所提供的方法。
上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,取决于设计要求和其他因素,可以发生各种各样的修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。

Claims (10)

1.一种防止应用程序崩溃的方法,其特征在于,包括:
获取已发生崩溃的函数的配置信息;其中,所述配置信息包括已发生崩溃的函数名称;
当在应用程序中调用函数时,判断所述配置信息中是否包括被调用的函数名称;
如果所述配置信息中包括所述被调用的函数名称,则终止执行所述函数。
2.根据权利要求1所述的方法,其特征在于,所述判断所述配置信息中是否包括被调用的函数名称,包括:
遍历所述配置信息中的每一项数据,以获取所有所述已发生崩溃的函数名称;
获取当前被调用的函数名称,判断所述被调用的函数名称与所述已发生崩溃的函数名称是否相同。
3.根据权利要求2所述的方法,其特征在于,所述配置信息的存储格式为数组,数组中的每一项数据均为键值对形式,键包括所述已发生崩溃的函数以及所述函数执行所需最低系统版本,所述键对应的值包括所述已发生崩溃的函数名称以及所述函数执行所需最低系统版本号;
所述遍历所述配置信息中的每一项数据的步骤之后以及所述判断所述被调用的函数名称与所述已发生崩溃的函数名称是否相同的步骤之前,还包括:获取所述函数执行所需最低系统版本号以及当前系统版本号;
所述如果所述配置信息中包括所述被调用的函数名称的步骤之后,以及所述终止执行所述函数的步骤之前,还包括:确认所述当前系统版本号小于所述函数执行所需最低系统版本号。
4.根据权利要求1至3的任一项所述的方法,其特征在于,所述获取已发生崩溃的函数的配置信息的步骤之前,还包括:
分析所述应用程序的源程序的抽象语法树,以获取所述源程序中的所有函数;
通过编译前端Clang的Rewriter类,将防止应用程序崩溃的执行程序分别插入到所述源程序的每个函数中;
其中,所述防止应用程序崩溃的执行程序包括:判断所述配置信息中是否包括被调用的函数名称;如果所述配置信息中包括所述被调用的函数名称,则终止执行所述函数。
5.一种防止应用程序崩溃的装置,其特征在于,包括:
获取模块,用于获取已发生崩溃的函数的配置信息;其中,所述配置信息包括已发生崩溃的函数名称;
判断模块,用于当在应用程序中调用函数时,判断所述配置信息中是否包括被调用的函数名称;
终止模块,用于如果所述配置信息中包括所述被调用的函数名称,则终止执行所述函数。
6.根据权利要求5所述的装置,其特征在于,所述判断模块,还用于:
遍历所述配置信息中的每一项数据,以获取所有所述已发生崩溃的函数名称;
获取当前被调用的函数名称,判断所述被调用的函数名称与所述已发生崩溃的函数名称是否相同。
7.根据权利要求6所述的装置,其特征在于,所述配置信息的存储格式为数组,数组中的每一项数据均为键值对形式,键包括所述已发生崩溃的函数以及所述函数执行所需最低系统版本,所述键对应的值包括所述已发生崩溃的函数名称以及所述函数执行所需最低系统版本号;
所述装置还包括:版本号获取模块,用于获取所述函数执行所需最低系统版本号以及当前系统版本号;
所述装置还包括:确认模块,用于确认所述当前系统版本号小于所述函数执行所需最低系统版本号。
8.根据权利要求5至7的任一项所述的装置,其特征在于,所述装置还包括:插入模块,用于分析所述应用程序的源程序的抽象语法树,以获取所述源程序中的所有函数;以及
通过编译前端Clang的Rewriter类,将防止应用程序崩溃的执行程序分别插入到所述源程序的每个函数中;
其中,所述防止应用程序崩溃的执行程序包括:判断所述配置信息中是否包括被调用的函数名称;如果所述配置信息中包括所述被调用的函数名称,则终止执行所述函数。
9.一种电子设备,其特征在于,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-4中任一所述的方法。
10.一种计算机可读介质,其上存储有计算机程序,其特征在于,所述程序被处理器执行时实现如权利要求1-4中任一所述的方法。
CN201810072575.2A 2018-01-25 2018-01-25 一种防止应用程序崩溃的方法和装置 Pending CN110083471A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201810072575.2A CN110083471A (zh) 2018-01-25 2018-01-25 一种防止应用程序崩溃的方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810072575.2A CN110083471A (zh) 2018-01-25 2018-01-25 一种防止应用程序崩溃的方法和装置

Publications (1)

Publication Number Publication Date
CN110083471A true CN110083471A (zh) 2019-08-02

Family

ID=67412182

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810072575.2A Pending CN110083471A (zh) 2018-01-25 2018-01-25 一种防止应用程序崩溃的方法和装置

Country Status (1)

Country Link
CN (1) CN110083471A (zh)

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1987797A (zh) * 2005-12-23 2007-06-27 国际商业机器公司 避免软件冲突的方法和系统
US20080301502A1 (en) * 2007-05-31 2008-12-04 Microsoft Corporation System crash analysis using path tracing technologies
CN101719090A (zh) * 2009-12-25 2010-06-02 珠海市君天电子科技有限公司 对计算机软件系统崩溃原因进行自动分析的方法
CN101770422A (zh) * 2008-12-30 2010-07-07 鸿富锦精密工业(深圳)有限公司 软件Bug追踪方法及其计算机系统
CN106997313A (zh) * 2017-03-28 2017-08-01 腾讯科技(深圳)有限公司 一种应用程序的信号处理方法、系统及终端设备

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1987797A (zh) * 2005-12-23 2007-06-27 国际商业机器公司 避免软件冲突的方法和系统
US20080301502A1 (en) * 2007-05-31 2008-12-04 Microsoft Corporation System crash analysis using path tracing technologies
CN101770422A (zh) * 2008-12-30 2010-07-07 鸿富锦精密工业(深圳)有限公司 软件Bug追踪方法及其计算机系统
CN101719090A (zh) * 2009-12-25 2010-06-02 珠海市君天电子科技有限公司 对计算机软件系统崩溃原因进行自动分析的方法
CN106997313A (zh) * 2017-03-28 2017-08-01 腾讯科技(深圳)有限公司 一种应用程序的信号处理方法、系统及终端设备

Similar Documents

Publication Publication Date Title
CN107832045A (zh) 跨编程语言接口转换的方法和装置
CN108804327A (zh) 一种自动生成测试数据的方法和装置
CN107844324A (zh) 客户端页面跳转处理方法和装置
CN109766082A (zh) 应用程序页面跳转的方法和装置
CN109325213A (zh) 用于标注数据的方法和装置
CN110109979A (zh) 一种配置表单选项方法和装置
CN109981322A (zh) 基于标签的云资源管理的方法和装置
CN109697537A (zh) 数据审核的方法和装置
CN110427304A (zh) 用于银行系统的运维方法、装置、电子设备以及介质
CN109656744A (zh) 基于Java注解实现数据校验和注入的方法和装置
CN110134427A (zh) 一种生成代码文件的方法和装置
CN110471848A (zh) 一种动态返回报文的方法和装置
CN109582317A (zh) 用于调试寄宿应用的方法和装置
CN109002282A (zh) 一种在web页面开发中实现动画效果的方法和装置
CN109814957A (zh) 一种用于ios系统的标签添加方法和装置
CN109992496A (zh) 一种用于自动化测试的数据处理方法和装置
CN109960212A (zh) 任务发送方法和装置
CN110334248A (zh) 一种系统配置信息处理方法和装置
CN108959636A (zh) 数据处理方法、装置、系统、计算机可读介质
CN109597912A (zh) 用于处理图片的方法
CN109981546A (zh) 获取应用模块间的远程调用关系的方法和装置
CN109002389A (zh) 页面自动化测试的方法和装置
CN110471859A (zh) 业务测试方法、装置、介质及电子设备
CN110262841A (zh) 一种对字节码进行增强的方法和装置
CN109901934A (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