一种异常处理方法、系统、电子设备及存储介质与流程

文档序号:23003232发布日期:2020-11-20 11:51阅读:132来源:国知局
一种异常处理方法、系统、电子设备及存储介质与流程

本发明涉及计算机领域,尤其涉及一种异常处理方法、系统、电子设备及存储介质。



背景技术:

随着计算机技术的发展,嵌入式系统应用到了越来越多的领域。在应用嵌入式系统进行各种业务处理的过程中,嵌入式系统同样可能会出现异常,导致嵌入式系统不能正常应用。为了保证嵌入式系统的正常工作,需要对这些异常进行处理,准确的对异常进行诊断,确定异常的信息。



技术实现要素:

本发明实施例提供一种异常处理方法、系统、电子设备及存储介质。

本公开实施例第一方面提供一种异常处理方法,包括:在嵌入式处理系统检测到异常时,确定检测到异常的分类;根据所述异常的分类,调用所述异常的分类对应的异常中断服务;通过所述异常中断服务,记录所述异常的异常信息,所述异常信息,用于异常的诊断。

在一个实施例中,所述通过所述异常中断服务,记录所述异常的异常信息,包括:通过所述异常中断服务,获取发生异常的目标程序执行的现场信息;将所述现场信息写入所述异常中断服务的寄存器。

在一个实施例中,所述通过所述异常中断服务,获取异常发生的现场信息,包括:通过所述异常中断服务,定位所述目标程序中异常发生的程序位置;根据所述程序位置确定异常代码,获取所述异常代码的代码信息。

在一个实施例中,所述通过所述异常中断服务,定位所述目标程序中异常发生的程序位置,包括:所述异常中断服务中断发生异常的目标程序的执行;在中断所述目标程序的执行后,根据所述目标程序的程序计数器和堆栈指针寄存器,定位所述异常发生的程序位置,得到代码异常位置信息。

在一个实施例中,所述在中断所述目标程序的执行后,根据所述目标程序的程序计数器和堆栈指针寄存器的内容,定位所述异常的程序位置,包括:从目标程序的堆栈区域读取程序计数器的计数值和堆栈指针寄存器的栈指针;根据所述计数值及所述栈指针,在存储所述目标程序的程序区域中定位出异常发生的程序位置。

在一个实施例中,通过所述异常中断服务,记录所述异常的异常信息,还包括:通过所述异常中断服务,确定所述异常的栈帧位置;根据所述异常发生的程序位置和所述栈帧位置进行栈回溯,确定导致发生异常的函数,得到所述函数的函数信息。

在一个实施例中,通过所述异常中断服务,记录所述异常的异常信息,还包括:根据所述异常发生的程序位置和所述栈帧位置进行栈回溯,确定导致所述异常的函数调用关系,得到导致异常的调用关系信息。

在一个实施例中,所述通过所述异常中断服务,获取发生异常的目标程序执行的现场信息,包括:通过所述异常中断服务,读取所述目标程序异常发生时生成的错误标志。

在一个实施例中,所述通过所述异常中断服务,获取发生异常的目标程序执行的现场信息,包括:所述异常中断服务读取系统时间,作为所述异常发生的时间信息。

在一个实施例中,所述在嵌入式处理系统检测到异常时,确定检测到异常的分类,包括:在所述嵌入式处理系统检测到异常时,根据所述异常的标志位,确定检测到的所述异常的分类。

在一个实施例中,所述根据所述异常的分类,调用所述异常的分类对应的异常中断服务,包括以下至少之一:当检测到的所述异常的分类为存储器管理错误,调用存储器管理错误中断服务;当检测到的所述异常的分类为总线错误,调用总线错误中断服务;当检测到的所述异常的分类为使用错误,调用使用错误中断服务。

在一个实施例中,在所述记录所述异常的异常信息之后,还包括:异常诊断解析工具读取所述异常的异常信息;通过所述异常诊断解析工具解析所述异常的异常信息,得到所述异常的异常信息的诊断结果;可视化所述诊断结果;输出可视化的所述诊断结果。

在一个实施例中,所述方法,还包括:进行异常处理配置;所述在嵌入式处理系统检测到异常时,确定检测到异常的分类,包括:根据所述异常处理配置得到的配置结果,在嵌入式处理系统检测到异常时确定检测到异常的分类。

