程序运行故障诊断方法及装置、计算设备和存储介质制造方法及图纸

技术编号:34568036 阅读:13 留言:0更新日期:2022-08-17 12:58
本申请实施例涉及计算机技术领域,且涉及一种程序运行故障诊断方法及装置、计算设备和存储介质。具体方案为:构造步骤,包括在待诊断程序运行的过程中,针对触发执行的当前事件,根据当前事件与其上级事件的关系构造事件树;其中,上级事件是触发当前事件的事件;检查步骤,包括检查事件树的深度;建步骤,包括在事件树的深度大于等于预先设置的深度阈值的情况下,根据事件树构建有向图;检测步骤,包括对有向图执行环检测;诊断步骤,包括根据环检测的结果,得到待诊断程序的故障诊断结果。本申请实施例在待诊断程序运行过程中实现程序运行故障诊断,将故障定位到事件关联的脚本,避免无限循环关系导致进程假死,提高系统可靠性和资源利用率。资源利用率。资源利用率。

【技术实现步骤摘要】
程序运行故障诊断方法及装置、计算设备和存储介质


[0001]本专利技术涉及计算机
,尤其涉及程序运行故障诊断方法及装置、计算设备和存储介质。

技术介绍

[0002]目前,基于事件驱动的软件设计应用广泛于各个领域。从底层操作系统内核的进程调度、I/O事件,到应用层UI界面(User Interface,用户界面)、WEB(World Wide Web,全球广域网)网页的鼠标点击、键盘输入事件,都采用了事件模型来解决连续、随机出现的问题。一方面,绝大部分事件模型中的事件都是独立的,多个触发事件之间没有任何联系,即一次事件触发后完成的动作是有限且可预知的。另一方面,在一个由事件驱动脚本运行的系统中,由于脚本可以灵活编写任意代码,事件触发后的动作无法预知,且有可能会级联触发任意其他事件。在无法通过静态分析获得事件之间的触发关系时,如果在多个脚本的事件触发关系中存在循环,将会导致系统陷入事件的无限循环中,占用系统资源且可能导致进程假死。

技术实现思路

