CN113032100B - 一种异常处理方法、装置、设备及存储介质 - Google Patents

一种异常处理方法、装置、设备及存储介质 Download PDF

Info

Publication number
CN113032100B
CN113032100B CN202110333171.6A CN202110333171A CN113032100B CN 113032100 B CN113032100 B CN 113032100B CN 202110333171 A CN202110333171 A CN 202110333171A CN 113032100 B CN113032100 B CN 113032100B
Authority
CN
China
Prior art keywords
java
exception
event
abnormal
preset
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
CN202110333171.6A
Other languages
English (en)
Other versions
CN113032100A (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.)
Beijing ByteDance Network Technology Co Ltd
Original Assignee
Beijing ByteDance Network 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 ByteDance Network Technology Co Ltd filed Critical Beijing ByteDance Network Technology Co Ltd
Priority to CN202110333171.6A priority Critical patent/CN113032100B/zh
Publication of CN113032100A publication Critical patent/CN113032100A/zh
Priority to PCT/CN2022/078363 priority patent/WO2022206253A1/zh
Priority to US18/283,696 priority patent/US20240168865A1/en
Application granted granted Critical
Publication of CN113032100B publication Critical patent/CN113032100B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/366Software debugging using diagnostics
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45591Monitoring or debugging support
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

本公开提供了一种异常处理方法、装置、设备及存储介质,所述方法包括:如果确定基于JNI调用的java代码发生异常事件,则获取异常事件对应的java异常对象。然后,删除异常事件对应的异常标识。最终,基于JNI调用预置的java异常处理程序,利用java异常处理程序对java异常对象进行异常处理;java异常处理程序用于将异常对象对应的异常事件上报为java崩溃事件。本公开通过调用java异常处理程序对java代码发生的异常事件进行处理,将java代码发生的异常事件上报为java崩溃事件,降低因异常事件类型上报错误导致的聚合分析结果不准确问题的发生概率。

Description

