CN109408265B - 一种ios运行异常的保护方法、装置、终端设备及存储介质 - Google Patents

一种ios运行异常的保护方法、装置、终端设备及存储介质 Download PDF

Info

Publication number
CN109408265B
CN109408265B CN201811143337.2A CN201811143337A CN109408265B CN 109408265 B CN109408265 B CN 109408265B CN 201811143337 A CN201811143337 A CN 201811143337A CN 109408265 B CN109408265 B CN 109408265B
Authority
CN
China
Prior art keywords
instruction
executing
name
container
threads
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.)
Active
Application number
CN201811143337.2A
Other languages
English (en)
Other versions
CN109408265A (zh
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.)
Guangzhou Huya Information Technology Co Ltd
Original Assignee
Guangzhou Huya 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 Guangzhou Huya Information Technology Co Ltd filed Critical Guangzhou Huya Information Technology Co Ltd
Priority to CN201811143337.2A priority Critical patent/CN109408265B/zh
Publication of CN109408265A publication Critical patent/CN109408265A/zh
Application granted granted Critical
Publication of CN109408265B publication Critical patent/CN109408265B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

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)
  • Quality & Reliability (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Stored Programmes (AREA)

Abstract

本申请提供一种IOS运行异常的保护方法、装置、终端设备及存储介质,通过判断是否存在执行指令的方法,若不存在执行指令的方法,将执行指令的方法名称添加到容器中,并把指令转发给容器,在容器中匹配所述执行指令的方法名称,返回一个非空值,返回非空值的目的是使程序继续运行,不会因为不存在执行指令的方法而使应用程序崩溃;获取并记录执行指令时所有线程的方法调用栈的信息,最后将目标信息发送到服务器,开发人员可以通过目标信息查找导致应用程序崩溃的原因。

Description

一种IOS运行异常的保护方法、装置、终端设备及存储介质
技术领域
本申请涉及软件领域,尤其涉及一种IOS运行异常的保护方法、装置、终端设备及存储介质。
背景技术
在智能终端的应用的实际开发过程中,或者用户在智能终端中使用应用程序的时候,经常会出现应用程序崩溃的情况。
目前,操作系统上安装的应用程序在运行过程中,如果需要执行用户的操作指令,应用程序会调用与用户操作指令相对应的方法来执行指令。在执行任务过程中,若出现执行错误或者其他错误,例如执行某个指令的方法不存在,则会抛出异常,操作系统会根据异常将应用程序崩溃掉,例如对应用程序进行闪退操作,许多的奔溃情况事发偶然难以重现,使得开发人员难以获取应用程序崩溃的原因,进而导致应用程序崩溃的问题无法得到有效的解决。
发明内容
有鉴于此,本申请提供一种IOS运行异常的保护方法,以解决当应用程序出现崩溃时,开发人员不容易查找崩溃原因的问题。
根据本申请实施例的第一方面,提供一种方法,所述方法包括:
接收指令,判断是否存在执行指令的方法;
若不存在所述执行指令的方法,在容器中添加执行指令的方法名称和目标类的名称,将所述指令转发给所述容器;
在所述容器中匹配所述目标类的名称和所述执行指令的方法名称,所述容器向应用程序返回一个非空值;
获取并保存执行指令时所有线程的方法调用栈,其中,所述所有线程为当前应用程序中存在的全部线程;
将目标数据发送到服务器,其中,所述目标数据包括方法调用栈、目标类的名称、方法名称和当前页面的类名。
可选地,所述判断是否存在执行指令的方法,具体包括:
调用Objc_msgSend方法在目标类的方法列表中查找与所述指令对应的所述执行指令的方法;
若存在所述执行指令的方法,则使用所述执行指令的方法执行指令。
可选地,所述调用Objc_msgSend方法在所述方法列表中查找与所述指令对应的所述执行指令的方法,包括:
若存在所述执行指令的方法,将存放所述指令的入口地址与所述执行指令的方法进行动态绑定;
objc_msgSend将其在目标类中查找到的所述执行指令的方法缓存在映射表中,所述映射表用来存放所述执行指令的方法和所述指令的入口地址的映射关系;
当再次接收到所述指令时,从所述映射表中调用所述执行指令的方法。
可选地,若不存在所述执行指令的方法,在容器中添加执行指令的方法名称和目标类的名称,将所述指令转发给所述容器,具体包括:
若所述目标类中不存在所述执行指令的方法,沿着继承体系在当前目标类的父类中继续查找,所述目标类继承于所述父类;
若在所述父类中找到与所述指令对应的所述执行指令的方法,则使用所述执行指令的方法执行指令并停止查找所述执行指令的方法;
若所述父类中仍不存在所述执行指令的方法,则在容器中添加执行指令的方法名称和目标类的名称,将所述指令转发给所述容器。
可选地,所述获取并保存执行指令时所有线程的方法调用栈,具体包括:
通过task_threads函数获取所述所有线程;
通过帧指针和栈指针获取所述所有线程的方法调用栈;
将获取到的所述所有线程的方法调用栈保存在记录表中。
根据本申请实施例的第二方面,提供一种装置,所述装置包括:
判断模块,被配置为判断是否存在执行指令的方法;
转发模块,被配置为若不存在所述执行指令的方法,在容器中添加执行指令的方法名称和目标类的名称,将所述指令转发给所述容器;
匹配模块,被配置为在所述容器中匹配所述目标类的名称和所述执行指令的方法名称,所述容器向应用程序返回一个非空值;
获取模块,被配置为获取并保存执行指令时所有线程的方法调用栈,其中,所述所有线程为当前应用程序中存在的全部线程;
发送模块,被配置为将目标数据发送到服务器,其中,所述目标数据包括方法调用栈、目标类的名称、方法名称和当前页面的类名。
根据本申请实施例的第三方面,提供一种终端设备,该终端设备包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器被配置为:
判断是否存在执行指令的方法;
若不存在所述执行指令的方法,在容器中添加执行指令的方法名称和目标类的名称,将所述指令转发给所述容器;
在所述容器中匹配所述目标类的名称和所述执行指令的方法名称,所述容器向应用程序返回一个非空值;
获取并保存执行指令时所有线程的方法调用栈,其中,所述所有线程为当前应用程序中存在的全部线程;
将目标数据发送到服务器,其中,所述目标数据包括方法调用栈、目标类的名称、方法名称和当前页面的类名。
根据本申请实施例的第四方面,提供一种计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现权利要求1至5任一所述方法的步骤。
有益效果:本申请提供一种IOS运行异常的保护方法,通过判断是否存在执行指令的方法,若不存在执行指令的方法,将执行指令的方法名称添加到容器中,并把指令转发给容器,在容器中匹配所述执行指令的方法名称,返回一个非空值,返回非空值的目的是使程序继续运行,不会因为不存在执行指令的方法而使应用程序崩溃;获取并记录执行指令时所有线程的方法调用栈的信息,最后将目标信息发送到服务器,便于开发人员通过目标信息查找导致应用程序崩溃的原因。
附图说明
图1为本申请根据一示例性实施例示出的一种方法的实施例流程图;
图2为本申请根据一示例性实施例示出的另一种方法的实施例流程图;
图3为本申请根据一示例性实施例示出的另一种方法的实施例流程图;
图4为本申请根据一示例性实施例示出的一种装置的示意图;
图5为本申请根据一示例性实施例示出的一种终端设备的示意图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。
在本申请使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请。在本申请和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本申请可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
在操作系统上安装的应用程序在运行过程中,如果需要执行用户的操作指令,应用程序会调用与用户操作指令相对应的方法来执行指令。在执行任务过程中,若出现执行错误或者其他错误,例如执行某个指令的方法不存在,则会抛出异常,操作系统会根据异常将应用程序崩溃掉,即对应用程序进行闪退操作,由于我们无法要求用户复现他的操作步骤,难以获取应用程序崩溃的原因,进而导致应用程序崩溃的问题无法得到有效的解决。
针对上述问题,本申请实施例提供一种IOS运行异常的保护方法,如图1所示,上述方法可包括步骤101至步骤105:
S101、接收指令,判断是否存在执行指令的方法;
S102、若不存在所述执行指令的方法,在容器中添加执行指令的方法名称和目标类的名称,将所述指令转发给所述容器;
S103、在所述容器中匹配所述目标类的名称和所述执行指令的方法名称,所述容器向应用程序返回一个非空值;
S104、获取并保存执行指令时所有线程的方法调用栈,其中,所述所有线程为当前应用程序中存在的全部线程;
S105、将目标数据发送到服务器,其中,所述目标数据包括方法调用栈、目标类的名称、方法名称和当前页面的类名。
接收指令后,调用Objc_msgSend方法在目标类的方法列表中查找与指令对应的执行指令的方法,若查找到执行指令的方法,使用执行指令的方法执行指令,并将存放指令的入口地址与执行指令的方法进行动态绑定,可以通过指令指针来获取存放指令的入口地址。objc_msgSend将其在目标类中查找到的执行指令的方法缓存在映射表中,映射表用来存放执行指令的方法和指令的入口地址的映射关系;当再次接收到指令时,从映射表中调用执行指令的方法,使用执行指令的方法对指令进行处理,将查找到的方法缓存在映射表中可以更加快速高效的调用执行指令的方法。
用户在应用程序上进行操作时,生成指令,指令会在系统中调用相应的执行该指令的方法,如果执行指令的方法不存在,将执行指令的方法名称和方法所在的目标类的名称添加在容器中,跟数据结构不同的是,容器是对数据结构的实例化,将指令转发给容器,在容器中匹配与指令相应的目标类的名称和执行指令的方法名称,容器向应用程序返回一个非空值,比如返回“0”,使得应用程序不响应这个操作,只是不响应但是应用程序可以继续运行,不会引起应用程序的崩溃。
本实施例通过判断是否存在执行指令的方法,若不存在执行指令的方法,将执行指令的方法名称添加到容器中,并把指令转发给容器,在容器中匹配所述执行指令的方法名称,容器向应用程序返回一个非空值,返回非空值的目的是使程序继续运行,不会因为不存在执行指令的方法而使应用程序崩溃;获取并记录执行指令时所有线程的方法调用栈的信息,最后将目标信息发送到服务器,开发人员可以通过目标信息查找导致应用程序崩溃的原因。
如图2所示,若系统中不存在执行指令的方法,在容器中添加执行指令的方法名称和目标类的名称,并将指令转发给容器的具体步骤包括:
S201、若所述目标类中不存在所述执行指令的方法,沿着继承体系在当前目标类的父类中继续查找,所述目标类继承于所述父类;
S202、若在所述父类中找到与所述指令对应的所述执行指令的方法,则使用所述执行指令的方法执行指令并停止查找所述执行指令的方法;
S203、若所述父类中仍不存在所述执行指令的方法,则在容器中添加执行指令的方法名称和目标类的名称,将所述指令转发给所述容器。
目标类可以直接复用父类中的成员,目标类继承父类所有方法的声明和实现非私有的实例变量以及协议,继承时需要在头文件中声明一下继承具有单根性和传递性。继承的根类:大多都继承自NSObject类,因此在定义一个类时,要继承NSObject类。
如果在目标类中需要调用父类的方法或者功能,可以借助super关键字;目标类中使用super发送消息时,目的是为了通知目标类调用父类的方法;如果父类没有定义该方法,则继续在继承体系上查找,直到找到为止;如果查到NSobject为止仍然未找到,则在容器中添加执行指令的方法名称和目标类的名称,将指令转发给所述容器。
在容器中匹配目标类的名称和执行指令的方法名称,返回一个非空值。返回非空值后虽然应用程序没有崩溃,但是也没有响应用户的操作,因此,开发人员需要知道用户进行的操作是什么,执行指令的哪个过程出现了漏洞。此时,需要获取并保存执行指令时所有线程的方法调用栈,其中,所有线程为当前应用程序中存在的全部线程。
如图3所示,获取并保存执行指令时所有线程的方法调用栈的步骤具体包括:
S301、通过task_threads函数获取所述所有线程;
S302、通过帧指针和栈指针获取所述所有线程的方法调用栈;
S303、将获取到的所述所有线程的方法调用栈保存在记录表中。
获取所有线程的方法调用栈之前需要先获得线程,可以通过task_threads函数获取所有线程。方法调用栈描述的是函数之间的调用关系,它由多个栈帧(stack frame)组成,每个栈帧对应着一个未运行完毕的函数,栈帧中保存了该函数的返回地址和局部变量,因而不仅能在执行完毕后找到正确的返回地址,还可以保存不同函数间的局部变量,由于不同函数对应着不同的栈帧,因此可以通过帧指针和栈指针获取所述所有线程的方法调用栈。将获取到的所有线程的方法调用栈保存在记录表中,开发人员可以通过查找记录表中的信息找到使程序不响应指令的问题所在。
在另一实施例中,如图4所示,本申请还提供一种I OS运行异常的保护装置,装置包括:判断模块41、转发模块42、匹配模块43、获取模块44和发送模块45,其中:
判断模块41,被配置为判断是否存在执行指令的方法;
转发模块42,被配置为若不存在所述执行指令的方法,在容器中添加执行指令的方法名称和目标类的名称,将所述指令转发给所述容器;
匹配模块43,被配置为在所述容器中匹配所述目标类的名称和所述执行指令的方法名称,容器向应用程序返回一个非空值;
获取模块44,被配置为获取并保存执行指令时所有线程的方法调用栈,其中,所述所有线程为当前应用程序中存在的全部线程;
发送模块45,被配置为将目标数据发送到服务器,其中,所述目标数据包括方法调用栈、目标类的名称、方法名称和当前页面的类名。
由上述实施例可见,通过判断模块41判断是否存在执行指令的方法,若不存在执行指令的方法,将执行指令的方法名称添加到容器中,通过转发模块42把指令转发给容器,匹配模块43在容器中匹配所述执行指令的方法名称,返回一个非空值,返回非空值的目的是使程序继续运行,不会因为不存在执行指令的方法而使应用程序崩溃;获取模块44获取并记录执行指令时所有线程的方法调用栈的信息,最后发送模块45将目标信息发送到服务器,开发人员可以通过目标信息查找导致应用程序崩溃的原因。
判断模块41判断是否存在执行指令的方法的步骤,具体包括:
调用Objc_msgSend方法在目标类的方法列表中查找与指令对应的执行指令的方法;
若存在执行指令的方法,则使用执行指令的方法执行指令。
调用Objc_msgSend方法在方法列表中查找与指令对应的执行指令的方法,具体包括:
若存在所述执行指令的方法,将存放所述指令的入口地址与所述执行指令的方法进行动态绑定;
objc_msgSend将其在目标类中查找到的所述执行指令的方法缓存在映射表中,所述映射表用来存放所述执行指令的方法和所述指令的入口地址的映射关系;
当再次接收到所述指令时,从所述映射表中调用所述执行指令的方法。
相应的,如图5所示本申请还提供一种终端设备50,包括有处理器51;用于存储可执行指令的存储器52,所述存储器52包括计算机程序;其中,处理器51被配置为:
接收指令,判断是否存在执行指令的方法;
若不存在所述执行指令的方法,在容器中添加执行指令的方法名称和目标类的名称,将所述指令转发给所述容器;
在所述容器中匹配所述目标类的名称和所述执行指令的方法名称,所述容器向应用程序返回一个非空值;
获取并保存执行指令时所有线程的方法调用栈,其中,所述所有线程为当前应用程序中存在的全部线程;
将目标数据发送到服务器,其中,所述目标数据包括方法调用栈、目标类的名称、方法名称和当前页面的类名。
所称处理器51可以是中央处理单元(Central Processing Unit,CPU),还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
存储器52可以包括至少一种类型的存储介质,存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等等)、随机访问存储器(RAM)、静态随机访问存储器(SRAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、可编程只读存储器(PROM)、磁性存储器、磁盘、光盘等等。而且,设备可以与通过网络连接执行存储器的存储功能的网络存储装置协作。存储器52可以是终端设备50的内部存储单元,例如终端设备50的硬盘或内存。存储器52也可以是终端设备50的外部存储设备,例如终端设备50上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。进一步地,存储器52还可以既包括终端设备50的内部存储单元也包括外部存储设备。存储器52用于存储计算机程序以及设备所需的其他程序和数据。存储器52还可以用于暂时地存储已经输出或者将要输出的数据。
这里描述的各种实施方式可以使用例如计算机软件、硬件或其任何组合的计算机可读介质来实施。对于硬件实施,这里描述的实施方式可以通过使用特定用途集成电路(ASIC)、数字信号处理器(DSP)、数字信号处理装置(DSPD)、可编程逻辑装置(PLD)、现场可编程门阵列(FPGA)、处理器、控制器、微控制器、微处理器、被设计为执行这里描述的功能的电子单元中的至少一种来实施。对于软件实施,诸如过程或功能的实施方式可以与允许执行至少一种功能或操作的单独的软件模块来实施。软件代码可以由以任何适当的编程语言编写的软件应用程序(或程序)来实施,软件代码可以存储在存储器中并且由控制器执行。
终端设备50可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。设备可包括,但不仅限于,处理器51、存储器52。本领域技术人员可以理解,图5仅仅是终端设备50的示例,并不构成对终端设备50的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,例如设备还可以包括输入输出设备、网络接入设备、总线等。
上述设备中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本申请方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
在示例性实施例中,还提供了一种包括指令的非临时性计算机可读存储介质,例如包括计算机指令的存储器,上述计算机指令可由装置的处理器执行以完成上述方法。例如,非临时性计算机可读存储介质可以是ROM、随机存取存储器(RAM)、CD-ROM、磁带、软盘和光数据存储设备等。
一种非临时性计算机可读存储介质,当存储介质中的指令由终端的处理器执行时,使得终端能够执行上述方法。
本领域技术人员在考虑说明书及实践这里公开的申请后,将容易想到本申请的其它实施方案。本申请旨在涵盖本申请的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本申请的一般性原理并包括本申请未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本申请的真正范围和精神由下面的权利要求指出。
应当理解的是,本申请并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本申请的范围仅由所附的权利要求来限制。
以上仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。

Claims (10)

1.一种IOS运行异常的保护方法,其特征在于,包括:
接收指令,判断是否存在执行指令的方法;
若不存在所述执行指令的方法,在容器中添加执行指令的方法名称和目标类的名称,将所述指令转发给所述容器;
在所述容器中匹配所述目标类的名称和所述执行指令的方法名称,所述容器向应用程序返回一个非空值;
获取并保存执行指令时所有线程的方法调用栈,其中,所述所有线程为当前应用程序中存在的全部线程;
将目标数据发送到服务器,其中,所述目标数据包括方法调用栈、目标类的名称、执行指令的方法名称和当前页面的类名。
2.根据权利要求1所述的方法,其特征在于,所述判断是否存在执行指令的方法,具体包括:
调用Objc_msgSend方法在目标类的方法列表中查找与所述指令对应的所述执行指令的方法;
若存在所述执行指令的方法,则使用所述执行指令的方法执行指令。
3.根据权利要求2所述的方法,其特征在于,所述调用Objc_msgSend方法在所述方法列表中查找与所述指令对应的所述执行指令的方法,包括:
若存在所述执行指令的方法,将存放所述指令的入口地址与所述执行指令的方法进行动态绑定;
objc_msgSend将其在目标类中查找到的所述执行指令的方法缓存在映射表中,所述映射表用来存放所述执行指令的方法和所述指令的入口地址的映射关系;
当再次接收到所述指令时,从所述映射表中调用所述执行指令的方法。
4.根据权利要求1所述的方法,其特征在于,若不存在所述执行指令的方法,在容器中添加执行指令的方法名称和目标类的名称,将所述指令转发给所述容器,具体包括:
若所述目标类中不存在所述执行指令的方法,沿着继承体系在当前目标类的父类中继续查找,所述目标类继承于所述父类;
若在所述父类中找到与所述指令对应的所述执行指令的方法,则使用所述执行指令的方法执行指令并停止查找所述执行指令的方法;
若所述父类中仍不存在所述执行指令的方法,则在容器中添加执行指令的方法名称和目标类的名称,将所述指令转发给所述容器。
5.根据权利要求1所述的方法,其特征在于,所述获取并保存执行指令时所有线程的方法调用栈,具体包括:
通过task_threads函数获取所述所有线程;
通过帧指针和栈指针获取所述所有线程的方法调用栈;
将获取到的所述所有线程的方法调用栈保存在记录表中。
6.一种IOS运行异常的保护装置,其特征在于,包括:
判断模块,被配置为判断是否存在执行指令的方法;
转发模块,被配置为若不存在所述执行指令的方法,在容器中添加执行指令的方法名称和目标类的名称,将所述指令转发给所述容器;
匹配模块,被配置为在所述容器中匹配所述目标类的名称和所述执行指令的方法名称,所述容器向应用程序返回一个非空值;
获取模块,被配置为获取并保存执行指令时所有线程的方法调用栈,其中,所述所有线程为当前应用程序中存在的全部线程;
发送模块,被配置为将目标数据发送到服务器,其中,所述目标数据包括方法调用栈、目标类的名称、执行指令的方法名称和当前页面的类名。
7.根据权利要求6所述的装置,其特征在于,所述判断是否存在执行指令的方法,具体包括:
接收指令,调用Objc_msgSend方法在目标类的方法列表中查找与所述指令对应的所述执行指令的方法;
若存在所述执行指令的方法,则使用所述执行指令的方法执行指令。
8.根据权利要求7所述的装置,其特征在于,所述调用Objc_msgSend方法在所述方法列表中查找与所述指令对应的所述执行指令的方法,包括:
若存在所述执行指令的方法,将存放所述指令的入口地址与所述执行指令的方法进行动态绑定;
objc_msgSend将其在目标类中查找到的所述执行指令的方法缓存在映射表中,所述映射表用来存放所述执行指令的方法和所述指令的入口地址的映射关系;
当再次接收到所述指令时,从所述映射表中调用所述执行指令的方法。
9.一种终端设备,其特征在于,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器被配置为:
判断是否存在执行指令的方法;
若不存在所述执行指令的方法,在容器中添加执行指令的方法名称和目标类的名称,将所述指令转发给所述容器;
在所述容器中匹配所述目标类的名称和所述执行指令的方法名称,所述容器向应用程序返回一个非空值;
获取并保存执行指令时所有线程的方法调用栈,其中,所述所有线程为当前应用程序中存在的全部线程;
将目标数据发送到服务器,其中,所述目标数据包括方法调用栈、目标类的名称、执行指令的方法名称和当前页面的类名。
10.一种计算机可读存储介质,其上存储有计算机指令,其特征在于,该指令被处理器执行时实现权利要求1至5任一所述方法的步骤。
CN201811143337.2A 2018-09-28 2018-09-28 一种ios运行异常的保护方法、装置、终端设备及存储介质 Active CN109408265B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201811143337.2A CN109408265B (zh) 2018-09-28 2018-09-28 一种ios运行异常的保护方法、装置、终端设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201811143337.2A CN109408265B (zh) 2018-09-28 2018-09-28 一种ios运行异常的保护方法、装置、终端设备及存储介质

Publications (2)

Publication Number Publication Date
CN109408265A CN109408265A (zh) 2019-03-01
CN109408265B true CN109408265B (zh) 2022-05-10

Family

ID=65466412

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201811143337.2A Active CN109408265B (zh) 2018-09-28 2018-09-28 一种ios运行异常的保护方法、装置、终端设备及存储介质

Country Status (1)

Country Link
CN (1) CN109408265B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110083474A (zh) * 2019-04-22 2019-08-02 无线生活(杭州)信息科技有限公司 防止应用程序崩溃的方法及装置
CN112181761B (zh) * 2020-09-21 2023-01-31 广州虎牙科技有限公司 程序执行控制、测试、代码检测方法、装置、设备及介质

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105653432A (zh) * 2015-12-22 2016-06-08 北京奇虎科技有限公司 一种崩溃数据的处理方法和装置
CN106133698A (zh) * 2014-03-17 2016-11-16 微软技术许可有限责任公司 用于用户模式崩溃报告的框架
CN108052407A (zh) * 2017-12-13 2018-05-18 深圳乐信软件技术有限公司 一种应用程序崩溃防护方法、装置、设备及存储介质
CN108334515A (zh) * 2017-01-20 2018-07-27 阿里巴巴集团控股有限公司 一种处理崩溃文件中堆栈地址的方法、装置及系统
CN108415727A (zh) * 2017-11-30 2018-08-17 平安科技(深圳)有限公司 电子装置、Web应用开发中异常处理方法及存储介质

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9195555B2 (en) * 2013-05-24 2015-11-24 International Business Machines Corporation Error injection into the leaf functions of call graphs

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106133698A (zh) * 2014-03-17 2016-11-16 微软技术许可有限责任公司 用于用户模式崩溃报告的框架
CN105653432A (zh) * 2015-12-22 2016-06-08 北京奇虎科技有限公司 一种崩溃数据的处理方法和装置
CN108334515A (zh) * 2017-01-20 2018-07-27 阿里巴巴集团控股有限公司 一种处理崩溃文件中堆栈地址的方法、装置及系统
CN108415727A (zh) * 2017-11-30 2018-08-17 平安科技(深圳)有限公司 电子装置、Web应用开发中异常处理方法及存储介质
CN108052407A (zh) * 2017-12-13 2018-05-18 深圳乐信软件技术有限公司 一种应用程序崩溃防护方法、装置、设备及存储介质

Also Published As

Publication number Publication date
CN109408265A (zh) 2019-03-01

Similar Documents

Publication Publication Date Title
CN109661652B (zh) 使用系统调用序列的异常检测
US20190087208A1 (en) Method and apparatus for loading elf file of linux system in windows system
CN109828774B (zh) 一种服务器系统及其启动方法
CN110162344B (zh) 一种隔离限流的方法、装置、计算机设备及可读存储介质
CN109408265B (zh) 一种ios运行异常的保护方法、装置、终端设备及存储介质
CN109388485B (zh) 一种任务执行线程的处理方法、装置、设备及存储介质
US8782375B2 (en) Hash-based managing of storage identifiers
CN106997313B (zh) 一种应用程序的信号处理方法、系统及终端设备
CN111913764A (zh) 服务依赖分析方法、电子设备及存储介质
CN111767056A (zh) 一种源码编译方法、可执行文件运行方法及终端设备
US9262274B2 (en) Persistent data across reboots
CN110928720A (zh) 基于Linux系统的core dump文件生成方法及装置
CN107967192B (zh) 一种智能终端的系统崩溃处理方法和装置
CN111966630B (zh) 文件类型的检测方法、装置、设备和介质
US11416614B2 (en) Statistical detection of firmware-level compromises
CN110688320B (zh) 全局变量的检测方法、装置及终端设备
CN115269252A (zh) 应用程序故障处理方法、装置、设备及存储介质
CN113126982B (zh) 一种应用程序生成、运行方法及装置
CN114936368A (zh) 一种Java内存木马检测方法、终端设备及存储介质
CN115705294A (zh) 用于获取函数调用信息的方法、装置、电子设备和介质
CN112052054A (zh) 函数调用方法、装置、电子设备及存储介质
CN113961366A (zh) 操作系统的内核函数调用方法及计算机设备
CN113722715B (zh) 一种导入文件检查方法、检查系统及计算设备
CN115827099B (zh) Linux平台的挂钩函数安装方法及装置
US11086758B1 (en) Identifying firmware functions executed in a call chain prior to the occurrence of an error condition

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
GR01 Patent grant
GR01 Patent grant