掌桥专利:专业的专利平台
掌桥专利
首页

一种程序故障定位方法、装置、设备及可读存储介质

文献发布时间:2023-06-19 10:29:05


一种程序故障定位方法、装置、设备及可读存储介质

技术领域

本发明涉及计算机应用技术领域,特别是涉及一种程序故障定位方法、装置、设备及计算机可读存储介质。

背景技术

在信息时代,每时每刻都有不计其数的应用程序在运行,为用户提供各式各样的服务。程序开发及运行过程中开发者与运维人员经常面临着不可预期的问题与程序故障,因此衍生出多种排除计算机程序或系统中故障(Debug)的方法与手段,排除计算机程序或系统中故障最重要的前提条件是进行程序故障定位。

现有的程序故障定位方式多数依赖于集成开发环境(Integrated DevelopmentEnvironment,IDE)进行调试,但是一部分程序受软硬件依赖或运行时环境限制无法在集成开发环境中进行调试运行,另外现代应用程序往往庞大且复杂,代码量数大,期间调用关系复杂,开发者难以理清其中脉路,导致程序故障定位效率低,故障定位准确性低。

综上所述,如何有效地解决现有的程序故障定位方式程序故障定位效率低,故障定位准确性低等问题,是目前本领域技术人员急需解决的问题。

发明内容

本发明的目的是提供一种程序故障定位方法,该方法较大地提升了程序故障定位效率,提高了故障定位准确性;本发明的另一目的是提供一种程序故障定位装置、设备及计算机可读存储介质。

为解决上述技术问题,本发明提供如下技术方案:

一种程序故障定位方法,包括:

对接收到的程序故障定位请求进行解析,得到待故障定位的目标程序文件;

获取所述目标程序文件对应的目标运行日志;

按照所述目标程序文件中的预置打印语句对所述目标运行日志进行筛选操作,得到目标打印内容;

根据所述目标打印内容进行程序故障定位。

在本发明的一种具体实施方式中,根据所述目标打印内容进行程序故障定位,包括:

对所述目标打印内容按照预设格式转换规则进行格式转换,得到目标格式数据;

根据所述目标格式数据进行图像绘制操作,得到目标图像;

根据所述目标图像进行程序故障定位。

在本发明的一种具体实施方式中,对所述目标打印内容按照预设格式转换规则进行格式转换,包括:

对所述目标打印内容按照进行json数据格式转换。

在本发明的一种具体实施方式中,根据所述目标格式数据进行图像绘制操作,包括:

根据所述目标格式数据进行时序图绘制操作。

在本发明的一种具体实施方式中,根据所述目标格式数据进行图像绘制操作,包括:

根据所述目标格式数据进行散点图绘制操作。

在本发明的一种具体实施方式中,按照所述目标程序文件中的预置打印语句对所述目标运行日志进行筛选操作,包括:

利用grep抓取命令按照所述预置打印语句对所述目标运行日志进行关键词过滤操作。

在本发明的一种具体实施方式中,所述目标程序文件添加所述预置打印语句的过程包括:

获取所述目标程序文件的目标后缀名;

根据所述目标后缀名确定所述目标程序文件所属的目标文件类型;

获取所述目标文件类型对应的目标代码结构和目标语法规则;

根据所述目标代码结构从所述目标程序文件中选取各打印语句注入位置,并根据所述目标语法规则生成所述预置打印语句;

将所述预置打印语句添加至各所述打印语句注入位置。

一种程序故障定位装置,包括:

文件获得模块,用于对接收到的程序故障定位请求进行解析,得到待故障定位的目标程序文件;

日志获取模块,用于获取所述目标程序文件对应的目标运行日志;

打印内容获得模块,用于按照所述目标程序文件中的预置打印语句对所述目标运行日志进行打印操作,得到目标打印内容;

故障定位模块,用于根据所述目标打印内容进行程序故障定位。

一种程序故障定位设备,包括:

存储器,用于存储计算机程序;

处理器,用于执行所述计算机程序时实现如前所述程序故障定位方法的步骤。

一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如前所述程序故障定位方法的步骤。

本发明所提供的程序故障定位方法,对接收到的程序故障定位请求进行解析,得到待故障定位的目标程序文件;获取目标程序文件对应的目标运行日志;按照目标程序文件中的预置打印语句对目标运行日志进行筛选操作,得到目标打印内容;根据目标打印内容进行程序故障定位。