一种异常处理方法、装置、设备及存储介质
技术领域
本公开涉及数据处理领域,尤其涉及一种异常处理方法、装置、设备及存储介质。
背景技术
java本地接口(Java Native Interface;JNI),是一种允许运行于java虚拟机JVM的java代码去调用本地代码,同时也允许本地代码去调用java代码的本地接口。
目前,当本地代码通过JNI去调用运行于JVM的java代码时,如果java代码发生异常事件,系统不会崩溃,而是返回至本地代码,如果此时再继续调用java代码,则会被认定为本地发生崩溃事件,即native崩溃,很容易导致后续开发人员基于认定的崩溃类型对本次异常事件进行聚合分析等处理的结果不准确。
发明内容
为了解决上述技术问题或者至少部分地解决上述技术问题,本公开提供了一种异常处理方法、装置、设备及存储介质,能够将java代码发生的异常事件上报为java崩溃事件,降低因异常事件类型上报错误导致的聚合分析结果不准确问题的发生概率。
第一方面,本公开提供了一种异常处理方法,所述方法包括:
如果确定基于java本地接口JNI调用的java代码发生异常事件,则获取所述异常事件对应的java异常对象;其中,所述java异常对象用于表征所述异常事件;
删除所述异常事件对应的异常标识;所述异常标识用于表征java虚拟机处于异常工作状态;
基于所述JNI调用预置的java异常处理程序,并利用所述java异常处理程序对所述java异常对象进行异常处理;其中,所述java异常处理程序用于将异常对象对应的异常事件上报为java崩溃事件。
一种可选的实施方式中,所述如果确定基于java本地接口JNI调用的java代码发生异常事件,则获取所述异常事件对应的java异常对象之前,还包括:
在检测到基于JNI调用java代码后,确定被调用的所述java代码是否发生异常事件。
一种可选的实施方式中,所述基于所述JNI调用预置的java异常处理程序,并利用所述java异常处理程序对所述java异常对象进行异常处理,包括:
基于所述JNI调用预设异常解决类中的预设java方法,并将所述java异常对象传递至所述预设java方法;
利用所述预设java方法调用预置的java异常处理程序,并将所述java异常对象传递至所述java异常处理程序;
利用所述java异常处理程序对所述java异常对象进行异常处理。
一种可选的实施方式中,所述基于所述JNI调用预设异常解决类中的预设java方法之前,还包括:
将预设异常解决类设置为全局引用;
获取所述预设异常解决类中的预设java方法的标识;
相应的,所述基于所述JNI调用预设异常解决类中的预设java方法,包括:
基于所述预设java方法的标识,通过所述JNI调用预设异常解决类中的所述预设java方法。
第二方面,本公开提供了一种异常处理方法,所述方法包括:
通过JNI接收java异常对象;其中,所述java异常对象用于表征基于JNI调用java代码发生的异常事件;
调用预置的java异常处理程序,并利用所述java异常处理程序对所述java异常对象进行异常处理;其中,所述java异常处理程序用于将异常对象对应的异常事件上报为java崩溃事件。
第三方面,本公开提供了一种异常处理装置,所述装置包括:
获取模块,用于在确定基于java本地接口JNI调用的java代码发生异常事件时,获取所述异常事件对应的java异常对象;其中,所述java异常对象用于表征所述异常事件;
删除模块,用于删除所述异常事件对应的异常标识;所述异常标识用于表征java虚拟机处于异常工作状态;
第一异常处理模块,用于基于所述JNI调用预置的java异常处理程序,并利用所述java异常处理程序对所述java异常对象进行异常处理;其中,所述java异常处理程序用于将异常对象对应的异常事件上报为java崩溃事件。
第四方面,本公开提供了一种异常处理装置,所述装置包括:
接收模块,用于通过JNI接收java异常对象;其中,所述java异常对象用于表征基于JNI调用java代码发生的异常事件;
第二异常处理模块,用于调用预置的java异常处理程序,并利用所述java异常处理程序对所述java异常对象进行异常处理;其中,所述java异常处理程序用于将异常对象对应的异常事件上报为java崩溃事件。
第五方面,本公开提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当所述指令在终端设备上运行时,使得所述终端设备实现上述的方法。
第六方面,本公开提供了一种设备,包括:存储器,处理器,及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时,实现上述的方法。
第七方面,本公开提供了一种计算机程序产品,所述计算机程序产品包括计算机程序/指令,所述计算机程序/指令被处理器执行时实现上述的方法。
本公开实施例提供的技术方案与现有技术相比具有如下优点:
本公开实施例提供了一种异常处理方法,具体的,如果确定基于java本地接口JNI调用的java代码发生异常事件,则获取所述异常事件对应的java异常对象;其中,所述java异常对象用于表征所述异常事件。然后,删除所述异常事件对应的异常标识;所述异常标识用于表征java虚拟机处于异常工作状态。最终,基于所述JNI调用预置的java异常处理程序,并利用所述java异常处理程序对所述java异常对象进行异常处理;其中,所述java异常处理程序用于将异常对象对应的异常事件上报为java崩溃事件。本公开实施例通过调用java异常处理程序对java代码发生的异常事件进行处理,将java代码发生的异常事件上报为java崩溃事件,降低因异常事件类型上报错误导致的聚合分析结果不准确问题的发生概率。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。
为了更清楚地说明本公开实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本公开实施例提供的一种异常处理方法的流程图;
图2为本公开实施例提供的另一种异常处理方法的流程图;
图3为本公开实施例提供的一种异常处理装置的结构示意图;
图4为本公开实施例提供的另一种异常处理装置的结构示意图;
图5为本公开实施例提供的一种异常处理设备的结构示意图。
具体实施方式
为了能够更清楚地理解本公开的上述目的、特征和优点,下面将对本公开的方案进行进一步描述。需要说明的是,在不冲突的情况下,本公开的实施例及实施例中的特征可以相互组合。
在下面的描述中阐述了很多具体细节以便于充分理解本公开,但本公开还可以采用其他不同于在此描述的方式来实施;显然,说明书中的实施例只是本公开的一部分实施例,而不是全部的实施例。
java本地接口(Java Native Interface;JNI)允许java代码与其他语言编写的代码进行交互,在本地代码通过JNI调用java代码时,如果java代码发生异常,则理论上应该被认定为java崩溃事件,但是,目前是将上述场景下java代码发生的异常事件错误的认定为native崩溃事件,导致基于错误的认定进行后续的异常事件聚合分析时容易出现不准确等问题。
为此,本公开实施例提供了一种异常处理方法,通过调用java异常处理程序对java代码发生的异常事件进行处理,能够将上述场景下的java代码发生的异常事件上报为java崩溃事件,提高了后续对异常事件的聚合分析结果的准确性。
具体的,如果确定基于java本地接口JNI调用的java代码发生异常事件,则获取所述异常事件对应的java异常对象;其中,所述java异常对象用于表征所述异常事件。然后,删除所述异常事件对应的异常标识;所述异常标识用于表征java虚拟机处于异常工作状态。最终,基于所述JNI调用预置的java异常处理程序,并利用所述java异常处理程序对所述java异常对象进行异常处理;其中,所述java异常处理程序用于将异常对象对应的异常事件上报为java崩溃事件。
基于此,本公开实施例提供了一种异常处理方法,参考图1,为本公开实施例提供的一种异常处理方法的流程图,该方法包括:
S101:如果确定基于java本地接口JNI调用的java代码发生异常事件,则获取所述异常事件对应的java异常对象。
其中,所述java异常对象用于表征所述异常事件。
本公开实施例提供的异常处理方法应用于native层,即本地代码中,具体的,在确定基于JNI调用的java代码发生异常事件时,首先获取该异常事件对应的java异常对象。其中,java异常对象包含该异常事件的事件信息,例如,异常事件发生事件、事件特征等。
一种可选的实施方式中,在检测到基于JNI调用java代码后,确定被调用的所述java代码是否发生异常事件。也就是说,在JNI代码中调用任何一个java方法之后均检是否发生了异常事件。
一种可选的实施方式中,可以通过CheckException函数检查被调用的java代码是否发生异常事件。如果确定未发生异常事件,则返回检查结果即可,如果确定被调用的java代码发生异常事件,则可以通过ExceptionOccurred函数获取当前抛出的java异常对象,将该java异常对象记为throwable。
S102:删除所述异常事件对应的异常标识。
所述异常标识用于表征java虚拟机处于异常工作状态。
本公开实施例中,在确定基于JNI调用的java代码发生异常事件之后,还可以删除该异常事件对应的异常标识。
实际应用中,当运行于java虚拟机上的java代码发生异常事件时,为该异常事件标记异常标识,以表征该java虚拟机处于异常工作状态。为了使得该java虚拟机重新恢复正常工作状态,以便后续利用java虚拟机处理异常,本公开实施例将用于表征java虚拟机处于异常工作状态的异常标识删除。
一种可选的实施方式中,可以调用ExceptionClear函数清除当前的异常标识,具体的,清除当前的异常标识的目的是为了后续可以继续调用java代码。
S103:基于所述JNI调用预置的java异常处理程序,并利用所述java异常处理程序对所述java异常对象进行异常处理。
其中,所述java异常处理程序用于将异常对象对应的异常事件上报为java崩溃事件。
本公开实施例中,在删除异常标识以及获取到java异常对象之后,基于JNI调用预置的java异常处理程序。由于java异常处理程序用于将异常对象对应的异常事件上报为java崩溃事件,因此,本公开实施例可以通过调用java异常处理程序处理java异常对象,可以将该java异常对象对应的异常事件上报为java崩溃事件。
一种可选的实施方式中,可以基于JNI调用预设异常解决类中的预设java方法,并将java异常对象传递至该预设java方法,并利用该预设java方法调用预置的java异常处理程序,将该java异常对象传递至该java异常处理程序,并利用该java异常处理程序对该java异常对象进行异常处理,将该java异常对象对应的异常事件上报为java崩溃事件。
实际应用中,为了使得其他线程也能够使用JNIExceptionHelper类的引用,可以将预设异常解决类设置为全局引用。另外,为了后续其他线程也能够对预设异常解决类中的所述预设java方法进行调用,可以预先获取到预设异常解决类中的预设java方法的标识,以便后续基于该标识对其进行调用。
一种可选的实施方式中,可以预先定义JNIExecptionHelper类,作为预设异常解决类,在JNIExecptionHelper类中声明handleJNIException方法,作为预设异常解决类中的预设java方法。
另外,在JNIExecptionHelper类中还声明了一个名为init的本地方法,即init方法。在初始化阶段可以调用JNIExecptionHelper类中init方法,将JNIExecptionHelper类的native本地层引用通过NewGlobalRef函数转化为全局引用,并记为clz保存下来,以便JNIExecptionHelper类的handleJNIException方法能够在其他线程被调用。
另外,本公开实施例还可以调用GetStaticMethodID函数得到handleJNIException方法的id,并记为midHandleJNIException保存下来。
实际应用中,可以基于保存下来的midHandleJNIException,通过JNI调用JNIExecptionHelper类中的handleJNIException方法,以便利用handleJNIException方法调用预置的java异常处理程序,并将java异常对象传递至java异常处理程序后,由java异常处理程序对java异常对象进行异常处理,从而将java异常对象对应的异常事件上报为java崩溃事件。
本公开实施例提供的异常处理方法中,在确定基于java本地接口JNI调用的java代码发生异常事件时,获取所述异常事件对应的java异常对象;其中,所述java异常对象用于表征所述异常事件。然后,删除所述异常事件对应的异常标识;所述异常标识用于表征java虚拟机处于异常工作状态。最终,基于所述JNI调用预置的java异常处理程序,并利用所述java异常处理程序对所述java异常对象进行异常处理;其中,所述java异常处理程序用于将异常对象对应的异常事件上报为java崩溃事件。本公开实施例通过调用java异常处理程序对java代码发生的异常事件进行处理,能够将上述场景下的java代码发生的异常事件上报为java崩溃事件,提高了后续对异常事件的聚合分析结果的准确性。
基于上述实施例,本公开实施例还提供了一种异常处理方法,参考图2,为本公开实施例提供的另一种异常处理方法的流程图,该方法应用于java层,即java代码中。具体的,该方法包括:
S201:通过JNI接收java异常对象。
其中,所述java异常对象用于表征基于JNI调用java代码发生的异常事件。
本公开实施例中,在基于JNI调用java代码发生异常事件后,可以通过JNI接收该异常事件对应的java异常对象,用于后续对该异常事件的处理。
一种可选的实施方式中,JNIExecptionHelper类中的handleJNIException方法可以通过JNI接收java异常对象throwable,并将throwable记为jthrowable。
S202:调用预置的java异常处理程序,并利用所述java异常处理程序对所述java异常对象进行异常处理;其中,所述java异常处理程序用于将异常对象对应的异常事件上报为java崩溃事件。
本公开实施例中,NIExecptionHelper类中的handleJNIException方法获取到jthrowable之后,可以通过Thread类的getDefaultUncaughtExceptionHandler方法,获取当前的java异常处理器,即本公开实施例中预置的java异常处理程序,记为currentHandler。
实际应用中,首先确定currentHandler是否为空,如果为空,则说明当前currentHandler不可用,如果不为空,则可以调用currentHandler的uncaughtException方法,并将通过调用Thread类的currentThread方法获取到的当前线程对象和jthrowable作为参数传递给currentHandler的uncaughtException方法,用于实现对jthrowable的异常处理。
由于currentHandler为java崩溃监控程序在启动时默认注册的java异常处理程序,因此利用currentHandler处理异常事件,则会将该异常事件上报为java崩溃事件。具体的,通过调用currentHandler的uncaughtException方法可以通知java崩溃监控程序当前发生了java崩溃事件,随后可以进行崩溃信息的收集,并在合适的时机上报收集到的崩溃信息,用于对本次java崩溃事件进行分析。
基于上述方法实施例,本公开还提供了一种异常处理装置,参考图3,为本公开实施例提供的一种异常处理装置的结构示意图,所述装置包括:
获取模块301,用于在确定基于java本地接口JNI调用的java代码发生异常事件时,获取所述异常事件对应的java异常对象;其中,所述java异常对象用于表征所述异常事件;
删除模块302,用于删除所述异常事件对应的异常标识;所述异常标识用于表征java虚拟机处于异常工作状态;
第一异常处理模块303,用于基于所述JNI调用预置的java异常处理程序,并利用所述java异常处理程序对所述java异常对象进行异常处理;其中,所述java异常处理程序用于将异常对象对应的异常事件上报为java崩溃事件。
一种可选的实施方式中,所述装置还包括:
确定模块,用于在检测到基于JNI调用java代码后,确定被调用的所述java代码是否发生异常事件。
一种可选的实施方式中,所述第一异常处理模块,包括:
第一传递子模块,用于基于所述JNI调用预设异常解决类中的预设java方法,并将所述java异常对象传递至所述预设java方法;
第二传递子模块,用于利用所述预设java方法调用预置的java异常处理程序,并将所述java异常对象传递至所述java异常处理程序;
第一异常处理子模块,用于利用所述java异常处理程序对所述java异常对象进行异常处理。
一种可选的实施方式中,所述第一异常处理模块,还包括:
设置子模块,用于将预设异常解决类设置为全局引用;
获取子模块,用于获取所述预设异常解决类中的预设java方法的标识;
相应的,所述第一传递子模块,具体用于:
基于所述预设java方法的标识,通过所述JNI调用预设异常解决类中的所述预设java方法。
在上述实施例的基础上,本公开还提供了另一种异常处理装置,参考图4,为本公开实施例提供的另一种异常处理装置的结构示意图,所述装置包括:
接收模块401,用于通过JNI接收java异常对象;其中,所述java异常对象用于表征基于JNI调用java代码发生的异常事件;
第二异常处理模块402,用于调用预置的java异常处理程序,并利用所述java异常处理程序对所述java异常对象进行异常处理;其中,所述java异常处理程序用于将异常对象对应的异常事件上报为java崩溃事件。
本公开实施例提供的异常处理装置中,在确定基于java本地接口JNI调用的java代码发生异常事件时,获取所述异常事件对应的java异常对象;其中,所述java异常对象用于表征所述异常事件。然后,删除所述异常事件对应的异常标识;所述异常标识用于表征java虚拟机处于异常工作状态。最终,基于所述JNI调用预置的java异常处理程序,并利用所述java异常处理程序对所述java异常对象进行异常处理;其中,所述java异常处理程序用于将异常对象对应的异常事件上报为java崩溃事件。本公开实施例通过调用java异常处理程序对java代码发生的异常事件进行处理,能够将上述场景下的java代码发生的异常事件上报为java崩溃事件,提高了后续对异常事件的聚合分析结果的准确性。
除了上述方法和装置以外,本公开实施例还提供了一种计算机可读存储介质,计算机可读存储介质中存储有指令,当所述指令在终端设备上运行时,使得所述终端设备实现本公开实施例所述的异常处理方法。
本公开实施例还提供了一种计算机程序产品,包括计算机程序/指令,其特征在于,该计算机程序/指令被处理器执行时实现本公开实施例所述的异常处理方法。
另外,本公开实施例还提供了一种异常处理设备,参见图5所示,可以包括:
处理器501、存储器502、输入装置503和输出装置504。异常处理设备中的处理器501的数量可以一个或多个,图5中以一个处理器为例。在本公开的一些实施例中,处理器501、存储器502、输入装置503和输出装置504可通过总线或其它方式连接,其中,图5中以通过总线连接为例。
存储器502可用于存储软件程序以及模块,处理器501通过运行存储在存储器502的软件程序以及模块,从而执行异常处理设备的各种功能应用以及数据处理。存储器502可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序等。此外,存储器502可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。输入装置503可用于接收输入的数字或字符信息,以及产生与异常处理设备的用户设置以及功能控制有关的信号输入。
具体在本实施例中,处理器501会按照如下的指令,将一个或一个以上的应用程序的进程对应的可执行文件加载到存储器502中,并由处理器501来运行存储在存储器502中的应用程序,从而实现上述异常处理设备的各种功能。
需要说明的是,在本文中,诸如“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上所述仅是本公开的具体实施方式,使本领域技术人员能够理解或实现本公开。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本公开的精神或范围的情况下,在其它实施例中实现。因此,本公开将不会被限制于本文所述的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

