本发明涉及异常处理,尤其涉及一种异常处理方法、装置、电子设备及存储介质。
背景技术:
1、汽车开放系统架构自适应平台(即autosar自适应平台)的标准目前没有定义在发生系统异常时如何捕获以及处理异常,而且其操作系统所固有的异常调试机制存在着以下缺陷:基于汽车开放系统架构自适应平台的产品在生产中和生产后阶段,现有异常调试功能是无法开启的,因为其生成的异常记录文件会无限增加,耗尽系统的磁盘空间,导致应用程序无法正常运行;此外,现有异常调试机制生成的异常记录文件中包含的异常信息是固定的、未加工的原始信息,比较晦涩难懂,增大了事后定位以及解决系统异常问题的难度。
技术实现思路
1、为了解决上述技术问题,本发明公开了一种异常处理方法,在汽车开放系统架构自适应平台发生系统异常时,可以保存内容丰富且易懂的异常记录,使得汽车开放系统架构自适应平台在开发、生产以及应用阶段都可以捕获并处理异常,从而提高了汽车开放系统架构自适应平台的异常处理能力以及效率。
2、为了达到上述目的,本发明提供了一种异常处理方法,所述的方法包括:
3、在获取到所述汽车开放系统架构自适应平台的中断异常信息的情况下,根据所述中断异常信息确定异常进程以及异常类型;
4、在所述异常类型为用户态异常的情况下,基于所述异常进程对应的异常信号处理函数获取所述中断异常信息对应的第一中断上下文信息;
5、基于所述异常信号处理函数以及所述第一中断上下文信息生成第一异常记录;
6、将所述第一异常记录存储第一目标内存。
7、在一个可选的实施例中,所述方法还包括:
8、在所述异常类型为内核态异常的情况下,获取所述中断异常信息对应的第二中断上下文信息;
9、将所述第二中断上下文信息存储第二目标内存;所述第二目标内存为内核空间的保留内存,所述保留内存为物理内存空间中大于预设地址的部分且所述保留内存为易失性内存;
10、从所述第二目标内存中读取所述第二中断上下文信息并基于所述第二中断上下文信息生成第二异常记录;
11、将所述第二异常记录存储第三目标内存;所述第三目标内存为非易失性内存。
12、在一个可选的实施例中,所述基于所述异常信号处理函数以及所述第一中断上下文信息生成第一异常记录,包括:
13、基于所述异常信号处理函数对所述第一中断上下文信息以及异常线程对应的寄存器信息进行处理,并向所述异常进程对应的异常守护线程释放信号量;
14、在所述异常守护线程获取到所述信号量的情况下,通过所述异常守护线程对所述信号量进行分析,生成所述第一异常记录。
15、在一个可选的实施例中,所述将所述第一异常记录存储第一目标内存,包括:
16、在提供保留内存且所述保留内存空间充足的情况下,将所述第一异常记录存储在所述保留内存中;所述保留内存为物理内存空间中大于预设地址的部分且所述保留内存为易失性内存;
17、在所述保留内存空间不足的情况下,将所述第一异常记录存储在共享内存中;所述共享内存为所述汽车开放系统架构自适应平台中的进程共享的一部分物理内存空间且所述共享内存为易失性内存。
18、在一个可选的实施例中,所述将所述第一异常记录存储第一目标内存之后,所述方法还包括:
19、通过异常监控线程定时获取所述第一目标内存中的异常记录并发送至后台。
20、在一个可选的实施例中,所述在所述异常守护线程获取到所述信号量的情况下,通过所述异常守护线程对所述信号量进行分析,生成所述第一异常记录,包括:
21、获取所述异常线程的堆栈内容、所述异常进程所用的动态库信息以及异常语句前后机器码;
22、回溯所述异常线程对应的函数调用链;
23、基于所述信号量、所述堆栈内容、所述动态库信息、所述异常语句前后机器码以及所述函数调用链,生成所述第一异常记录。
24、在一个可选的实施例中,所述基于所述信号量、所述堆栈内容、所述动态库信息、所述异常语句前后机器码以及所述函数调用链,生成所述第一异常记录之后,所述方法还包括:
25、判断所述异常进程是否有对应的异常退出遗嘱;
26、若是,则执行所述异常退出遗嘱;
27、否则,提交本次异常,在延时后退出所述异常进程并赋予所述异常进程异常退出码。
28、在一个可选的实施例中,所述回溯所述异常线程对应的函数调用链,包括:
29、获取所述异常线程的堆栈指针寄存器、栈帧指针寄存器、连接寄存器以及程序计数器所存放的数据;
30、根据所述堆栈指针寄存器、所述栈帧指针寄存器、所述连接寄存器以及所述程序计数器所存放的数据,得到所述异常线程堆栈帧的地址;
31、根据所述异常线程堆栈帧的地址,通过查询符号表获得对应的函数名,确定函数间的调用关系;
32、基于所述函数间的调用关系确定所述异常线程对应的函数调用链。
33、在一个可选的实施例中,所述从所述第二目标内存中读取所述第二中断上下文信息并基于所述第二中断上下文信息生成第二异常记录之前,所述方法还包括:
34、获取所述第二目标内存的起始地址以及大小;
35、根据所述第二目标内存的特征字符判断所述第二目标内存中的内容是否有效;
36、若是,则从所述第二目标内存中读取所述第二中断上下文信息并基于所述第二中断上下文信息生成所述第二异常记录。
37、本发明还提供了一种异常处理装置,所述的装置包括:
38、异常类型确定模块,用于在获取到所述汽车开放系统架构自适应平台的中断异常信息的情况下,根据所述中断异常信息确定异常进程以及异常类型;
39、第一获取模块,用于在所述异常类型为用户态异常的情况下,基于所述异常进程对应的异常信号处理函数获取所述中断异常信息对应的第一中断上下文信息;
40、第一生成模块,用于基于所述异常信号处理函数以及所述第一中断上下文信息生成第一异常记录;
41、第一存储模块,用于将所述第一异常记录存储第一目标内存。
42、本发明还提供了一种电子设备,所述设备包括处理器和存储器,所述存储器中存储有至少一条指令或至少一段程序,所述至少一条指令或所述至少一段程序由所述处理器加载并执行,以实现如上述所述的异常处理方法。
43、本发明还提供了一种计算机可读存储介质,所述存储介质中存储有至少一条指令或至少一段程序,所述至少一条指令或所述至少一段程序由处理器加载并执行,以实现如上述所述的异常处理方法。
44、实施本发明实施例,具有如下有益效果:
45、本发明公开的异常处理方法,在汽车开放系统架构自适应平台发生系统异常时,可以保存内容丰富且易懂的异常记录,使得汽车开放系统架构自适应平台在开发、生产以及应用阶段都可以捕获并处理异常,从而提高了汽车开放系统架构自适应平台的异常处理能力以及效率。