[0003]鉴于现有技术的以上问题,本申请实施例提供一种程序运行故障诊断方法及装置、计算设备和存储介质,可在待诊断程序运行的过程中实现程序运行故障诊断,可将故障信息定位到事件关联的脚本,避免因无限循环关系导致的进程假死,提高系统的可靠性和资源利用率。
[0004]为达到上述目的,本申请第一方面提供了一种程序运行故障诊断方法,包括:
[0005]构造步骤,包括在待诊断程序运行的过程中,针对触发执行的当前事件,根据所述当前事件与其上级事件的关系构造事件树;其中,所述上级事件是触发所述当前事件的事件;
[0006]检查步骤,包括检查所述事件树的深度;
[0007]构建步骤,包括在所述事件树的深度大于等于预先设置的深度阈值的情况下,根据所述事件树构建有向图;
[0008]检测步骤,包括对所述有向图执行环检测;
[0009]诊断步骤,包括根据所述环检测的结果,得到所述待诊断程序的故障诊断结果。
[0010]作为第一方面的一种可能的实现方式,所述方法还包括:
[0011]在待诊断程序运行的过程中,将所述当前事件添加到事件队列;
[0012]将所述事件队列的队首元素依次从所述事件队列中取出,针对所述队首元素执行所述构造步骤、所述检查步骤、所述构建步骤、所述检测步骤和所述诊断步骤。
[0013]作为第一方面的一种可能的实现方式,所述针对触发执行的当前事件,根据所述当前事件与其上级事件的关系构造事件树,包括:
[0014]将所述上级事件的实例设置到线程本地变量中;
[0015]在所述上级事件触发执行的过程中,根据所述线程本地变量获取所述当前事件与其上级事件的关系;
[0016]根据所述当前事件与其上级事件的关系构造事件树;
[0017]从所述线程本地变量中移除所述上级事件的实例。
[0018]作为第一方面的一种可能的实现方式,所述根据所述当前事件与其上级事件的关系构造事件树,包括:
[0019]在所述事件树中,将所述当前事件与其上级事件建立父子事件关系;
[0020]更新所述事件树的深度。
[0021]作为第一方面的一种可能的实现方式,所述根据所述事件树构建有向图,包括:
[0022]从所述事件树的根事件开始向下遍历所述事件树,针对所述事件树中的每个所述父子事件关系,在所述有向图中添加一条对应的邻接边;
[0023]基于所述邻接边构建所述有向图。
[0024]作为第一方面的一种可能的实现方式,所述根据所述环检测的结果,得到所述待诊断程序的故障诊断结果,包括:
[0025]在检测到所述有向图中存在环结构的情况下,确定所述待诊断程序存在运行故障。
[0026]作为第一方面的一种可能的实现方式,所述方法还包括:
[0027]在检测到所述有向图中存在环结构的情况下,禁用所述事件树的根事件。
[0028]本申请第二方面提供了一种程序运行故障诊断装置,包括:
[0029]构造单元,用于在待诊断程序运行的过程中,针对触发执行的当前事件,根据所述当前事件与其上级事件的关系构造事件树;其中,所述上级事件是触发所述当前事件的事件;
[0030]检查单元,用于检查所述事件树的深度;
[0031]构建单元,用于在所述事件树的深度大于等于预先设置的深度阈值的情况下,根据所述事件树构建有向图;
[0032]检测单元,用于对所述有向图执行环检测;
[0033]诊断单元,用于根据所述环检测的结果,得到所述待诊断程序的故障诊断结果。
[0034]作为第二方面的一种可能的实现方式,所述装置还包括队列管理单元,所述队列管理单元用于:
[0035]在待诊断程序运行的过程中,将所述当前事件添加到事件队列;
[0036]将所述事件队列的队首元素依次从所述事件队列中取出,针对所述队首元素执行所述构造单元、所述检查单元、所述构建单元、所述检测单元和所述诊断单元所执行的功能。
[0037]作为第二方面的一种可能的实现方式,所述构造单元用于:
[0038]将所述上级事件的实例设置到线程本地变量中;
[0039]在所述上级事件触发执行的过程中,根据所述线程本地变量获取所述当前事件与其上级事件的关系;
[0040]根据所述当前事件与其上级事件的关系构造事件树;
[0041]从所述线程本地变量中移除所述上级事件的实例。
[0042]作为第二方面的一种可能的实现方式,所述构造单元用于:
[0043]在所述事件树中,将所述当前事件与其上级事件建立父子事件关系;
[0044]更新所述事件树的深度。
[0045]作为第二方面的一种可能的实现方式,所述构建单元用于:
[0046]从所述事件树的根事件开始向下遍历所述事件树,针对所述事件树中的每个所述父子事件关系,在所述有向图中添加一条对应的邻接边;
[0047]基于所述邻接边构建所述有向图。
[0048]作为第二方面的一种可能的实现方式,所述诊断单元用于:
[0049]在检测到所述有向图中存在环结构的情况下,确定所述待诊断程序存在运行故障。
[0050]作为第二方面的一种可能的实现方式,所述装置还包括控制单元,所述控制单元用于:
[0051]在检测到所述有向图中存在环结构的情况下,禁用所述事件树的根事件。
[0052]本申请第三方面提供了一种计算设备,包括:
[0053]通信接口;
[0054]至少一个处理器,其与所述通信接口连接;以及
[0055]至少一个存储器,其与所述处理器连接并存储有程序指令,所述程序指令当被所述至少一个处理器执行时使得所述至少一个处理器执行上述第一方面任一所述的方法。
[0056]本申请第四方面提供了一种计算机可读存储介质,其上存储有程序指令,所述程序指令当被计算机执行时使得所述计算机执本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种程序运行故障诊断方法,其特征在于,包括:构造步骤,包括在待诊断程序运行的过程中,针对触发执行的当前事件,根据所述当前事件与其上级事件的关系构造事件树;其中,所述上级事件是触发所述当前事件的事件;检查步骤,包括检查所述事件树的深度;构建步骤,包括在所述事件树的深度大于等于预先设置的深度阈值的情况下,根据所述事件树构建有向图;检测步骤,包括对所述有向图执行环检测;诊断步骤,包括根据所述环检测的结果,得到所述待诊断程序的故障诊断结果。2.根据权利要求1所述的方法,其特征在于,所述方法还包括:在待诊断程序运行的过程中,将所述当前事件添加到事件队列;将所述事件队列的队首元素依次从所述事件队列中取出,针对所述队首元素执行所述构造步骤、所述检查步骤、所述构建步骤、所述检测步骤和所述诊断步骤。3.根据权利要求1所述的方法,其特征在于,所述针对触发执行的当前事件,根据所述当前事件与其上级事件的关系构造事件树,包括:将所述上级事件的实例设置到线程本地变量中;在所述上级事件触发执行的过程中,根据所述线程本地变量获取所述当前事件与其上级事件的关系;根据所述当前事件与其上级事件的关系构造事件树;从所述线程本地变量中移除所述上级事件的实例。4.根据权利要求3所述的方法,其特征在于,所述根据所述当前事件与其上级事件的关系构造事件树,包括:在所述事件树中,将所述当前事件与其上级事件建立父子事件关系;更新所述事件树的深度。5.根据权利要求4所述的方法,其特征在于,所述根据所述事件树构建有向图,包括:从所述事件树的根事件开始向下遍历所述事件...

【专利技术属性】
技术研发人员:张茂巡
申请(专利权)人:重庆云内核智能科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1