Claims (9)

1.一种异常处理方法,其特征在于,应用于本地代码native层,所述方法包括:
如果确定基于java本地接口JNI调用的java代码发生异常事件,则获取所述异常事件对应的java异常对象;其中,所述java异常对象用于表征所述异常事件,所述java异常对象包含所述异常事件的事件信息,所述事件信息包括所述异常事件的发生时间和事件特征;
删除所述异常事件对应的异常标识;所述异常标识用于表征java虚拟机处于异常工作状态;
基于所述JNI调用预置的java异常处理程序,并利用所述java异常处理程序对所述java异常对象进行异常处理;其中,所述java异常处理程序用于将异常对象对应的异常事件上报为java崩溃事件。
2.根据权利要求1所述的方法,其特征在于,所述如果确定基于java本地接口JNI调用的java代码发生异常事件,则获取所述异常事件对应的java异常对象之前,还包括:
在检测到基于JNI调用java代码后,确定被调用的所述java代码是否发生异常事件。
3.根据权利要求1所述的方法,其特征在于,所述基于所述JNI调用预置的java异常处理程序,并利用所述java异常处理程序对所述java异常对象进行异常处理,包括:
基于所述JNI调用预设异常解决类中的预设java方法,并将所述java异常对象传递至所述预设java方法;
利用所述预设java方法调用预置的java异常处理程序,并将所述java异常对象传递至所述java异常处理程序;
利用所述java异常处理程序对所述java异常对象进行异常处理。
4.根据权利要求3所述的方法,其特征在于,所述基于所述JNI调用预设异常解决类中的预设java方法之前,还包括:
将预设异常解决类设置为全局引用;
获取所述预设异常解决类中的预设java方法的标识;
相应的,所述基于所述JNI调用预设异常解决类中的预设java方法,包括:
基于所述预设java方法的标识,通过所述JNI调用预设异常解决类中的所述预设java方法。
5.一种异常处理方法,其特征在于,所述方法包括:
通过JNI接收java异常对象;其中,所述java异常对象用于表征基于JNI调用java代码发生的异常事件,所述java异常对象包含所述异常事件的事件信息,所述事件信息包括所述异常事件的发生时间和事件特征;
调用预置的java异常处理程序,并利用所述java异常处理程序对所述java异常对象进行异常处理;其中,所述java异常处理程序用于将异常对象对应的异常事件上报为java崩溃事件。
6.一种异常处理装置,其特征在于,应用于本地代码native层,所述装置包括:
获取模块,用于在确定基于java本地接口JNI调用的java代码发生异常事件时,获取所述异常事件对应的java异常对象;其中,所述java异常对象用于表征所述异常事件,所述java异常对象包含所述异常事件的事件信息,所述事件信息包括所述异常事件的发生时间和事件特征;
删除模块,用于删除所述异常事件对应的异常标识;所述异常标识用于表征java虚拟机处于异常工作状态;
第一异常处理模块,用于基于所述JNI调用预置的java异常处理程序,并利用所述java异常处理程序对所述java异常对象进行异常处理;其中,所述java异常处理程序用于将异常对象对应的异常事件上报为java崩溃事件。
7.一种异常处理装置,其特征在于,所述装置包括:
接收模块,用于通过JNI接收java异常对象;其中,所述java异常对象用于表征基于JNI调用java代码发生的异常事件,所述java异常对象包含所述异常事件的事件信息,所述事件信息包括所述异常事件的发生时间和事件特征;
第二异常处理模块,用于调用预置的java异常处理程序,并利用所述java异常处理程序对所述java异常对象进行异常处理;其中,所述java异常处理程序用于将异常对象对应的异常事件上报为java崩溃事件。
8.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有指令,当所述指令在终端设备上运行时,使得所述终端设备实现如权利要求1-5任一项所述的方法。
9.一种电子设备,其特征在于,包括:存储器,处理器,及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时,实现如权利要求1-5任一项所述的方法。
CN202110333171.6A 2021-03-29 2021-03-29 一种异常处理方法、装置、设备及存储介质 Active CN113032100B (zh)