在一个实施例中,所述进行异常处理配置,包括以下至少之一:确定待记录异常;确定待监控程序的程序区域的第一存储地址和堆栈区域的第一地存储址;在所述待监控程序中增加所述异常中断服务的程序代码;配置读取记录的所述异常信息的通信接口。

本公开实施例第二方面提供一种异常处理系统,包括:

分类模块,用于在嵌入式处理系统检测到异常时,确定检测到异常的分类;

调用模块,用于根据所述异常的分类,调用所述异常的分类对应的异常中断服务;

记录模块,用于通过所述异常中断服务,记录所述异常的异常信息,所述异常信息,用于异常的诊断。

本公开实施例第三方面提供一种电子设备,包括:

处理器;

存储器,其存储有程序指令,当所述程序指令被所述处理器执行时,使得所述电子设备执行上述任一项所述的方法。

本公开实施例第四方面提供一种存储介质,其存储有程序,当所述程序由处理器运行时,执行上述任一项所述的方法。

本公开实施例的技术方案在嵌入式处理系统检测到异常时,确定检测到的异常的分类,然后根据异常的分类,调用该异常的分类对应的异常中断服务。通过异常中断服务,记录异常的异常信息,该异常信息用于进一步对异常进行诊断。本方案所述异常中断服务为嵌入系统的中断服务一种,利用异常中断服务,对嵌入式系统和/或应用程序安装到嵌入操作操作系统内之后,对发生异常的异常现场,进行异常信息的记录,如此,可以发现并诊断嵌入式系统中应用程序上线后才发现的异常,,为后续进行异常排除提供了基础。采用中断服务替代在线调试工具,复现异常的问题分析方法,便于在发生异常后截取事故断面,从而更加方便地开展异常事故原因排查,具有实现简单及前期调试和测试的时长,加速了嵌入式系统和嵌入式系统内应用程序的研发速率。

附图说明

图1为本公开实施例提供的一种异常处理方法的流程示意图;

图2为本公开实施例提供的另一种异常处理方法的流程示意图;

图3为本公开实施例提供的一种异常处理系统的示意图;

图4为本公开实施例提供的另一种异常处理系统的示意图;

图5为本公开实施例提供的一种异常记录模块进行异常处理配置的示意图;

图6为本公开实施例提供的一种异常记录模块记录异常信息的示意图;

图7为本公开实施例提供的一种本地计算机和嵌入式处理系统进行通信的示意图。

具体实施方式

以下结合说明书附图及具体实施例对本发明的技术方案做进一步的详细阐述。

如图1所示,为本公开提供的一种异常处理方法的流程示意图,该方法主要包括:

步骤s100,在嵌入式处理系统检测到异常时,确定检测到异常的分类。嵌入式处理系统检测到该系统中出现异常时,可以根据该异常确定异常的分类。该异常包括运行程序的异常,可以是预先配置的。

嵌入式系统是一个微型计算机系统,内嵌于更大的机器或者设备或者产品中,属于一个机器或者设备或者产品的一部分,通常被设计为执行特定任务。嵌入式系统中包括有操作系统,该操作系统用于控制嵌入式设备中的硬件,硬件包括微处理器、随机存储器、只读存储器、定时器和输入输出设备等。嵌入式系统还包括软件,软件用来控制硬件,硬件用来支撑软件的运行。嵌入式系统通常还会包含一个或者多个应用程序,它们运行于微处理器之上,被操作系统管理。

嵌入式系统在运行时会出现异常,出现异常后需要对异常进行处理。例如,应用于微控制器产品当中的基于arm架构的嵌入式处理系统,该嵌入式处理系统的异常机制以及错误处理系统通常用于在产品研发阶段对程序的异常行为进行调试。在产品生产后或者在实际应用中嵌入式系统出现异常或者错误时,一般只是对嵌入式系统进行复位处理。有的异常或者错误在特定具体应用场景中才会出现,同样会导致程序运行出现异常。这些异常或者错误往往具有很强的时间相关性,难以再次复现,对异常的诊断带来不便。

