CN116126735A - 一种代码异常处理方法、装置、设备及存储介质 - Google Patents
一种代码异常处理方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN116126735A CN116126735A CN202310392270.0A CN202310392270A CN116126735A CN 116126735 A CN116126735 A CN 116126735A CN 202310392270 A CN202310392270 A CN 202310392270A CN 116126735 A CN116126735 A CN 116126735A
- Authority
- CN
- China
- Prior art keywords
- code
- code block
- exception
- exception handling
- interface address
- 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.)
- Granted
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
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3692—Test management for test results analysis
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Advance Control (AREA)
Abstract
本申请提供了一种代码异常处理方法、装置、设备及存储介质,应用于程序异常处理领域。包括:执行第一代码块,根据第一代码块中的第一异常监控代码语句,确定第一接口地址并将第一接口地址推入异常处理栈,当执行第一代码块出现异常时,根据第一接口地址调用第一异常处理代码块进行异常处理。这样,将调用处理异常代码块的接口地址推入异常处理栈,使异常处理代码块与代码块分开存储,避免将异常处理代码编入程序代码,减少了程序代码中的代码量。当代码块的执行过程中出现异常,可以直接根据异常处理栈中的接口地址调用异常处理代码块,对异常进行处理;若代码块的执行过程中未出现异常,则无需调用异常处理代码块,仅执行代码块中的代码语句。
Description
技术领域
本申请涉及程序异常处理技术领域,尤其涉及一种代码异常处理方法、装置、设备及存储介质。
背景技术
在计算机领域,计算机程序是一组计算机能识别和执行的指令,运行于计算机上。计算机程序代码设计的要求之一就是要保证程序代码的健壮性,希望程序代码在执行的过程中能够不出或少出问题。当程序代码执行过程中出现问题,也就是出现异常,可能会导致程序崩溃,使***不能正常运行。为了保护程序代码的顺利执行,***运行的稳定,通常需要在程序代码的开发过程中设计异常处理的相关代码。
相关技术中,通过在编程语言中设计专用的关键字,并利用关键字设计针对异常的代码,然后将用于监控处理异常的代码编入程序代码,例如,在编程开发过程中,将对异常监控或异常处理的语句编写在接口函数的程序代码中,以实现在程序执行过程中对异常进行监控处理。但这种方法会在原有的程序代码中编入异常监控或异常处理的代码,需要在编译阶段统计所有的异常处理生成异常处理位置、类型表,导致程序的代码或字节码量过大。
发明内容
有鉴于此,本申请实施例提供了一种代码异常处理方法、装置、设备及存储介质,旨在将分散在程序代码中的异常处理代码进行统一编写存储,简化程序代码。
第一方面,本申请实施例提供了一种基于栈的程序异常处理方法,所述方法包括:
执行第一代码块,所述第一代码块为一组代码语句;
根据所述第一代码块中的第一异常监控代码语句,确定用于处理所述第一应用程序代码执行过程中的异常的第一异常处理代码块对应的第一接口地址;
将所述第一接口地址推入异常处理栈,所述异常处理栈用于存储异常处理代码块对应的接口地址;
当所述第一代码块的执行过程中出现异常时,从所述异常处理栈弹出所述第一接口地址;
根据所述第一接口地址调用所述第一异常处理代码块进行异常处理。
可选的,所述第一代码块包括调用第二代码块代码语句,所述方法还包括:
根据所述调用第二代码块代码语句,调用第二代码块。
可选的,所述第二代码块包括第二异常监控代码语句,所述调用第二代码块,包括:
根据所述第二异常监控代码语句,确定用于处理所述第二代码块执行过程中的异常的第二异常处理代码块对应的第二接口地址;
将所述第二接口地址推入所述异常处理栈。
可选的,所述第二代码块不包括第二异常监控代码语句,所述调用第二代码块,包括:
当所述第二代码块的执行过程中出现异常时,从所述异常处理栈弹出所述第一接口地址;
根据所述第一接口地址调用所述第一异常处理代码块进行异常处理。
可选的,所述调用所述第二代码块,包括:
当所述第二代码块的执行过程中出现异常时,从所述异常处理栈弹出所述第二接口地址;
根据所述第二接口地址调用所述第二代码块进行异常处理。
可选的,所述第一代码块中不包括所述第一异常监控代码语句,所述方法还包括:
当所述第一代码块的执行过程中出现异常时,调用预设异常处理代码块进行异常处理。
可选的,所述方法还包括:
完成异常处理后,根据异常处理结果继续执行代码块。
第二方面,本申请实施例提供了一种基于栈的程序异常处理装置,所述装置包括:
执行模块,用于执行第一代码块,所述第一代码块为一组代码语句;
确定模块,用于根据所述第一代码块中的第一异常监控代码语句,确定用于处理所述第一应用程序代码执行过程中的异常的第一异常处理代码块对应的第一接口地址;
推入模块,用于将所述第一接口地址推入异常处理栈,所述异常处理栈用于存储异常处理代码块对应的接口地址;
弹出模块,用于当所述第一代码块的执行过程中出现异常时,从所述异常处理栈弹出所述第一接口地址;
处理模块,用于根据所述第一接口地址调用所述第一异常处理代码块进行异常处理。
可选的,所述第一代码块包括调用第二代码块代码语句,所述装置还包括:
调用模块,用于根据所述调用第二代码块代码语句,调用第二代码块。
可选的,所述第二代码块包括第二异常监控代码语句,所述调用模块具体用于:
根据所述第二异常监控代码语句,确定用于处理所述第二代码块执行过程中的异常的第二异常处理代码块对应的第二接口地址;
将所述第二接口地址推入所述异常处理栈。
可选的,所述第二代码块不包括第二异常监控代码语句,所述调用模块具体用于,包括:
当所述第二代码块的执行过程中出现异常时,从所述异常处理栈弹出所述第一接口地址;
根据所述第一接口地址调用所述第一异常处理代码块进行异常处理。
可选的,所述调用模块具体用于:
当所述第二代码块的执行过程中出现异常时,从所述异常处理栈弹出所述第二接口地址;
根据所述第二接口地址调用所述第二代码块进行异常处理。
可选的,所述第一代码块中不包括所述第一异常监控代码语句,所述装置还包括:
保护模块,用于当所述第一代码块的执行过程中出现异常时,调用预设异常处理代码块进行异常处理。
可选的,所述装置还包括:
恢复模块,用于完成异常处理后,根据异常处理结果继续执行代码块。
第三方面,本申请实施例提供了一种设备,所述设备包括存储器和处理器,所述存储器用于存储指令或代码,所述处理器用于执行所述指令或代码,以使所述设备执行前述第一方面中任一项所述的代码异常处理方法。
第四方面,本申请实施例提供了一种计算机存储介质,所述计算机存储介质中存储有代码,当所述代码被运行时,运行所述代码的设备实现前述第一方面中任一项所述的代码异常处理方法。
本申请实施例提供了一种代码异常处理方法、装置、设备及存储介质。在执行所述方法时,先执行第一代码块,并根据第一代码块中的第一异常监控代码语句确定第一接口地址,进而将第一接口地址推入异常处理栈;然后,当第一代码块的执行过程中出现异常时,从异常处理栈弹出第一接口地址;最后,根据第一接口地址调用第一异常处理代码块处理异常,以完成异常处理。这样,通过将异常处理代码块与代码块分开存储,避免将异常处理代码编入程序代码,能够减少程序代码中的代码量。当程序代码的执行过程中出现异常,可以直接从异常处理栈中的接口地址调用异常处理代码块,从而对程序代码执行过程中出现的异常进行处理;若程序代码的执行过程中未出现异常,则无需调用异常处理代码块,仅执行代码块中的代码语句。将分散在程序代码中的异常处理代码进行统一编写存储,达到了简化程序代码的效果。如此,可以减少程序代码中的代码量。
附图说明
为更清楚地说明本实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例提供的一种代码异常处理方法的流程图;
图2为本申请实施例提供的一种代码块的示意图;
图3为本申请实施例提供的一种程序模块的示意图;
图4为本申请实施例提供的一种第一代码块的示意图;
图5为本申请实施例提供的一种异常处理栈的示意图;
图6为本申请实施例提供的第一种程序异常处理的示意图;
图7为本申请实施例提供的一种恢复执行代码块的示意图;
图8为本申请实施例提供的一种代码块调用其他代码块的示意图;
图9为本申请实施例提供的一种调用第二代码块的示意图;
图10为本申请实施例提供的另一种异常处理栈的示意图;
图11为本申请实施例提供的第二种代码异常处理的示意图;
图12为本申请实施例提供的第三种代码异常处理的示意图;
图13为本申请实施例提供的第四种代码异常处理的示意图;
图14为本申请实施例提供的一种异常类型标识的示意图;
图15为本申请实施例提供的一种计算机实现代码异常处理的示意图;
图16为本申请实施例提供的一种基于代码异常处理装置的结构示意图。
具体实施方式
在计算机技术领域中,异常是执行应用程序代码时,由虚拟机或者运行环境发现程序数据错误,一般被分为普通异常和致命异常,普通异常不会破坏程序执行的数据和流程,然而致命异常则可能会导致程序崩溃,为了保护当前程序的顺利执行,通常需要对执行过程中产生的异常进行处理,然后根据处理决定应用程序的后续运行流程。
在相关技术中,通过在编程语言中增加关键字,并基于关键字来构建异常处理机制,如try、catch和finally。try部分用于确定需要监控异常的代码范围,try后面的复合语句称为受保护段,受保护段的代码有可能出现异常,因此在try部分进行异常检测。catch部分则负责处理try监控范围内产生的异常,用于捕获异常和处理异常,没有异常产生,这部分代码不需要执行,在每个catch后的括弧内,都要指定一个“异常类型”,表明它可以捕获哪种类型的异常。一旦捕获到异常,就通过异常处理语句来进行处理。finally部分用于执行给定的语句,无论是否产生异常,无论是否有异常需要处理,这部分代码都要执行。在编程语言中,针对异常的关键字需要配对使用,如:try和catch配对使用,try和finally配对使用,或者try、多个catch和finally一起使用。但是,异常处理语句或异常处理代码块往往是十分复杂的,并且存在同一异常处理语句或异常处理代码块需要在应用程序中重复多次的情况,这会使应用程序的代码量大大增加,代码的结构也会变得复杂,使得计算机的运行压力增大。
针对上述技术问题,本申请所提供的基于栈的程序异常处理方法,通过将异常处理代码块与所执行的代码块分开存储,将异常处理代码块对应的接口地址存储在异常处理栈中,能够减少程序代码中的代码量。当程序代码的执行过程中出现异常,可以直接根据异常处理栈中的接口地址调用对应的异常处理代码块,利用异常处理代码块对程序代码执行过程中出现的异常进行处理;若应用程序的执行过程中未出现异常,则无需调用异常处理代码块,减少执行的代码量,简化程序逻辑。将分散在程序代码中的异常处理代码进行统一存储,达到了简化程序代码的效果。而且,虽然异常处理栈中的异常处理代码块代码与应用程序代码有各自的运行堆栈,但异常处理栈并非独立存在,可以作为应用程序的附加部分同处于一个运行环境,当应用程序执行出现异常时,供计算机查询接口地址并调用异常处理代码块,节省应用程序中的代码空间。
显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
参见图1,图1为本申请实施例提供的一种代码异常处理方法的流程图,包括:
S101:执行第一代码块。
第一代码为一组代码语句,可以理解的是,在本申请中的其他代码块同样由一组代码语句组成。参见图2,图2为本申请实施例提供的一种代码块的示意图。上述图2中,代码块中各代码语句依次排列,当然,在执行代码块时应当按照代码语句的排列顺序依次执行,本申请实施例对代码块中代码语句的数量n(n≥1)和代码语句的排列顺序不做任何限定,可以根据需要进行设置。
在本申请实施例中,第一代码块可以与其他的代码块以及异常处理代码块共同存储于程序模块中,在执行步骤S101时,计算机直接从程序模块中调用第一代码块。具体可参见图3,图3为本申请实施例提供的一种程序模块的示意图。
S102:根据第一代码块中的第一异常监控代码语句,确定用于处理第一应用程序代码执行过程中的异常的第一异常处理代码块对应的第一接口地址。
第一异常处理代码块用于处理第一代码块执行过程中出现的异常。第一接口地址为用于调用第一异常处理代码块的接口的地址。第一异常监控代码语句用于指示将第一异常处理代码块作为第一代码块的异常处理方法,并设置异常监控状态。异常监控范围为第一异常监控代码语句的下一条代码语句到函数退出。作为一种示例,第一异常监控代码语句可以为“pushException(void*)method_2”,“method_2”即为第一异常处理代码块。参见图4,图4为本申请实施例提供的一种第一代码块的示意图。
通过第一异常监控代码语句,能够确定出用于处理第一代码块执行过程中出现的异常的异常处理代码块对应的接口地址,即第一异常处理代码块对应的第一接口地址。
S103:将第一接口地址推入异常处理栈。
异常处理栈用于存储异常处理代码块对应的接口地址。参见图5,图5为本申请实施例提供的一种异常处理栈的示意图。当根据第一异常监控代码语句确定出第一异常处理代码块对应的第一接口地址后,将第一接口地址推入异常处理栈,对第一代码块执行过程中出现的异常捕获处理。
栈(stack)又名堆栈,是一种运算受限的线性表。限定仅在表尾进行***和删除操作的线性表。进行***或删除的一端被称为栈顶,相对地,把另一端称为栈底。向一个栈***新元素又称作进栈、入栈或压栈,将新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,将栈顶元素删除,使被删除的栈顶元素相邻的元素成为新的栈顶元素。因此,将第一接口地址推入异常处理栈,实质上是将第一接口地址压入异常处理栈的栈顶。
在本申请实施例中,异常处理栈并非独立存在,可以作为应用程序的附加部分同处于一个运行环境,也就是说,同一运行环境中同时存在两个栈,其中一个为异常处理栈,另一个为代码块的运行堆栈。当程序代码执行出现异常时,计算机可以利用异常处理栈查询接口地址调用接口地址对应的异常处理代码块。
S104:当第一代码块的执行过程中出现异常时,从异常处理栈弹出第一接口地址。
当第一代码块的执行过程中出现异常时,对应地从异常处理栈弹出步骤S103中所推入的第一异常处理代码块对应的第一接口地址。参见图6,图6为本申请实施例提供的第一种程序异常处理的示意图。以图6为例,当第一代码块的执行过程中出现异常,则抛出异常,从异常处理栈弹出第一接口地址,以调用第一异常处理代码块。
S105:根据第一接口地址调用第一异常处理代码块进行异常处理。
参见图6,当弹出第一接口地址后,根据第一接口地址调用第一异常处理代码块,从而执行第一异常处理代码块对第一代码块执行过程中出现的异常进行处理。
在一种可行的实现方式中,所述方法还包括:
完成异常的处理后,根据异常处理结果继续执行代码块。
在异常处理完成后,异常处理代码块对应的异常处理接口会返回异常处理结果。异常处理结果可以通过字符表示,如0、1和2。根据异常处理结果判断需要回退到的层级。例如,若异常处理结果为0,则表示回退到出现异常的代码块中的下一条代码语句继续执行,若异常处理结果为非0字符,该非0字符即代表需要回退的层级,即按照函数调用栈中记录的函数调用层级向上回退,然后继续执行该层级对应的代码块中抛出异常的下一条代码语句。其中,函数调用栈是代码块运行所需的栈。
例如:第一代码块的代码语句中调用第二代码块,第二代码块的代码语句中调用了第三代码块,而第三代码块的执行过程中出现异常。异常处理完成后,若返回的异常处理结果为0,则回退到第三代码块的代码语句中抛出异常的下一条代码语句;若返回的异常处理结果为1,则回退到第二代码块的代码语句中调用第三代码块的下一条代码语句,若返回的异常处理结果为2,则回退到第一代码块的代码语句中调用第二代码块的下一条代码语句。如果异常处理结果的返回值大于函数调用层级,则退出执行代码块。
参见图7,图7为本申请实施例提供的一种恢复执行代码块的示意图。当执行第一异常处理代码块处理完第一代码块执行过程中出现的异常后,返回异常处理结果为0,则继续执行第一代码块中抛出异常代码语句的下一条代码语句4。
本申请实施例提供了一种代码异常处理方法、装置、设备及存储介质。在执行所述方法时,先执行第一代码块,并根据第一代码块中的第一异常监控代码语句确定第一接口地址,进而将第一接口地址推入异常处理栈;然后,当第一代码块的执行过程中出现异常时,从异常处理栈弹出第一接口地址;最后,根据第一接口地址调用第一异常处理代码块处理异常,以完成异常处理。这样,通过将异常处理代码块与代码块分开存储,避免将异常处理代码编入程序代码,能够减少程序代码中的代码量。当程序代码的执行过程中出现异常,可以直接从异常处理栈中的接口地址调用异常处理代码块,从而对程序代码执行过程中出现的异常进行处理;若程序代码的执行过程中未出现异常,则无需调用异常处理代码块,仅执行代码块中的代码语句。将分散在程序代码中的异常处理代码进行统一编写存储,达到了简化程序代码的效果。如此,可以减少程序代码中的代码量。
在程序代码中,存在着代码块相互调用的情况,针对这种情况,本申请提供一种实施例,所述第一代码块包括调用第二代码块代码语句,所述方法还包括:
根据所述调用第二代码块代码语句,调用第二代码块。
参见图8,图8为本申请实施例提供的一种代码块调用其他代码块的示意图。第一代码块中包括调用第二代码块语句,当按照代码语句的排列顺序执行到调用第二代码块代码语句时,调用第二代码块。可以理解的是,当第二代码块调用完成后,返回异常处理结果(本实施例以异常处理结果为0作为示例),根据异常处理结果返回执行第一代码块中调用第二代码块代码语句的下一条代码语句4。
在上文中说明过,应用程序是由一组代码语句组成,与第一代码块相同,第二代码块中也可以包括第二异常监控代码语句。在第一代码块包括调用第二代码块代码语句的基础上,本申请提供了第二代码块中包括第二异常监控代码语句和不包括第二异常监控代码语句的两个实施例。
在本申请提供的一种实施例中,所述第二代码块包括第二异常监控代码语句,所述调用第二代码块,包括:
根据所述第二异常监控代码语句,确定用于处理所述第二代码块执行过程中的异常的第二异常处理代码块对应的第二接口地址;
将所述第二接口地址推入所述异常处理栈。
参见图9,图9为本申请实施例提供的一种调用第二代码块的示意图。如图9所示,第二代码块中包括第二异常监控代码语句。第二异常处理代码块用于处理第二代码块执行过程中出现的异常。第二接口地址为用于调用第二异常处理代码块的接口的地址。第二异常监控代码语句用于指示将第二异常处理代码块作为第二代码块的异常处理方法,并设置异常监控状态。异常监控范围为第二异常监控代码语句的下一条代码语句到函数退出。当执行到第二异常监控代码语句,能够确定出用于处理第二代码块执行中出现的异常的异常处理代码块对应的接口地址,即第二异常处理代码块对应的第二接口地址。作为一种示例,第二异常监控代码语句可以为“pushException(void*)method_3”,“method_3”即为第二异常处理代码块。在确定第二异常处理代码块对应的第二接口地址后,将第二接口地址推入异常处理栈。参见图10,图10为本申请实施例提供的另一种异常处理栈的示意图。如图10所示,将第二异常处理代码块对应的第二接口地址推入异常处理栈的栈顶后,第一接口地址位于栈底,第二接口地址位于栈顶。
在第二代码块包括第二异常监控代码语句的情况下,当第二应用程序执行过程中出现异常,可以利用第二异常处理代码块进行处理。在本申请提供的一种可行的实现方式中,所述调用所述第二代码块,包括:
当所述第二代码块的执行过程中出现异常时,从所述异常处理栈弹出所述第二接口地址;
根据所述第二接口地址调用所述第二代码块进行异常处理。
参见图11,图11为本申请实施例提供的第二种代码异常处理的示意图。如图11所示,实线表示代码块的执行过程,虚线表示出现异常时,利用异常处理代码块处理异常的执行过程。当第二代码块的执行过程中出现异常时,抛出异常,从异常处理栈的栈顶弹出第二接口地址,根据第二接口地址调用第二异常处理代码块处理异常。并且,当执行第二异常处理代码块处理完第二代码块执行过程中出现的异常后,返回异常处理结果(本实施例以异常处理结果为0作为示例),根据异常处理结果返回执行第二代码块中抛出异常代码语句的下一条代码语句3,即继续执行第二代码块。
在一些情况下,可能存在执行第二异常处理代码块处理异常的过程中出现异常的情况,本申请提供了一种实施例,当第二异常处理代码块的执行过程中出现异常时,抛出异常,从异常处理栈的栈顶弹出第一接口地址,根据第一接口地址对第二异常处理代码块执行过程中出现的异常处理。
参见图12,图12为本申请实施例提供的第三种代码异常处理的示意图。如图12所示,实线表示代码块的执行过程,虚线表示出现异常时,利用异常处理代码块处理异常的执行过程。当执行第二异常处理代码块处理异常的过程中出现异常或异常严重无法处理时,需要继续从异常处理栈弹出接口地址,而在处理第二代码块执行过程中出现的异常时,已经从异常处理栈的栈顶弹出第二接口地址,当前异常处理栈的栈顶为第一接口地址,如图5所示。从异常处理栈的栈顶弹出第一接口地址,并根据第一接口地址调用第一异常处理代码块对第二异常处理代码块执行过程中出现的异常进行处理。
通过将异常处理代码块对应的接口地址存储在异常处理栈中,当代码块或异常处理代码块执行过程出现异常,能够从异常处理栈中调用上一层级的接口地址。另外,异常处理栈中的接口地址是按照逻辑顺序依次推入到栈顶的,所以可以依次弹出。
并且,在相关技术中,如果重复执行某一异常处理代码块,则需要将该异常处理代码块重复写入到代码块中。而通过本申请所提供的方法,无需将异常处理代码块重复写入代码块中,将异常处理代码块对应的接口地址统一存储在异常处理栈中即可实现异常处理。
在本申请提供的另一种实施例中,所述第二代码块不包括第二异常监控代码语句,所述调用第二代码块,包括:
当所述第二代码块的执行过程中出现异常时,从所述异常处理栈弹出所述第一接口地址;
根据所述第一接口地址调用所述第一异常处理代码块进行异常处理。
参见图13,图13为本申请实施例提供的第四种代码异常处理的示意图。如图13所示,实线表示代码块的执行过程,虚线表示出现异常时,利用异常处理代码块处理异常的执行过程。在本申请实施例中,若第二代码块所使用的异常处理方法与第一代码块所使用的异常处理方法相同,则无需在第二代码块中设置第二异常监控代码语句,异常处理栈的存储状态如图5所示。当第二代码块执行过程中出现异常时,从异常处理栈的栈顶弹出第一异常处理代码块对应的第一接口地址,根据第一接口地址调用第一异常处理代码块对第二代码块执行过程中出现的异常进行处理。
本申请实施例所提供的代码异常处理方法,无需使用针对异常的关键字即可实现异常监控处理,在不支持异常处理机制的编程语言环境,基于栈对程序代码进行异常处理,既能实现代码运行异常流程控制,又可以处理数据或运行环境异常,满足异常处理需求。相比于相关技术中支持异常处理机制的编程语言环境而言,通过本申请实施例提供的方法,将分散在程序代码中的异常处理代码对应的接口地址统一存储到异常处理栈中,简化应用程序代码,节省代码空间开销。
本申请实施例还提供了一种异常类型标识的示意图。如图14所示,异常类型标识共有16位,从右到左依次标号,第0-7位为异常编号,第8-13位为模块编号,第14-15位为特殊标志。其中,特殊标志包括两种情况:当第14-15位全为1时,代表该异常属于普通异常类型,非ISO异常类型;当第14-15位不全为1时,代表该异常属于ISO异常类型。通过异常类型标识能够确定异常所属类型,并且能够在异常处理时识别出是哪个模块抛出的哪种类型的异常。
便于理解,下面将结合计算机设备详细说明程序的执行流程。参见图15,图15为本申请实施例提供的一种计算机实现代码异常处理的示意图。
S1501:执行第一代码块,按照第一代码块的代码语句逐条执行。
S1502:在需要设置异常监控处调用运行环境的接口设置第一异常处理代码块对应的调用接口,启动异常处理机制。
S1503:将第一异常处理代码块对应的第一接口地址推入异常处理栈,作为第一代码块的异常处理方法。
S1504:返回设置结果。
S1505:调用第二代码块。
S1506:在需要设置异常监控处调用运行环境的接口设置第二异常处理代码块对应的调用接口,启动异常处理机制。
S1507:将第二异常处理代码块对应的第二接口地址推入异常处理栈,作为第二代码块的异常处理方法。
S1508:返回设置结果。
S1509:第二代码块的执行过程中出现异常,将运行环境设置为异常状态。
S1510:从异常处理栈的栈顶弹出第二异常处理代码块对应的接口地址。根据第二接口地址,确定第二异常处理代码块的调用接口,调用第二异常处理代码块。
S1511:调用第二异常处理代码块处理异常。
S1512:执行第二异常处理代码块。
S1513:异常严重,执行第二异常处理代码块无法完全解决异常。
S1514:从异常处理栈的栈顶弹出第一异常处理代码块对应的第一接口地址。可以根据第一接口地址,确定第一异常处理代码块的调用接口,调用第一异常处理代码块。
S1515:调用第一异常处理代码块处理异常。
S1516:执行第一异常处理代码块。
S1517:处理异常成功,将运行环境的异常状态清除,并返回异常处理结果,异常处理结果为0。
S1518:根据异常处理结果继续执行代码块,即异常结果为0,则恢复执行第二代码块。
S1519:第二代码块执行完成后,继续执行第一代码块中调用第二代码块代码语句的下一条代码语句。
S1520:按照第一代码块的代码语句继续逐条执行。
以上为本申请实施例提供一种代码异常处理方法的一些具体实现方式,基于此,本申请还提供了对应的装置。下面将从功能模块化的角度对本申请实施例提供的装置进行介绍。
参见图16,图16为本申请实施例提供的一种代码异常处理装置1600的结构示意图,该装置1600包括执行模块1601、确定模块1602、推入模块1603、弹出模块1604和处理模块1605。
执行模块1601,用于执行第一代码块,所述第一代码块为一组代码语句;
确定模块1602,用于根据所述第一代码块中的第一异常监控代码语句,确定用于处理所述第一应用程序代码执行过程中的异常的第一异常处理代码块对应的第一接口地址;
推入模块1603,用于将所述第一接口地址推入异常处理栈,所述异常处理栈用于存储异常处理代码块对应的接口地址;
弹出模块1604,用于当所述第一代码块的执行过程中出现异常时,从所述异常处理栈弹出所述第一接口地址;
处理模块1605,用于根据所述第一接口地址调用所述第一异常处理代码块进行异常处理。
本申请实施例提供了一种代码异常处理装置。先执行第一代码块,并根据第一代码块中的第一异常监控代码语句确定第一接口地址,进而将第一接口地址推入异常处理栈;然后,当第一代码块的执行过程中出现异常时,从异常处理栈弹出第一接口地址;最后,根据第一接口地址调用第一异常处理代码块处理异常,以完成异常处理。这样,通过将异常处理代码块与代码块分开存储,避免将异常处理代码编入程序代码,能够减少程序代码中的代码量。当程序代码的执行过程中出现异常,可以直接从异常处理栈中的接口地址调用异常处理代码块,从而对程序代码执行过程中出现的异常进行处理;若程序代码的执行过程中未出现异常,则无需调用异常处理代码块,仅执行代码块中的代码语句。将分散在程序代码中的异常处理代码进行统一编写存储,达到了简化程序代码的效果。如此,可以减少程序代码中的代码量。
在本申请提供的一种实施例中,所述第一代码块包括调用第二代码块代码语句,所述装置1600还包括:
调用模块,用于根据所述调用第二代码块代码语句,调用第二代码块。
在本申请提供的一种实施例中,所述第二代码块包括第二异常监控代码语句,所述调用模块具体用于:
根据所述第二异常监控代码语句,确定用于处理所述第二代码块执行过程中的异常的第二异常处理代码块对应的第二接口地址;
将所述第二接口地址推入所述异常处理栈。
在本申请提供的一种实施例中,所述第二代码块不包括第二异常监控代码语句,所述调用模块具体用于:
当所述第二代码块的执行过程中出现异常时,从所述异常处理栈弹出所述第一接口地址;
根据所述第一接口地址调用所述第一异常处理代码块进行异常处理。
在本申请提供的一种实施例中,所述调用模块具体用于:
当所述第二代码块的执行过程中出现异常时,从所述异常处理栈弹出所述第二接口地址;
根据所述第二接口地址调用所述第二代码块进行异常处理。
在本申请提供的一种实施例中,所述第一代码块中不包括所述第一异常监控代码语句,所述装置1600还包括;
保护模块,用于当所述第一代码块的执行过程中出现异常时,调用预设异常处理代码块进行异常处理。
在本申请提供的一种实施例中,所述装置1600还包括:
恢复模块,用于完成异常处理后,根据异常处理结果继续执行代码块。
本申请实施例还提供了对应的设备以及计算机存储介质,用于实现本申请实施例提供的方案。
其中,所述设备包括存储器和处理器,所述存储器用于存储指令或代码,所述处理器用于执行所述指令或代码,以使所述设备执行本申请任一实施例所述的代码异常处理方法。
所述计算机存储介质中存储有代码,当所述代码被运行时,运行所述代码的设备实现本申请任一实施例所述的代码异常处理方法。
本申请实施例中提到的 “第一”、“第二”(若存在)等名称中的“第一”、“第二”只是用来做名字标识,并不代表顺序上的第一、第二。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到上述实施例方法中的全部或部分步骤可借助软件加通用硬件平台的方式来实现。基于这样的理解,本申请的技术方案可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如只读存储器(英文:read-only memory,ROM)/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者诸如路由器等网络通信设备)执行本申请各个实施例或者实施例的某些部分所述的方法。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
以上所述仅是本申请示例性的实施方式,并非用于限定本申请的保护范围。
Claims (10)
1.一种代码异常处理方法,其特征在于,所述方法包括:
执行第一代码块,所述第一代码块为一组代码语句;
根据所述第一代码块中的第一异常监控代码语句,确定用于处理第一应用程序代码执行过程中的异常的第一异常处理代码块对应的第一接口地址;
将所述第一接口地址推入异常处理栈,所述异常处理栈用于存储异常处理代码块对应的接口地址;
当所述第一代码块的执行过程中出现异常时,从所述异常处理栈弹出所述第一接口地址;
根据所述第一接口地址调用所述第一异常处理代码块进行异常处理。
2.根据权利要求1所述的方法,其特征在于,所述第一代码块包括调用第二代码块代码语句,所述方法还包括:
根据所述调用第二代码块代码语句,调用第二代码块。
3.根据权利要求2所述的方法,其特征在于,所述第二代码块包括第二异常监控代码语句,所述调用第二代码块,包括:
根据所述第二异常监控代码语句,确定用于处理所述第二代码块执行过程中的异常的第二异常处理代码块对应的第二接口地址;
将所述第二接口地址推入所述异常处理栈。
4.根据权利要求2所述的方法,其特征在于,所述第二代码块不包括第二异常监控代码语句,所述调用第二代码块,包括:
当所述第二代码块的执行过程中出现异常时,从所述异常处理栈弹出所述第一接口地址;
根据所述第一接口地址调用所述第一异常处理代码块进行异常处理。
5.根据权利要求3所述的方法,其特征在于,所述调用第二代码块,包括:
当所述第二代码块的执行过程中出现异常时,从所述异常处理栈弹出所述第二接口地址;
根据所述第二接口地址调用所述第二代码块进行异常处理。
6.根据权利要求1所述的方法,其特征在于,所述第一代码块中不包括所述第一异常监控代码语句,所述方法还包括:
当所述第一代码块的执行过程中出现异常时,调用预设异常处理代码块进行异常处理。
7.根据权利要求1-6任意一项所述的方法,其特征在于,所述方法还包括:
完成异常处理后,根据异常处理结果继续执行代码块。
8.一种代码异常处理装置,其特征在于,所述装置包括:
执行模块,用于执行第一代码块,所述第一代码块为一组代码语句;
确定模块,用于根据所述第一代码块中的第一异常监控代码语句,确定用于处理第一应用程序代码执行过程中的异常的第一异常处理代码块对应的第一接口地址;
推入模块,用于将所述第一接口地址推入异常处理栈,所述异常处理栈用于存储异常处理代码块对应的接口地址;
弹出模块,用于当所述第一代码块的执行过程中出现异常时,从所述异常处理栈弹出所述第一接口地址;
处理模块,用于根据所述第一接口地址调用所述第一异常处理代码块进行异常处理。
9.一种计算机设备,其特征在于,包括:存储器,处理器,及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时,实现如权利要求1-7任一项所述的代码异常处理方法。
10.一种计算机存储介质,其特征在于,所述计算机存储介质中存储有指令,当所述指令在终端设备上运行时,使得所述终端设备执行如权利要求1-7任一项所述的代码异常处理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310392270.0A CN116126735B (zh) | 2023-04-13 | 2023-04-13 | 一种代码异常处理方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310392270.0A CN116126735B (zh) | 2023-04-13 | 2023-04-13 | 一种代码异常处理方法、装置、设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116126735A true CN116126735A (zh) | 2023-05-16 |
CN116126735B CN116126735B (zh) | 2023-08-15 |
Family
ID=86301284
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310392270.0A Active CN116126735B (zh) | 2023-04-13 | 2023-04-13 | 一种代码异常处理方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116126735B (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5692146A (en) * | 1995-05-26 | 1997-11-25 | National Semiconductor Corporation | Method of implementing fast 486TM microprocessor compatible string operations |
CN109542657A (zh) * | 2018-10-16 | 2019-03-29 | 深圳壹账通智能科技有限公司 | ***异常的处理方法及服务器 |
CN113867847A (zh) * | 2021-11-30 | 2021-12-31 | 统信软件技术有限公司 | 一种异常插件处理方法、装置及计算设备 |
CN114296988A (zh) * | 2022-01-04 | 2022-04-08 | 成都知道创宇信息技术有限公司 | 异常处理方法、装置、电子设备及存储介质 |
CN114528201A (zh) * | 2021-11-16 | 2022-05-24 | 平安银行股份有限公司 | 异常代码定位方法、装置、设备及介质 |
-
2023
- 2023-04-13 CN CN202310392270.0A patent/CN116126735B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5692146A (en) * | 1995-05-26 | 1997-11-25 | National Semiconductor Corporation | Method of implementing fast 486TM microprocessor compatible string operations |
CN109542657A (zh) * | 2018-10-16 | 2019-03-29 | 深圳壹账通智能科技有限公司 | ***异常的处理方法及服务器 |
CN114528201A (zh) * | 2021-11-16 | 2022-05-24 | 平安银行股份有限公司 | 异常代码定位方法、装置、设备及介质 |
CN113867847A (zh) * | 2021-11-30 | 2021-12-31 | 统信软件技术有限公司 | 一种异常插件处理方法、装置及计算设备 |
CN114296988A (zh) * | 2022-01-04 | 2022-04-08 | 成都知道创宇信息技术有限公司 | 异常处理方法、装置、电子设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN116126735B (zh) | 2023-08-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7500245B2 (en) | Changing code execution path using kernel mode redirection | |
CN108228077B (zh) | 存储区的管理方法、运行方法、装置、设备、可读介质 | |
CN108509322B (zh) | 避免过度回访的方法、电子装置及计算机可读存储介质 | |
CN105573788B (zh) | 补丁处理的方法和设备以及生成补丁的方法和设备 | |
CN106997313B (zh) | 一种应用程序的信号处理方法、***及终端设备 | |
CN116126735B (zh) | 一种代码异常处理方法、装置、设备及存储介质 | |
WO2024113534A1 (zh) | 存储节点中存储资源的控制方法和装置,以及存储节点 | |
EP2835935A1 (en) | Method for processing online upgrade, device and system thereof | |
CN116450165A (zh) | 一种快速搭建环境及部署程序的方法、***、终端及存储介质 | |
CN114443101B (zh) | ***高级审核策略更新方法、***、终端及存储介质 | |
US6606640B2 (en) | Method, computer program product, and system for modifying populated databases utilizing a reload utility | |
CN114443580A (zh) | 一种数据清理方法、装置、介质及计算设备 | |
US6856994B2 (en) | System and method for condensing application software | |
JPH0786841B2 (ja) | 障害情報ログ方法及びデータ処理装置 | |
CN112286625B (zh) | 一种基于云平台多用户的镜像缓存状态管理方法及*** | |
CN111124737A (zh) | 一种云平台作业冲突的判断方法及电子设备 | |
CN113347479B (zh) | 多媒体素材的编辑方法、装置、设备及存储介质 | |
CN110647526B (zh) | 批量数据处理方法、装置、计算机设备及存储介质 | |
CN115705294B (zh) | 用于获取函数调用信息的方法、装置、电子设备和介质 | |
CN117076004B (zh) | 微服务打包合并方法、装置和电子设备 | |
CN1151436C (zh) | 将操作***与应用程序放入存储装置的方法 | |
JP2000148562A (ja) | データバックアップ方法及びこれを利用したデータバックアップ装置並びにデータバックアッププログラムを記録したコンピュータ読み取り可能な記録媒体 | |
CN116048787A (zh) | 一种异步调用方法及装置 | |
US20020010914A1 (en) | Componentware creating method and recording medium | |
JP2000155677A (ja) | プログラムの暴走防止方法、そのためのコンピューターシステムと暴走防止プログラムを記録した記録媒体 |
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 |