一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

程序异常处理方法及系统与流程

2021-11-18 02:11:00 来源:中国专利 TAG:


1.本公开涉及电子信息技术领域,尤其涉及程序异常处理方法及系统。


背景技术:

2.随着技术的不断发展,编程软件的应用也随之增加,如,c 因为自身高效、灵活、便于移植等特点,基于c 技术的应用越来越多。在给用户带来极大便利的同时,也因为其高效的数据操作给用户带来了使用不便:当该c 软件发生程序异常时程序时,会直接崩溃退出,比如:内存溢出,空指针等操作导致应用突然崩溃;因为程序直接退出,而缺少异常善后处理的措施,用户无法得知软件运行异常的原因,从而无法针对性的解决运行异常。


技术实现要素:

3.本公开实施例提供一种程序异常处理方法及系统,能够解决当软件程序发生运行异常时,无法解决运行异常的问题。该技术方案如下:
4.根据本公开实施例的第一方面,提供一种程序异常处理方法,该方法包括:
5.当检测到软件程序启动后,激活结构化异常捕获功能,该结构化异常捕获功能用于捕获该软件程序的运行异常,该结构化异常捕获功能部署于该软件程序中;
6.当通过该结构化异常捕获功能捕获到该软件程序的运行异常时,拦截处理该运行异常,并生成异常信息,该异常信息包括该运行异常的类型,该运行异常的类型至少包括进程异常或线程异常;
7.根据该异常信息和预设控制策略,确定该运行异常对应的目标控制策略。
8.在一个实施例中,该方法中拦截处理该运行异常,包括:
9.当该运行异常为进程异常时,对该进程异常进行拦截处理,该进程异常至少包括:函数调用引发的异常、内存分配错误异常、无效参数异常、进程异常信号、终止信号中的至少一种;
10.当该运行异常为线程异常时,对该线程异常进行拦截处理,该线程异常至少包括:函数对软件程序的终止操作、线程异常信号和终止信号中的至少一种。
11.在一个实施例中,该方法中生成异常信息,包括:
12.根据拦截处理的线性异常或者进程异常中的拦截结果,生成异常信息。
13.在一个实施例中,该方法还包括:
14.当查找到与该异常信息相匹配的目标控制策略时,执行目标控制策略,该目标控制策略包括:异常修复处理、异常存储处理、异常导出处理、异常提醒处理中的至少一种。
15.在一个实施例中,该方法还包括:
16.当未查找到与该异常信息相匹配的目标控制策略时,生成提示信息,该提示信息用于提示生成该运行异常的控制策略。
17.本公开实施例提供的程序异常处理方法,在软件程序中部署结构化异常捕获模块,当软件程序出现运行异常时,结构化异常捕获模块拦截该运行异常,并生成异常信息,
根据该异常信息查找到与该运行异常相匹配的控制策略,并响应,从而能够避免出现软件程序异常时直接退出软件,无法对该运行异常进行分析和处理,并且能够按照用户的操作采取相应的控制策略,提高了异常处理的效率。
18.根据本公开实施例的第二方面,提供一种程序异常处理系统,包括:程序模块和异常处理模块,
19.该程序模块中部署软件程序和结构化异常捕获模块,该软件程序至少包括c 程序,该结构化异常捕获模块用于捕获该软件程序的运行异常;
20.该程序模块,用于当该结构化异常捕获模块捕获到该软件程序的运行异常时,拦截处理该运行异常,并生成异常信息,该异常信息包括该运行异常的类型,该运行异常的类型至少包括进程异常或线程异常;
21.向该异常处理模块发送该异常信息;
22.该异常处理模块,用于根据该异常信息和预设控制策略,确定该异常信息对应的目标控制策略。
23.在一个实施例中,该系统还包括行为控制模块,该行为控制模块和该异常处理模块相连接,
24.该行为控制模块,用于接收该异常处理模块发送的请求信息,该请求信息用于请求获取该异常信息相匹配的控制策略;
25.当查找到与该异常信息相匹配的目标控制策略时,向该异常处理模块发送该目标控制策略,该目标控制策略根据用户的操作进行设定;
26.当未查找到与该异常信息相匹配的目标控制策略时,生成提示信息,该提示信息用于提示生成该运行异常的控制策略。
27.在一个实施例中,该系统中的结构化异常捕获模块还用于:
28.当该运行异常为进程异常时,对该进程异常进行拦截处理,该进程异常至少包括:函数调用引发的异常、内存分配错误的异常、无效参数的异常、进程的异常信号、终止信号中的至少一种;
29.当该运行异常为线程异常时,对该线程异常进行拦截处理,该线程异常至少包括:函数对软件程序的终止操作、线程的异常信号和终止信号中的至少一种。
30.在一个实施例中,该系统中的程序模块还用于:
31.根据拦截处理的线性异常或者进程异常中的结果,生成异常信息。
32.在一个实施例中,该系统中的异常处理模块还用于:
33.获取该行为控制模块发送的目标控制策略;
34.执行目标控制策略,该目标控制策略包括:异常修复处理、异常存储处理、异常导出处理、异常提醒处理中的至少一种。
35.应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
36.此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。
37.图1是本公开实施例提供的一种程序异常处理方法的流程图;
38.图1a是本公开实施例提供的一种程序异常处理方法中的控制策略;
39.图1b是本公开实施例提供的一种程序异常处理方法的逻辑图;
40.图2是本公开实施例提供的一种程序异常处理系统的结构图;
41.图2a是本公开实施例提供的一种程序异常处理系统中程序模块的结构图;
42.图2b是本公开实施例提供的一种程序异常处理系统的逻辑图。
具体实施方式
43.这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的系统和方法的例子。
44.本公开实施例提供一种程序异常处理方法,如图1所示,该程序异常处理方法包括以下步骤:
45.101、当检测到软件程序启动后,激活结构化异常捕获功能。
46.该结构化异常捕获功能用于捕获该软件程序的运行异常,该结构化异常捕获功能部署于该软件程序中;
47.本公开所提供方法中,该结构化异常捕获功能可以是部署于c 软件程序中的模块。
48.本公开所提供方法通过设置结构化异常捕获模块,定义windows顶级异常处理捕获器等,对c 应用程序进行实时监控,在进程崩溃时保证捕获到相关错误。
49.102、当通过该结构化异常捕获功能捕获到该软件程序的运行异常时,拦截处理该异常,并生成异常信息。
50.该异常信息包括该运行异常的类型,该运行异常的类型至少包括进程异常或线程异常。
51.例如,当运行异常的类型为进程异常时,可以包括如下运行的异常:顶级seh异常、纯虚函数调用异常、内存分配错误异常、无效参数异常、例如,当运行异常的类型为进程异常时,可以包括如下异常的信号:sigabrt信号、sigint信号、sigterm信号等。
52.例如,当运行异常的类型为线性异常时,可以包括如下运行的异常:terminate函数异常、unexpected函数异常。
53.例如,当运行异常的类型为线性异常时,可以包括如下异常的信号:sigfpe信号、sigill信号、sigsegv信号,其中sigsegv是当一个进程执行了一个无效的内存引用,或发生段错误时发送给它的信号。
54.本公开所提供的方法中处理运行异常时,可以根据进程的异常进行处理,
55.当该运行异常为进程异常时,对该进程异常进行拦截处理,该进程异常至少包括:函数调用引发的异常、内存分配错误异常、无效参数异常、进程异常信号、终止信号中的至少一种;
56.当该运行异常为线程异常时,对该线程异常进行拦截处理,该线程异常至少包括:函数对软件程序的终止操作、线程异常信号和终止信号中的至少一种。
57.本公开所提供的方法中处理运行异常生成异常信息,包括:
58.根据拦截处理的线性异常或者进程异常中的拦截结果,生成异常信息。
59.本公开所提供的方法中在实际部署时,可以是c 程序启动后,可以处理三种类型的异常:通过操作系统的结构化异常处理机制产生的seh(structured exception handlin)异常,由c运行时库产生的crt进程错误,最后是产生信号。
60.每种错误类型都需要安装一个异常处理程序函数,该函数将拦截异常并执行一些错误恢复操作。
61.针对整个进程的异常,c 程序在启动后调用下面api完成异常处理程序安装:
62.1.setunhandledexceptionfilter捕获顶级seh异常
63.2._set_purecall_handler拦截纯虚函数调用引发的异常
64.3.std::set_new_handler拦截内存分配错误异常
65.4._set_invalid_parameter_handler拦截无效参数异常
66.5.signal拦截sigabrt,sigint和sigterm三种信号
67.例如,当软件程序的进程异常程序中调用了纯虚函数,被_set_purecall_handler拦截到,根据拦截结果:拦截的纯虚函数,生成异常信息,然后将发送给安装的异常处理程序。
68.针对当前线程的异常,c 程序在线程启动后调用下面api完成线程异常处理程序安装:
69.1.std::set_terminate拦截terminate()函数对程序的终止动作
70.2.std::set_unexpected拦截unexpected()函数对程序的终止动作
71.3.signal拦截sigfpe、sigill和sigsegv三种信号
72.c 程序发生异常后,上面安装的异常处理程序会收到c 程序发送的异常信息:
73.例如,当软件程序的线程异常线程中发生了段错误,导致发送了sigsegv信号,被signal拦截后,根据拦截结果:拦截的sigsegv信号,生成异常信息,将异常信息发送给异常处理程序。
74.本公开所提供的方法中,在异常信息发送完成后会阻塞等待程序执行完成,即根据用户预设的控制策略处理当前的异常。
75.基于上述的处理,本公开所提供的方法在c 程序入口,增加结构化异常处理代码,进行异常信息捕获,并通过异常处理程序响应用户自定义的行为控制策略,当c 应用程序崩溃后,能够按照用户的操作采取相应的控制策略,从而使得使c 程序在遇到未捕获异常时能够流畅的退出,并告知用户,起到一种应用程序"加固"的作用。
76.103、根据该异常信息和预设控制策略,确定该异常信息对应的控制策略。
77.本公开所提供方法捕获到软件程序的异常错误后,根据行为控制策略执行相应的操作,如简单的终止软件进程、存储异常、或将错误现场及时通知客户等操作,用户通过该行为控制策略能够获取软件程序异常的原因,分析该运行异常,从而有效的解决该运行异常。
78.如图1a所示的控制策略,本公开所提供的方法在查找到与异常信息相匹配的目标控制策略时,执行目标控制策略,该目标控制策略包括:异常的修复处理、异常的存储处理、运行异常的导出处理、异常的提醒处理中的至少一种。
79.如图1b所示的处理逻辑,本公开所提供的方法中还会确认是否有与该异常信息相匹配的控制策略,具体的:
80.当根据该异常信息,查找到与该异常信息相匹配的目标控制策略时,则确认是否监控该异常;
81.当确认监控该异常时,响应该目标控制策略,该目标控制策略根据用户的操作进行设定;
82.当根据该异常信息,未查找到与该异常信息相匹配的目标控制策略时,生成提示信息,该提示信息用于提示生成该运行异常的控制策略。
83.此处以捕获到应用程序的内存分配错误为例,列举具体的示例阐释如何处理该错误,具体的步骤如下:
84.步骤a、如果“行为控制策略”存在,程序解析策略,按照策略要求执行相应操作:
85.1)当异常处理程序接收到内存分配错误异常信息时,检查“行为控制策略”86.2)如果行为控制策略指示“监控”内存分配错误,则依次执行步骤4)5)6)7)8);
87.如果行为控制策略“不监控”的话,则执行步骤3);
88.3)执行默认策略后退出异常处理程序,控制权回到c 程序;
89.4)如果选择了“解析修复”,将提取内存错误异常参数:内存分配长度、内存分配位置,并通过配置文件修改分配长度;
90.5)如果选择了“邮件通知”,异常处理程序将内存错误信息通过邮件发送给管理员;
91.6)如果选择了“数据库存储”,异常处理程序将内存错误信息存储到数据库;
92.7)如果选择了“报表导出”,异常处理程序将从数据库导出异常报表;
93.8)如果选择了“弹窗提示”,异常处理程序将在用户桌面弹窗显示内存错误信息提醒用户;
94.9)最后执行步骤3)。
95.步骤b、如果“行为控制策略”不存在,提示用户下发行为控制策略,然后按照默认策略执行,生成崩溃信息,该崩溃信息至少可以包括dump文件和错误反馈报告中的至少一种。
96.本公开实施例提供的程序异常处理方法,在软件程序中部署结构化异常捕获模块,当软件程序出现运行异常时,结构化异常捕获模块拦截该运行异常,并生成异常信息,根据该异常信息查找到与该运行异常相匹配的控制策略,并响应,从而能够避免出现软件程序异常时直接退出软件,无法对该运行异常进行分析和处理,并且能够按照用户的操作采取相应的控制策略,提高了异常处理的效率。
97.实施例二
98.基于上述图1对应的实施例中所描述的程序异常处理方法,下述为本公开系统实施例,可以用于执行本公开方法实施例。
99.本公开实施例提供一种程序异常处理系统,如图2所示,该程序异常处理系统20包括:程序模块201和异常处理模块202。
100.如图2a所示,该程序模块运行软件程序,如c 程序,该程序模块201中部署结构化异常捕获模块2011,该结构化异常捕获模块用于捕获该软件程序的运行异常。
101.该程序模块201,用于当检测到该软件程序2011启动后,激活该结构化异常捕获模块2012;
102.当该结构化异常捕获模块2012捕获到该软件程序2011的运行异常时,拦截处理该运行异常,并生成异常信息,该异常信息包括该运行异常的类型,该运行异常的类型至少包括进程异常或线程异常;
103.向该异常处理模块202发送该异常信息;
104.该异常处理模块202,用于根据该异常信息和预设控制策略,确定该异常信息对应的目标控制策略。
105.在可选实施例中上述的模块可以是硬件的设备,也可以是软件的应用程序。
106.在可选的实施例中该系统20中还包括行为控制模块203,该行为控制模块203和该异常处理模块202相连接,
107.该行为控制模块203,用于接收该异常处理模块202发送的请求信息,该请求信息用于请求获取该异常信息相匹配的控制策略;
108.当查找到与该异常信息相匹配的目标控制策略时,向该异常处理模块202发送该目标控制策略,该目标控制策略根据用户的操作进行设定;
109.当未查找到与该异常信息相匹配的目标控制策略时,生成提示信息,该提示信息用于提示生成该运行异常的控制策略。
110.在可选的实施例中,该系统20中的结构化异常捕获模块201还用于:
111.当该运行异常为进程异常时,对该进程异常进行拦截处理,该进程异常至少包括:函数调用引发的异常、内存分配错误异常、无效参数异常、进程异常信号、终止信号中的至少一种;
112.当该运行异常为线程异常时,对该线程异常进行拦截处理,该线程异常至少包括:函数对软件程序的终止操作、线程异常信号和终止信号中的至少一种。
113.在可选的实施例中,该系统20中的结构化异常捕获模块201还用于:
114.根据拦截处理的线性异常或者进程异常中的拦截结果,生成异常信息。
115.如,当软件程序的线程异常线程中发生了段错误,导致发送了sigsegv信号,被signal拦截后,根据拦截结果:拦截的sigsegv信号,生成异常信息,将异常信息发送给异常处理程序。
116.在可选的实施例中,该系统20中的异常处理模块202还用于:
117.获取该行为控制模块发送的目标控制策略;
118.执行目标控制策略,该目标控制策略包括:异常修复处理、异常存储处理、异常导出处理、异常提醒处理中的至少一种。
119.如图2b所示的逻辑示意图,本公开所提及的系统中的程序模块在c 程序中增加结构化异常捕获模块,通过结构化异常捕获模块进行c 程序中运行异常时的异常信息捕获,异常处理模块通过行为控制模块获取控制策略,并通过异常处理模块响应用户自定义的行为控制策略,能够按照调用者的意愿采取相应的控制策略;当在行为控制模块中未查找到与c 应程序的异常信息相匹配的控制策略时,则会激活崩溃行为,如生成dump文件等。
120.基于上述图1对应的实施例中所描述的程序异常处理方法,本公开实施例还提供
一种计算机可读存储介质,例如,非临时性计算机可读存储介质可以是只读存储器(英文:read only memory,rom)、随机存取存储器(英文:random access memory,ram)、cd

rom、磁带、软盘和光数据存储装置等。该存储介质上存储有计算机指令,用于执行上述图1对应的实施例中所描述的程序异常处理方法,此处不再赘述。
121.本领域技术人员在考虑说明书及实践这里公开的公开后,将容易想到本公开的其它实施方案。本技术旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由下面的权利要求指出。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献