为了对出现的异常进行诊断等操作,需要获取异常的信息,根据这些异常的信息对异常进行处理。在获取异常的信息之前,首先需要在异常出现时确定异常或者检测到异常,即检测异常是否发生。当检测到异常发生后才能对发生的异常进行后续处理。检测异常发生的方法包括多种,例如:

在嵌入式系统自身的异常检测代码或者安装在嵌入操作系统内的应用程序的异常检测代码或者被执行的目标程序内自身安插的异常检测代码,都可以进行嵌入式操作系统内发生的异常的检测。

异常的分类可以包括嵌入式系统自身配置的异常分类,例如,总线错误异常、存储器管理错误异常和使用错误异常等。存储器管理错误异常是由于违规访问存储空间中某些非法访问导致的,包括非对齐访问异常和栈溢出异常等。当异常为非对齐访问异常或栈溢出异常等时,确定异常的分类为存储器管理错误异常。

总线错误异常为在传输数据时收到错误的应答信息引起的异常,包括精确的总线异常和非精确的总线异常。当已发生一个数据总线错误,且异常返回的压入堆栈的程序计数器的值,指向引起错误的指令时,则为精确的总线异常。当已发生一个数据总线错误,但是堆栈帧中的返回地址与引起错误的指令无关时,则为非精确的总线异常。非法地址访问和寄存器中一位(单bit)或多位(多bit)出错异常等。当异常为精确或非精确的总线异常、非法地址访问,或寄存器中一位(单bit)或多位(多bit)出错异常等时,确定异常的分类为总线错误异常。

使用错误异常为使用方法导致异常,包括除零异常、非法指令异常和触发未定义中断异常等。当异常为除零异常、非法指令异常或触发未定义中断异常等时,将异常的分类确定为使用错误异常。

步骤s200,根据异常的分类,调用异常的分类对应的异常中断服务。

在嵌入式系统中,不同分类的异常对应有不同的异常中断服务,在确定异常的分类后,即可确定该异常的分类对应的异常中断服务,然后调用该异常的分类对应的异常中断服务。不同的异常中断服务在嵌入式处理系统中是已经配置完成的程序,可以直接调用。

例如,当确定异常的分类为总线错误时,确定总线错误对应的异常中断服务,然后调用总线错误对应的异常中断服务。

步骤s300,通过异常中断服务,记录异常的异常信息,该异常信息用于异常的诊断。在调用该异常的分类对应的异常中断服务后,通过该异常中断服务记录该异常的异常信息。该异常的异常信息表示该异常的异常情况,包括发生异常的程序位置和/或异常发生的时间等等异常发生的现场信息。

该异常的异常信息可以存储在非易失性存储器内。

在通过该异常中断服务记录该异常的异常信息后,可以对该异常进行进一步的处理,包括进行异常的诊断等。

该实施例中的嵌入式处理系统包括基于arm架构的cortex-m系列处理器的嵌入式处理系统。

在本实施例中,先在嵌入式处理系统检测到发生异常时,确定异常的分类,然后根据异常的分类调用异常的分类对应的异常中断服务,再通过该异常中断服务记录该异常的异常信息。通过该方法实现了对发生的异常的异常信息的记录,进而可以根据该记录对发生的异常进行诊断等处理,便于排查故障。

异常中断服务被调用,嵌入式系统当前正在执行的程序暂停,转而执行异常中断服务对应的程序代码。由于正在执行的程序暂停,相当于保存了异常发生时系统内的异常现场。通过异常中断服务对应的程序代码的执行,会自动收集异常发生的现场的各种现场信息,并记录为异常信息,为后续异常原因排除提供信息依据。

异常中断服务完成异常信息记录之后,会恢复被暂停的程序代码的执行。

在另一实施例中,在步骤s100中确定检测到异常的分类之前,还包括:进行异常处理配置。进行异常处理配置,包括以下a、b、c和d中的至少其中一个:

a:确定待记录异常,嵌入式处理系统中可能会出现不同的异常,在实际应用过程中,并不是每种异常都需要进行记录。

根据实际业务需求,确定需要记录的异常,将需要记录的异常确定为待记录异常。