Priority Applications (3)

Application Number Priority Date Filing Date Title
CN202110333171.6A CN113032100B (zh) 2021-03-29 2021-03-29 一种异常处理方法、装置、设备及存储介质
PCT/CN2022/078363 WO2022206253A1 (zh) 2021-03-29 2022-02-28 一种异常处理方法、装置、设备及存储介质
US18/283,696 US20240168865A1 (en) 2021-03-29 2022-02-28 Exception handling method and apparatus, device, and storage medium

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110333171.6A CN113032100B (zh) 2021-03-29 2021-03-29 一种异常处理方法、装置、设备及存储介质

Publications (2)

Publication Number Publication Date
CN113032100A CN113032100A (zh) 2021-06-25
CN113032100B true CN113032100B (zh) 2023-07-18

Family

ID=76452704

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110333171.6A Active CN113032100B (zh) 2021-03-29 2021-03-29 一种异常处理方法、装置、设备及存储介质

Country Status (3)

Country Link
US (1) US20240168865A1 (zh)
CN (1) CN113032100B (zh)
WO (1) WO2022206253A1 (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113032100B (zh) * 2021-03-29 2023-07-18 北京字节跳动网络技术有限公司 一种异常处理方法、装置、设备及存储介质

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7496615B2 (en) * 2004-03-11 2009-02-24 International Business Machines Corporation Method, system and article for detecting critical memory leaks causing out-of-memory errors in Java software
US8185876B2 (en) * 2008-02-26 2012-05-22 International Business Machines Corporation Method and implementation for constructing of corrected java native code
US8074116B2 (en) * 2009-05-06 2011-12-06 Microsoft Corporation Exception raised notification
CN101794243A (zh) * 2010-03-18 2010-08-04 浪潮电子信息产业股份有限公司 一种利用操作系统结构化异常处理加固java应用程序的方法
CN108334415A (zh) * 2017-01-20 2018-07-27 百度在线网络技术(北京)有限公司 一种容错处理方法、装置、终端及存储介质
CN108763060A (zh) * 2018-04-27 2018-11-06 广州华多网络科技有限公司 Android系统中Native层崩溃溯源方法、装置、存储介质及终端
CN111414270B (zh) * 2020-03-24 2023-05-09 北京字节跳动网络技术有限公司 一种异常处理方法及装置
CN113032100B (zh) * 2021-03-29 2023-07-18 北京字节跳动网络技术有限公司 一种异常处理方法、装置、设备及存储介质

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
JNI Crash:异常定位与捕获处理;JackMeGo;《https://www.jianshu.com/p/b6129f110e86》;20180706;1-7 *
JNI异常处理;抓住彩虹的人;《https://zhuanlan.zhihu.com/p/158727336》;20200711;1-3 *
JNI异常处理;淡淡的宁静,;《https://blog.csdn.net/b1480521874/article/details/83040400》;20181013;1-6 *

Also Published As

Publication number Publication date
US20240168865A1 (en) 2024-05-23
WO2022206253A1 (zh) 2022-10-06
CN113032100A (zh) 2021-06-25

Similar Documents

Publication Publication Date Title
CN108628751B (zh) 一种无用依赖项检测方法及装置
US8250543B2 (en) Software tracing
US20130185708A1 (en) Determining compatibility of an application with different versions of an operating system
CN106294134A (zh) 代码的崩溃定位方法及装置
CN108038039B (zh) 记录日志的方法及微服务系统
CN113032100B (zh) 一种异常处理方法、装置、设备及存储介质
CN111767056A (zh) 一种源码编译方法、可执行文件运行方法及终端设备
CN110941534A (zh) 检测web应用第三方代码调用的方法及系统
CN110231921B (zh) 日志打印方法、装置、设备及计算机可读存储介质
CN116450398A (zh) 异常回溯方法、装置、设备和介质
CN111694734A (zh) 软件接口校验方法、装置及计算机设备
CN113204453B (zh) 基于异构系统的异常反馈方法、设备、介质及程序产品
CN115587046A (zh) 代码异常的处理方法、装置、存储介质及计算机设备
CN115756935A (zh) 嵌入式软件系统的异常故障定位方法、装置及设备
CN113986622A (zh) Sdk异常的自检方法、装置、介质和计算设备
CN111414270B (zh) 一种异常处理方法及装置
CN114936368A (zh) 一种Java内存木马检测方法、终端设备及存储介质
CN114791884A (zh) 测试环境的构建方法、装置、存储介质及电子设备
CN113282906B (zh) 权限检测方法、装置、终端及存储介质
CN110740062B (zh) 断点续传方法和装置
CN113791824A (zh) 一种终端设备的外设驱动加载方法、系统及介质
CN113342660A (zh) 文件测试方法、装置、系统、电子设备及可读存储介质
CN112114987A (zh) 运行环境的异常检测方法、装置、智能终端及存储介质
CN116541253B (zh) 应用的检测方法、系统、终端设备和可读存储介质
CN116501414B (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
GR01 Patent grant
GR01 Patent grant