由上述技术方案可知,通过在目标程序文件中预先设置打印语句,当需要对目标程序文件进行故障定位时,按照预置打印语句对目标程序文件对应的目标运行日志自动进行筛选,根据目标打印内容进行程序间调用关系分析,实现程序故障定位。较大地提升了程序故障定位效率,避免了对需打印内容的遗漏,提高了故障定位准确性。

相应的,本发明实施例还提供了与上述程序故障定位方法相对应的程序故障定位装置、设备和计算机可读存储介质,具有上述技术效果,在此不再赘述。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例中程序故障定位方法的一种实施流程图;

图2为本发明实施例中程序故障定位方法的另一种实施流程图;

图3为本发明实施例中程序故障定位方法的另一种实施流程图;

图4为本发明实施例中一种程序故障定位装置的结构框图;

图5为本发明实施例中一种程序故障定位设备的结构框图。

具体实施方式

为了使本技术领域的人员更好地理解本发明方案,下面结合附图和具体实施方式对本发明作进一步的详细说明。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

实施例一:

参见图1,图1为本发明实施例中程序故障定位方法的一种实施流程图,该方法可以包括以下步骤:

S101:对接收到的程序故障定位请求进行解析,得到待故障定位的目标程序文件。

当需要进行程序故障定位时,向程序故障定位中心发送程序故障定位请求,程序故障定位请求中包含待故障定位的目标程序文件。程序故障定位中心接收程序故障定位请求,并对接收到的程序故障定位请求进行解析,得到待故障定位的目标程序文件。程序故障定位请求对应的目标程序文件可以为一个也可以为多个。

S102:获取目标程序文件对应的目标运行日志。

在程序开发及运行的过程中会生成相应的运行日志,预先对各程序文件对应的运行日志进行存储。在解析得到待故障定位的目标程序文件之后,获取目标程序文件对应的目标运行日志。

S103:按照目标程序文件中的预置打印语句对目标运行日志进行筛选操作,得到目标打印内容。

预先在目标程序文件中添加有预置打印语句,在获取到目标程序文件对应的目标运行日志之后,按照目标程序文件中的预置打印语句对目标运行日志进行筛选操作,得到目标打印内容。如可以通过类when-who-what正则表达式从目标运行日志获取目标打印内容,其中当前时间信息开头为“when”,使用当前识别的编程语言获取当前的时间;当前类别的信息为“who”,表示当前在哪一个类中,一般在同一个类中保持不变;当前操作信息开头为“what”,表示当前进行的行为。

S104:根据目标打印内容进行程序故障定位。

在通过按照目标程序文件中的预置打印语句对目标运行日志进行打印得到目标打印内容之后,根据目标打印内容进行程序故障定位。根据目标打印内容进行程序间调用关系分析,实现程序故障定位。较大地提升了程序故障定位效率,避免了对需打印内容的遗漏,提高了故障定位准确性。

本发明所提供的程序故障定位方法,通过在目标程序文件中预先设置打印语句,当需要对目标程序文件进行故障定位时,按照预置打印语句对目标程序文件对应的目标运行日志自动进行筛选,根据目标打印内容进行程序间调用关系分析,实现程序故障定位。较大地提升了程序故障定位效率,避免了对需打印内容的遗漏,提高了故障定位准确性。

需要说明的是,基于上述实施例一,本发明实施例还提供了相应的改进方案。在后续实施例中涉及与上述实施例一中相同步骤或相应步骤之间可相互参考,相应的有益效果也可相互参照,在下文的改进实施例中不再一一赘述。

实施例二:

参见图2,图2为本发明实施例中程序故障定位方法的另一种实施流程图,该方法可以包括以下步骤:

S201:获取目标程序文件的目标后缀名。

在对目标程序文件添加打印语句时,获取目标程序文件的目标后缀名。后缀名包括“.java”、“.scala”、“.cpp”等。

S202:根据目标后缀名确定目标程序文件所属的目标文件类型。

根据程序文件的后缀名可以识别程序文件对应的文件类型。在获取到目标程序文件的目标后缀名之后,根据目标后缀名确定目标程序文件所属的目标文件类型。如“.java”代表源码使用的是Java编程语言,“.scala”代表源码使用的是Scala编程语言,“.cpp”代表源码使用的是C++编程语言等。

S203:获取目标文件类型对应的目标代码结构和目标语法规则。

在确定目标程序文件所属的目标文件类型之后,获取目标文件类型对应的目标代码结构和目标语法规则。如根据识别的编程语言选择对应的解析器,解析器中根据该编程语言的特征语法识别源码中的类、方法、变量等特定代码结构,语法规则的主要信息包括当前时间、当前类别,当前操作。