进一步地,在确定待记录异常后,可以根据确定的待记录异常,在嵌入式系统检测到异常时,确定是否对该异常进行分类以及记录等操作。当有异常发生后,嵌入式处理系统检测到发生该异常,确定发生的异常是否是已经确定的待记录异常。当确定发生的异常为已经确定的待记录异常时,嵌入式处理系统确定该发生的异常的分类。当发生的异常不是已经确定的待记录异常时,嵌入式处理系统则不确定该发生的异常的分类。

b:确定待监控程序的程序区域的第一存储地址和堆栈区域的第一地存储址。嵌入式处理系统监控程序的运行,在程序运行的过程中检测程序的运行是否出现异常,将监控以及检测的这些程序确定为待监控程序。这些待监控程序均有程序区域和堆栈区域,程序区域和堆栈区域均有对应的存储地址,确定待监控程序的程序区域的存储地址和堆栈区域的存储地址后,根据待监控程序的程序区域的存储地址和堆栈区域的存储地址,可以对异常的异常信息进行记录。

其中,程序区域存储有待监控程序的执行程序,堆栈区域中包括存储数据的程序计数器,以及用于指示存储数据出栈或者入栈的堆栈指针寄存器。

c:在待监控程序中增加异常中断服务的程序代码。异常中断服务的程序代码用于在待监控程序发生异常时,实现异常中断服务的功能,执行相应的处理操作。例如,通过执行异常中断的程序代码,异常中断服务可以对发生的异常进行记录等处理。

待监控程序中可能会出现不同的异常,不同的异常通过不同的异常中断服务进行处理,不同的异常中断服务对应不同的程序代码,所以待监控程序中增加的异常中断服务的程序代码也可包括不同的程序代码。具体可以通过代码植入的方式在待监控程序中增加异常中断服务的程序代码,具体的增加方式这里不再进行限定。具体如,在待监控程序被启动后,在待监控程序的异常处理接口处写入所述异常终端服务的程序代码的调用地址,通过指针调用等方式跳转到异常中断服务的程序代码进行执行。

d:配置读取记录的异常信息的通信接口。该通信接口通过该通信接口可以在记录异常信息之后,读取记录的异常的异常信息,便于后续对异常的异常信息进行进一步处理。具体可以是通过通信接口根据适配的通信协议读取异常信息。

例如,异常诊断工具可以根据该通信接口访问到记录到所述异常信息的存储区域,从而读取到异常终端中断服务记录的异常信息。

上述进行异常处理配置的步骤为预处理的操作,为对异常的异常信息进行后续处理做准备。

在另一实施例中,步骤s200,根据异常的分类,调用异常的分类对应的异常中断服务,包括以下至少之一:

当检测到的异常的分类为存储器管理错误,调用存储器管理错误中断服务。当检测到的异常的分类为总线错误,调用总线错误中断服务。当检测到的异常的分类为使用错误,调用使用错误中断服务。由于不同的异常的分类对应有不同的异常中断服务,所以在确定异常的分类后,调用该异常的分类对应的异常中断服务对异常进行后续的记录等处理。

在另一实施例中,步骤s300,通过异常中断服务,记录异常的异常信息,包括:通过异常中断服务,获取发生异常的目标程序执行的现场信息,然后将现场信息写入异常中断服务的寄存器。

在调用异常的分类对应的异常中断服务后,该异常中断服务可以确定发生异常的目标程序,在确定目标程序后,还可以获取该目标程序执行的现场信息,将该现场信息作为异常的异常信息。

现场信息包括发生异常的目标程序在发生异常时执行的各种信息,例如,异常发生的时间、异常的程序位置、当前运行程序的程序状态字(psw)、程序计数器(pc)以及代码段寄存器(cs)等等。为了记录异常的异常信息,需要记录发生异常的目标程序执行的现场信息。根据现场信息,可以实现对异常的异常信息的记录。还可以通过发生异常的目标程序执行的现场信息,在中断处理结束后能够返回被中断程序的断点处继续执行被中断程序。

异常中断服务的寄存器可以保存发生异常的目标程序在发生异常时执行的现场信息,在获取发生异常的目标程序执行的现场信息后,将现场信息写入异常中断服务的寄存器中。

进一步地,获取发生异常的目标程序执行的现场信息包括:

通过异常中断服务,定位目标程序中异常发生的程序位置。在嵌入式处理系统检测到异常后,说明该目标程序发生了异常,但是并不知道该目标程序中发生异常的位置。调用的异常中断服务可以定位该目标程序中的异常发生的程序位置,该异常的程序位置表示发生异常的目标程序中发生异常的具体位置。

例如,通过异常中断服务确定发生异常的目标程序为a程序,然后获取a程序执行的现场信息,该现场信息为异常发生的程序位置,即获取a程序中异常发生的具体程序位置。或者,a程序包括10段执行代码,定位发生异常发生的位置为第5段执行代码,将第5段执行代码确定为a程序中异常发生的程序位置。a程序包括100行执行代码,定位发生异常发生的位置为第50行执行代码,将第50行执行代码确定为a程序中异常发生的程序位置。

在定位目标程序中异常发生的程序位置后,根据定位的程序位置确定异常代码,获取异常代码的代码信息。异常发生的程序位置对应有相应的代码,通过异常中断服务可以根据该程序位置确定该程序位置对应的异常代码。异常中断服务还可以根据该异常代码获取异常代码的代码信息,将该异常代码的代码信息作为异常的异常信息。该代码信息可以是代码本身或者表示该代码的标识等。

例如,在通过异常中断服务确定第5段代码为a程序中发生异常的程序位置,异常中断服务可以根据第5段代码确定第5段中哪一行代码为异常代码,将第3行代码确定为异常代码,然后获取第3行代码的代码信息。可以直接将待第3行代码作为代码信息,也可以将表示第3行代码的标识作为代码信息。

通过该实施例,实现了记录发生异常的目标程序中具体异常的程序位置,根据该程序位置确定异常代码,将该异常代码想代码信息作为异常的异常信息。根据该异常信息可以在后续进行异常的诊断。

在另一实施例中,还提供了一种通过异常中断服务,定位目标程序中异常发生的程序位置的方法,该方法包括:

在嵌入式处理系统检测到有异常发生时,确定发生异常的目标程序,然后异常中断服务中断发生异常的目标程序的执行。在中断目标程序的执行后,根据目标程序的程序计数器和堆栈指针寄存器,定位异常发生的程序位置,得到代码异常位置信息。

由于在异常中断服务中断发生异常的目标程序的执行时,会将发生异常的目标程序执行的现场信息进行记录,所以可以在中断目标程序的执行后,根据目标程序的程序计数器和堆栈指针寄存器中的内容,定位异常发生的程序位置,以及得到异常代码的代码信息等。

进一步地,在中断所述目标程序的执行后,根据所述目标程序的程序计数器和堆栈指针寄存器的内容,定位所述异常的程序位置,包括:

由于在异常处理配置中确定了待监控程序的程序区域的地址和堆栈区域的地址,以及程序区域存储有待监控程序的执行程序,堆栈区域中包括存储数据的程序计数器,和用于指示存储数据出栈或者入栈的堆栈指针寄存器。所以可以从目标程序的堆栈区域读取程序计数器的计数值和堆栈指针寄存器的栈指针。

因为栈指针指向堆栈区域中的最后一个压入堆栈的数据,程序计数器的计数值表示下一条指令所在单元的地址,所以可以根据读取的计数值及栈指针,在存储目标程序的程序区域中定位出异常发生的程序位置。

在另一实施例中,通过异常中断服务,记录异常的异常信息,还包括:

通过异常中断服务,确定异常的栈帧位置。栈帧用于保存函数调用过程中的各种信息,包括参数、返回地址以及本地变量等,不同的栈帧对应的调用函数不同,每调用一个函数就会生成个新的栈帧,所以根据栈帧可以进一步确定调用的函数以及函数的调用关系。

在确定异常的栈帧位置后,根据异常发生的程序位置和栈帧位置进行栈回溯,确定导致发生异常的函数,得到函数的函数信息。因为不同的调用函数对应不同的栈帧,并且异常发生的程序位置也已经确定,所以可以根据栈帧以及异常发生的程序位置,可以确定导致发生异常的函数。该函数的函数信息可以包括函数名称等。该情况为函数本身的异常导致目标程序发生异常。