S204:根据目标代码结构从目标程序文件中选取各打印语句注入位置,并根据目标语法规则生成预置打印语句。

在获取到目标文件类型对应的目标代码结构和目标语法规则之后,根据目标代码结构从目标程序文件中选取各打印语句注入位置,并根据目标语法规则生成预置打印语句。如在根据该编程语言的特征语法识别源码中的类、方法、变量等特定代码结构之后,在其下一行插入空行并将其行号标记出来,注入器在标记的行号位置,根据上下文内容使用编程语言对应的语法在在空行中填充一条打印语句。

以一段简单的Java代码为例说明,程序文件原始状态如下:

插入空行后的文件状态如下:

其中,[空行-行号x]字样仅为说明之用,实际上不写此类语句。以上插入了3行空行,空行行号分别为2、5、14。

S205:将预置打印语句添加至各打印语句注入位置。

在根据目标代码结构从目标程序文件中选取各打印语句注入位置,并根据目标语法规则生成预置打印语句之后,将预置打印语句添加至各打印语句注入位置。

承接上述举例,在行号分别为2、5、14的空行中注入Java的打印语句如下:

通过自动化的方法向源码中添加逐条的、规范的打印语句,降低了人工工作量,减少了点位疏漏。

S206:对接收到的程序故障定位请求进行解析,得到待故障定位的目标程序文件。

S207:获取目标程序文件对应的目标运行日志。

S208:利用grep抓取命令按照预置打印语句对目标运行日志进行关键词过滤操作,得到目标打印内容。

在获取到目标程序文件对应的目标运行日志之后,利用grep抓取命令按照预置打印语句对目标运行日志进行关键词过滤操作,得到目标打印内容。其中当前时间信息开头为“when”,使用当前识别的编程语言获取当前的时间;当前类别的信息为“who”,表示当前在哪一个类中,一般在同一个类中保持不变,如步骤S205中示例均为“TestMax”;当前操作信息开头为“what”,表示当前进行的行为,一般第一个行为是首次进入类,其他行为是使用某个方法。处理阶段可以根据数据情况将时间精简(所有时间均为同一日期的可以省略日期),如将2020-11-11 12:01:01省去日期处理为120101;将同一个类中的方法按出现顺序编号,例如依次出现了代码A类中的方法a,方法b,方法c,则表示为A-1,A-2,A-3,在坐标轴上以1、2、3即可表示。

grep抓取命令是Linux中很常用的命令,用于查找文件中符合条件的字符串,如果查到,会把文件的那一列显示出来。支持通配符,支持正则表达式,功能强大。

S209:对目标打印内容按照进行json数据格式转换,得到目标格式数据。

在打印得到目标打印内容之后,对目标打印内容按照进行json数据格式转换,得到易读的json格式的目标格式数据。

S210:根据目标格式数据进行时序图绘制操作,得到目标图像。

在对目标打印内容按照进行json数据格式转换,得到目标格式数据之后,根据目标格式数据进行时序图绘制操作,得到目标图像。

在进行时序图绘制时,可以将时间数据进行平滑处理,以平滑时间为横坐标轴,以方法顺序编号为纵坐标轴,用不同颜色或形状的图例表示不同类别的数据进行绘图,展示时间序列变化。时间平滑处理是指将时分秒数据转化为连续的自然数。例如两个数据有,12点整原写法为120000,12点1分1秒为120101,不做处理直接绘图时二者间隔为101单位,这时图形比例失真。平滑处理将120000,120101分别转化为0和61进行操作,以此类推。

S211:根据目标图像进行程序故障定位。

在进行时序图绘制操作,得到目标图像之后,根据目标图像进行程序故障定位。通过时序图可视化手段展示程序运行期间的调用关系,有助于理解程序运行逻辑,并更快定位问题所在,减少排除计算机程序或系统中故障的耗时。

实施例三:

参见图3,图3为本发明实施例中程序故障定位方法的另一种实施流程图,该方法可以包括以下步骤:

S301:获取目标程序文件的目标后缀名。

S302:根据目标后缀名确定目标程序文件所属的目标文件类型。

S303:获取目标文件类型对应的目标代码结构和目标语法规则。

S304:根据目标代码结构从目标程序文件中选取各打印语句注入位置,并根据目标语法规则生成预置打印语句。

S305:将预置打印语句添加至各打印语句注入位置。

S306:对接收到的程序故障定位请求进行解析,得到待故障定位的目标程序文件。

S307:获取目标程序文件对应的目标运行日志。

S308:利用grep抓取命令按照预置打印语句对目标运行日志进行关键词过滤操作,得到目标打印内容。