此外,若调用的函数本身不存在异常,说明函数的调用关系可能会存在异常,函数的调用关系存在异常同样会导致目标程序发生异常。根据异常发生的程序位置和栈帧位置进行栈回溯,当函数调用关系存储异常时,还可以确定导致异常的函数调用关系,得到导致异常的调用关系信息。调用关系信息包括调用关系的标识等。

在另一实施例中,通过异常中断服务,获取发生异常的目标程序执行的现场信息,还包括:

通过异常中断服务,读取目标程序异常发生时生成的错误标志。在某些情况下,目标程序发生异常时可能会生成相应的错误标志。错误标志可以指示错误的类型、应用程序等初步诊断异常发生的发生原因等信息。

不同的目标程序可能会产生不同的错误标志,有的目标程序在发生异常时会产生错误标志,有的目标程序在发生异常时不会生产错误标志,该实施例以在发生异常时生成错误标志的目标程序为例。当发现该异常时,调用该异常的分类对应的异常中断服务,通过异常中断服务读取该错误标志,记录该错误标志,作为异常信息。

在另一实施例中,通过异常中断服务,获取发生异常的目标程序执行的现场信息,还包括:

异常中断服务读取系统时间,作为异常发生的时间信息。在调用异常中断服务后,异常中断服务会读取嵌入式处理系统检测到异常发生时的系统时间,将该时间作为异常发生的时间信息,同样也是发生异常的目标程序执行的现场信息。该时间信息可以为后续诊断异常提供时间参考,便于诊断人员进行进一步处理等。

在另一实施例中,在嵌入式处理系统检测到异常时,确定检测到异常的分类,包括:在嵌入式处理系统检测到异常时,根据异常的标志位,确定检测到的异常的分类。

参考图2,在另一实施例中,在步骤是300,记录异常的异常信息之后,还包括:

步骤s400,异常诊断解析工具读取异常的异常信息。异常诊断解析工具可以通过配置的读取记录的异常信息的通信接口,读取异常的异常信息。异常诊断解析工具这不进行限定,具有对上述异常进行诊断解析功能的工具即可。

步骤s500,通过异常诊断解析工具解析异常的异常信息,得到异常的异常信息的诊断结果。该步骤可以是对异常的异常信息进行转换解析的过程,通过该过程得到诊断结果。

步骤s600,可视化诊断结果。将诊断结果进行可视化,转换为便于诊断的诊断结果,包括异常的原因、异常的程序位置、导致异常的函数、导致异常的函数调用关系等等。

步骤s700,输出可视化的诊断结果。

当需要参考或者查看历史异常信息时,还可以根据异常发生的时间,按照时间的先后顺序将历史异常信息进行诊断和解析等,然后数据诊断结果。

参考图3,在另一实施例中,还提供了一种异常处理系统,包括:

分类模块,用于在嵌入式处理系统检测到异常时,确定检测到异常的分类。

该模块具体用于,在嵌入式处理系统检测到异常时,根据异常的标志位,确定检测到的异常的分类。

调用模块,用于根据异常的分类,调用异常的分类对应的异常中断服务。

记录模块,用于通过异常中断服务,记录异常的异常信息,异常信息,用于异常的诊断。图中示出了上述三种模块,三种模块中包括子模块以及单元未示出。

其中,记录模块包括:

现场信息获取子模块,用于通过异常中断服务,获取发生异常的目标程序执行的现场信息。

写入子模块,用于将现场信息写入异常中断服务的寄存器。

现场信息获取子模块包括:

程序位置定位单元,用于通过异常中断服务,定位目标程序中异常发生的程序位置。

其中,程序位置定位单元包括:

中断子单元,用于异常中断服务中断发生异常的目标程序的执行。

程序位置定位子单元,用于在中断目标程序的执行后,根据目标程序的程序计数器和堆栈指针寄存器,定位异常发生的程序位置,得到代码异常位置信息。

程序位置定位子单元,具体用于从目标程序的堆栈区域读取程序计数器的计数值和堆栈指针寄存器的栈指针;根据计数值及栈指针,在存储目标程序的程序区域中定位出异常发生的程序位置。

异常代码信息获取单元,用于根据程序位置确定异常代码,获取异常代码的代码信息。

记录模块还包括:

栈帧位置确定子模块,用于通过异常中断服务,确定异常的栈帧位置。