S309:对目标打印内容按照进行json数据格式转换,得到目标格式数据。

S310:根据目标格式数据进行散点图绘制操作,得到目标图像。

在对目标打印内容按照进行json数据格式转换,得到目标格式数据之后,根据目标格式数据进行散点图绘制操作,得到目标图像。

散点图可以以不同类别为横坐标,以时间为纵坐标,将方法作为点标签进行绘图,按顺序连接散点可观察不同类方法之间的调用关系。

S311:根据目标图像进行程序故障定位。

相应于上面的方法实施例,本发明实施例还提供了一种程序故障定位装置,下文描述的程序故障定位装置与上文描述的程序故障定位方法可相互对应参照。

参见图4,图4为本发明实施例中一种程序故障定位装置的结构框图,该装置可以包括:

文件获得模块41,用于对接收到的程序故障定位请求进行解析,得到待故障定位的目标程序文件;

日志获取模块42,用于获取目标程序文件对应的目标运行日志;

打印内容获得模块43,用于按照目标程序文件中的预置打印语句对目标运行日志进行筛选操作,得到目标打印内容;

故障定位模块44,用于根据目标打印内容进行程序故障定位。

本发明所提供的程序故障定位装置,通过在目标程序文件中预先设置打印语句,当需要对目标程序文件进行故障定位时,按照预置打印语句对目标程序文件对应的目标运行日志自动进行筛选,根据目标打印内容进行程序间调用关系分析,实现程序故障定位。较大地提升了程序故障定位效率,避免了对需打印内容的遗漏,提高了故障定位准确性。

在本发明的一种具体实施方式中,故障定位模块44包括:

数据格式转换子模块,用于对目标打印内容按照预设格式转换规则进行格式转换,得到目标格式数据;

图像绘制子模块,用于根据目标格式数据进行图像绘制操作,得到目标图像;

故障定位子模块,用于根据目标图像进行程序故障定位。

在本发明的一种具体实施方式中,数据格式转换子模块具体为对目标打印内容按照进行json数据格式转换的模块。

在本发明的一种具体实施方式中,图像绘制子模块具体为根据目标格式数据进行时序图绘制操作的模块。

在本发明的一种具体实施方式中,图像绘制子模块具体为根据目标格式数据进行散点图绘制操作的模块。

在本发明的一种具体实施方式中,打印内容获得模块43具体为利用grep抓取命令按照预置打印语句对目标运行日志进行关键词过滤操作的模块。

在本发明的一种具体实施方式中,该装置包括打印语句添加模块,打印语句添加模块包括:

文件后缀名获得子模块,用于获取目标程序文件的目标后缀名;

文件类型确定子模块,用于根据目标后缀名确定目标程序文件所属的目标文件类型;

结构及规则获取子模块,用于获取目标文件类型对应的目标代码结构和目标语法规则;

位置选取及语句生成子模块,用于根据目标代码结构从目标程序文件中选取各打印语句注入位置,并根据目标语法规则生成预置打印语句;

语句添加子模块,用于将预置打印语句添加至各打印语句注入位置。

相应于上面的方法实施例,参见图5,图5为本发明所提供的程序故障定位设备的示意图,该设备可以包括:

存储器51,用于存储计算机程序;

处理器52,用于执行上述存储器51存储的计算机程序时可实现如下步骤:

对接收到的程序故障定位请求进行解析,得到待故障定位的目标程序文件;获取目标程序文件对应的目标运行日志;按照目标程序文件中的预置打印语句对目标运行日志进行筛选操作,得到目标打印内容;根据目标打印内容进行程序故障定位。

对于本发明提供的设备的介绍请参照上述方法实施例,本发明在此不做赘述。

相应于上面的方法实施例,本发明还提供一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时可实现如下步骤:

对接收到的程序故障定位请求进行解析,得到待故障定位的目标程序文件;获取目标程序文件对应的目标运行日志;按照目标程序文件中的预置打印语句对目标运行日志进行筛选操作,得到目标打印内容;根据目标打印内容进行程序故障定位。

该计算机可读存储介质可以包括:U盘、移动硬盘、只读存储器(Read-OnlyMemory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。

对于本发明提供的计算机可读存储介质的介绍请参照上述方法实施例,本发明在此不做赘述。

本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。对于实施例公开的装置、设备及计算机可读存储介质而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。

本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的技术方案及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权利要求的保护范围内。

相关技术
  • 一种程序故障定位方法、装置、设备及可读存储介质
  • 一种软件故障定位方法、装置、设备及可读存储介质
技术分类

06120112568604