函数信息确定子模块,用于根据异常发生的程序位置和栈帧位置进行栈回溯,确定导致发生异常的函数,得到函数的函数信息。

记录模块还包括:

调用关系信息确定子模块,用于根据异常发生的程序位置和栈帧位置进行栈回溯,确定导致异常的函数调用关系,得到导致异常的调用关系信息。

记录模块还包括:

错误标志读取子模块,用于通过异常中断服务,读取目标程序异常发生时生成的错误标志。

记录模块还包括:

时间读取子模块,用于异常中断服务读取系统时间,作为异常发生的时间信息。

该系统还包括:

异常诊断解析模块,用于在记录所述异常的异常信息之后,

读取所述异常的异常信息。

通过异常诊断解析工具解析异常的异常信息,得到异常的异常信息的诊断结果。

可视化诊断结果。以及

输出可视化的诊断结果。

该系统还包括:

异常处理配置模块,用于进行异常处理配置。

在嵌入式处理系统检测到异常时,确定检测到异常的分类,包括:

根据异常处理配置得到的配置结果,在嵌入式处理系统检测到异常时确定检测到异常的分类。

异常处理配置模块,具体用于确定待记录异常。

确定待监控程序的程序区域的第一存储地址和堆栈区域的第一地存储址。

在待监控程序中增加异常中断服务的程序代码。以及

配置读取记录的异常信息的通信接口。

本申请的技术方案还提供了一种电子设备,包括:

处理器;

存储器,其存储有程序指令,当程序指令被处理器执行时,使得电子设备执行上述任一项实施例中的方法。

本申请的技术方案还提供了一种存储介质,其存储有程序,当程序由处理器运行时,执行上述任一项实施例中的方法。该存储介质包括非瞬间存储介质。

在另一实施例中,还提供了一种异常处理方法,该方法包括:

进行异常处理配置的步骤。该步骤包括以下至少之一:

a:确定待记录异常,嵌入式处理系统中可能会出现不同的异常,在实际应用过程中,并不是每种异常都需要进行记录。根据实际业务需求,确定需要记录的异常,将需要记录的异常确定为待记录异常。

b:确定待监控程序的程序区域的第一存储地址和堆栈区域的第一地存储址。嵌入式处理系统监控程序的运行,在程序运行的过程中检测程序的运行是否出现异常,将监控以及检测的这些程序确定为待监控程序。这些待监控程序均有程序区域和堆栈区域,程序区域和堆栈区域均有对应的存储地址,确定待监控程序的程序区域的存储地址和堆栈区域的存储地址后,根据待监控程序的程序区域的存储地址和堆栈区域的存储地址,可以对异常的异常信息进行记录。

其中,程序区域存储有待监控程序的执行程序,堆栈区域中包括存储数据的程序计数器,以及用于指示存储数据出栈或者入栈的堆栈指针寄存器。

c:在待监控程序中增加异常中断服务的程序代码。异常中断服务的程序代码用于在待监控程序发生异常时,实现异常中断服务的功能,执行相应的处理操作。例如,通过执行异常中断的程序代码,异常中断服务可以对发生的异常进行记录等处理。

待监控程序中可能会出现不同的异常,不同的异常通过不同的异常中断服务进行处理,不同的异常中断服务对应不同的程序代码,所以待监控程序中增加的异常中断服务的程序代码也可包括不同的程序代码。具体可以通过代码植入的方式在待监控程序中增加异常中断服务的程序代码,具体的增加方式这里不再进行限定。

d:配置读取记录的异常信息的通信接口。该通信接口通过该通信接口可以在记录异常信息之后,读取记录的异常的异常信息,便于后续对异常的异常信息进行进一步处理。具体的配置方法可以是根据异常信息读取通信协议进行配置等,具体的配置方法这里不进行限定。

记录异常的异常信息的步骤。该步骤的过程与步骤s100、s200和s300记录的过程相同,这里不再详细说明。该记录异常的异常信息的步骤可以是嵌入式处理系统进行的。

异常诊断解析的步骤。该步骤的过程与步骤s400、s500、s600和s700记录的过程相同,也不再详细说明。该异常诊断解析的步骤可以是在本地计算机进行的,异常诊断解析的工具可以部署在本地计算机中。

参考图4,在另一实施例中,还提供了一种异常处理系统,该系统包括嵌入式处理系统和本地计算机,嵌入式处理系统中设置有异常记录模块,本地计算机中设置有异常诊断解析模块。

其中,异常记录模块用于记录异常的异常信息,在嵌入式处理系统检测到主程序发生异常时,通过异常记录模块记录异常的异常信息,该异常信息包括异常发生的断面数据等信息。记录异常信息可以为异常的诊断提供帮助,进而可以消除异常以及使程序复位。该嵌入式系统为以cortex-m系列的处理器为基础的嵌入式处理系统,如以cortex-m4处理器为基础的嵌入式处理系统等。

异常诊断解析模块用于对异常信息进行诊断和解析等。首先通过读取记录的异常信息的通信接口读,读取记录的异常信息,该异常信息包括异常发生的断面数据等。然后通过异常诊断解析模块进行诊断和解析等操作,进而得到诊断包括等。

参考图5,为异常记录模块进行异常处理配置的示意图。异常记录模块进行异常处理配置的过程,可以在待监控程序的初始化阶段进行,待监控程序包括应用程序。

异常记录模块进行异常处理配置的过程请参考上述实施例中的a、b、c和d,至少包括a、b、c和d中的一种。还可以包括读取历史异常信息、微处理器(mpu)的配置、开启异常中断等。

参考图6,为异常记录模块记录异常信息的示意图。嵌入式处理系统在检测到程序在执行阶段发生了异常时,确定异常的分类,然后根据该分类调用该分类的异常中断服务。然后通过该异常中断服务记录异常的异常信息。异常的异常信息包括程序执行的现场信息,例如异常发生的程序位置、异常发生的程序位置的异常代码信息、异常函数信息、异常的函数调用关系信息、异常发生的时间信息以及异常发生时生成的错误标志等等。还包括异常发生时同样寄存器中存储的内容等。

参考图7,为本地计算机和嵌入式处理系统进行通信的示意图。

嵌入式处理系统为基于cortex-m处理器的处理系统,闪存(flash存储器)保存异常记录模块记录的异常的异常信息。通过配置的通信接口与本地计算机进行通信,本地计算机通过通信接口读取异常信息(该异常信息为异常的原始数据),然后通过异常诊断解析工具进行诊断和解析,得到异常的诊断结果(报告)。

诊断结果可以包括:异常发生的程序位置、异常发生的程序位置的异常代码信息、异常函数信息、异常的函数调用关系信息、异常发生的时间信息、异常发生时生成的错误标志,以及异常的原因等。异常原因可以包括除零异常、非对齐访问、精确或非精确的总线异常、栈溢出异常、非法地址访问、单bit或多bit出错异常、非法指令异常或触发未定义中断异常等等。

本实施例中的基于cortex-m处理器的异常处理系统,能够在产品部署到现场后持续进行异常记录,结合异常诊断解析工具,能够方便地在本地计算机上将记录的异常信息解析为可供用户分析的异常诊断报告。这种方式脱离了使用在线调试工具来复现异常的问题分析方法,便于在发生异常后截取事故断面信息,从而更加方便地开展异常事故原因排查。

在本申请所提供的几个实施例中,应该理解到,所揭露的设备和方法,可以通过其它的方式实现。以上所描述的设备实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,如:多个单元或组件可以结合,或可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的各组成部分相互之间的耦合、或直接耦合、或通信连接可以是通过一些接口,设备或单元的间接耦合或通信连接,可以是电性的、机械的或其它形式的。

上述作为分离部件说明的单元可以是、或也可以不是物理上分开的,作为单元显示的部件可以是、或也可以不是物理单元,即可以位于一个地方,也可以分布到多个网络单元上;可以根据实际的需要选择其中的部分或全部单元来实现本实施例方案的目的。

另外,在本发明各实施例中的各功能单元可以全部集成在一个处理模块中,也可以是各单元分别单独作为一个单元,也可以两个或两个以上单元集成在一个单元中;上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。

在一些情况下,上述任一两个技术特征不冲突的情况下,可以组合成新的方法技术方案。

在一些情况下,上述任一两个技术特征不冲突的情况下,可以组合成新的设备技术方案。

本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:移动存储设备、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1