CN114297061A - 软件项目故障定位方法、装置及电子设备 - Google Patents
软件项目故障定位方法、装置及电子设备 Download PDFInfo
- Publication number
- CN114297061A CN114297061A CN202111615895.6A CN202111615895A CN114297061A CN 114297061 A CN114297061 A CN 114297061A CN 202111615895 A CN202111615895 A CN 202111615895A CN 114297061 A CN114297061 A CN 114297061A
- Authority
- CN
- China
- Prior art keywords
- target
- function
- information
- calling
- software project
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明提供了一种软件项目故障定位方法、装置及电子设备,涉及计算机技术领域,在进行软件项目故障定位时,先获取基于目标包名监听得到的目标页面操作对应的目标调用信息;然后按照请求来源标识对目标调用信息进行分组,得到至少一个集合;进而生成每个集合对应的调用链,以使研发人员基于各个集合对应的调用链定位目标软件项目的故障原因。这样一次性获取与页面触发效果相关的所有函数调用信息,并将其转换成调用链给研发人员排查,不需要运维人员与研发人员多次沟通,研发人员可以基于调用链快速定位故障原因,与相关现有技术相比,降低了运维人员和研发人员的沟通成本,提高了故障定位效率。
Description
技术领域
本发明涉及计算机技术领域,尤其是涉及一种软件项目故障定位方法、装置及电子设备。
背景技术
软件项目是复数个程序片段按照系统规划组成的程序集合,每个程序片段负责一项功能,共同支撑起一系列功能系统的正常运行。以电商项目为例子,如网购整个流程由消费者(用户)、商家、商品,再到购物车、订单、配送等一系列功能模块背后支撑的程序片段集合被成为项目。
在软件项目中,主要通过相关日志进行故障定位,但在部分场景中,软件研发人员因交付压力等原因没有打印相关日志,针对这种情况,需要在不影响软件项目服务正常使用的情况下定位问题原因。
目前最贴近该场景的工具是arthas,该工具可以在不重启服务的情况下,监听某个具体的函数调用,并打印函数的输入输出信息。图1为一种基于arthas工具的软件项目故障定位流程,如图1所示,运维人员发现故障问题后,将问题描述上报给研发人员;研发人员因缺少日志,需要对可疑代码进行验证,将arthas的watch监听命令发送给运维人员;运维人员拿到命令后,在软件项目的服务器上执行,并反馈命令执行结果给研发人员;反复执行以上步骤,通过运维人员和研发人员的多次沟通,最终确定问题原因。
可见,现有的基于arthas工具的软件项目故障定位方法存在运维人员和研发人员的沟通成本较高,故障定位效率较低的问题。
发明内容
本发明的目的在于提供一种软件项目故障定位方法、装置及电子设备,以降低运维人员和研发人员的沟通成本,提高故障定位效率。
第一方面,本发明实施例提供了一种软件项目故障定位方法,包括:
获取基于目标包名监听得到的目标页面操作对应的目标调用信息;其中,所述目标页面操作为在目标软件项目中完成一个发生故障的页面触发效果的相应操作;所述目标调用信息包括附带有请求来源标识的URL接口信息和附带有请求来源标识的至少一个被调用的目标函数的函数调用信息;
按照所述请求来源标识对所述目标调用信息进行分组,得到至少一个集合;每个所述集合包括一个URL接口信息和至少一个被调用的目标函数的函数调用信息;
生成每个所述集合对应的调用链,以使研发人员基于各个所述集合对应的调用链定位所述目标软件项目的故障原因。
进一步地,在获取基于目标包名监听得到的目标页面操作对应的目标调用信息之前,所述方法还包括:
当接收到携带有目标包名的启动监听指令时,基于字节码插桩技术、附着技术启动监听路径为所述目标包名的监听;
将监听到的目标页面操作对应的目标调用信息保存在数据缓冲系统中。
进一步地,所述获取基于目标包名监听得到的目标页面操作对应的目标调用信息,包括:
接收携带有所述目标包名的导出结果指令;
从所述数据缓冲系统中获取与所述目标包名对应的目标调用信息。
进一步地,所述函数调用信息包括方法标识、输入输出信息和父函数;所述生成每个所述集合对应的调用链,包括:
对于每个所述集合,根据当前集合中的URL接口信息,确定所述当前集合对应的调用链的第一级目标函数;
根据所述当前集合中的各个目标函数的函数调用信息中的父函数,确定所述当前集合对应的调用链的下一级目标函数;其中,所述下一级目标函数的父函数为当前级目标函数,当所述当前级目标函数为第一级目标函数时,所述下一级目标函数为第二级目标函数;
将所述当前集合中的各个目标函数的函数调用信息中的方法标识和输入输出信息,加入到所述当前集合对应的调用链的相应级目标函数中,得到所述当前集合对应的调用链。
进一步地,所述请求来源标识为每次调用时在线程的线程本地存储中记录的唯一标记,所述方法标识包括类名和方法名,所述输入输出信息包括输入参数、返回值和异常信息。
进一步地,在生成每个所述集合对应的调用链之后,所述方法还包括:
展示和/或保存各个所述集合对应的调用链。
第二方面,本发明实施例还提供了一种软件项目故障定位装置,包括:
获取模块,用于获取基于目标包名监听得到的目标页面操作对应的目标调用信息;其中,所述目标页面操作为在目标软件项目中完成一个发生故障的页面触发效果的相应操作;所述目标调用信息包括附带有请求来源标识的URL接口信息和附带有请求来源标识的至少一个被调用的目标函数的函数调用信息;
分组模块,用于按照所述请求来源标识对所述目标调用信息进行分组,得到至少一个集合;每个所述集合包括一个URL接口信息和至少一个被调用的目标函数的函数调用信息;
生成模块,用于生成每个所述集合对应的调用链,以使研发人员基于各个所述集合对应的调用链定位所述目标软件项目的故障原因。
进一步地,所述装置还包括监听模块,用于:
当接收到携带有目标包名的启动监听指令时,基于字节码插桩技术、附着技术启动监听路径为所述目标包名的监听;
将监听到的目标页面操作对应的目标调用信息保存在数据缓冲系统中。
第三方面,本发明实施例还提供了一种电子设备,包括存储器、处理器,所述存储器中存储有可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现第一方面所述方法。
第四方面,本发明实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器运行时执行第一方面所述方法。
本发明实施例提供的软件项目故障定位方法、装置及电子设备,在进行软件项目故障定位时,先获取基于目标包名监听得到的目标页面操作对应的目标调用信息;其中,目标页面操作为在目标软件项目中完成一个发生故障的页面触发效果的相应操作;目标调用信息包括附带有请求来源标识的URL接口信息和附带有请求来源标识的至少一个被调用的目标函数的函数调用信息;然后按照请求来源标识对目标调用信息进行分组,得到至少一个集合,每个集合包括一个URL接口信息和至少一个被调用的目标函数的函数调用信息;进而生成每个集合对应的调用链,以使研发人员基于各个集合对应的调用链定位目标软件项目的故障原因。这样一次性获取与页面触发效果相关的所有函数调用信息,并将其转换成调用链给研发人员排查,不需要运维人员与研发人员多次沟通,研发人员可以基于调用链快速定位故障原因,与相关现有技术相比,降低了运维人员和研发人员的沟通成本,提高了故障定位效率。
附图说明
为了更清楚地说明本发明具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为一种基于arthas工具的软件项目故障定位流程;
图2为本发明实施例提供的一种软件项目故障定位方法的流程示意图;
图3为本发明实施例提供的另一种软件项目故障定位方法的流程示意图;
图4为本发明实施例提供的一种监听页面示意图;
图5为本发明实施例提供的一种软件项目故障定位方法的信息流示意图;
图6为本发明实施例提供的一种软件项目故障定位方法的软件项目故障定位流程;
图7为本发明实施例提供的一种软件项目故障定位装置的结构示意图;
图8为本发明实施例提供的一种电子设备的结构示意图。
具体实施方式
下面将结合实施例对本发明的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
发明人发现基于arthas工具的软件项目故障定位方法存在如下问题:1、需要运维人员和研发人员反复沟通交流,步骤繁杂,在此过程中,双方都难以脱离此流程做其他工作,工作效率低(即故障定位效率较低);2、每次获取的执行结果孤立不全面,不利于对比分析;3、此过程属于命令行操作,运维人员的操作难度大。基于此,本发明实施例提供的一种软件项目故障定位方法、装置及电子设备,使用java的字节码插桩技术和attach(附着)技术,通过指定监听的包名即可启动监听功能,减少了运维人员执行源码方法的步骤,从而降低了运维人员的操作难度;研发人员可以一次性得到调用链形式的全部的函数执行信息(函数调用信息),降低了运维人员和研发人员的沟通成本,提高了故障定位效率。
为便于对本实施例进行理解,首先对本发明实施例所公开的一种软件项目故障定位方法进行详细介绍。
在java领域中包含广泛的javaweb项目,这些项目中大部分使用springmvc/springboot技术,本发明实施例提供了一种软件项目故障定位方法,致力于解决此领域的运维技术痛点-在页面请求出错后,缺少日志导致难以定位问题;降低使用门槛,通过页面可视化操作,得到关键性函数调用过程数据,而不需要直接操作软件项目的服务器。
参见图2所示的一种软件项目故障定位方法的流程示意图,该方法主要包括如下步骤S202~步骤S206:
步骤S202,获取基于目标包名监听得到的目标页面操作对应的目标调用信息。
其中,目标页面操作为在目标软件项目中完成一个发生故障的页面触发效果的相应操作,目标页面操作可能涉及一个或多个请求,一个请求的执行可以构成一个调用链。考虑到一个函数可能被多个请求调用,目标调用信息包括附带有请求来源标识的URL(Uniform Resource Locator,统一资源定位器)接口信息和附带有请求来源标识的至少一个被调用的目标函数的函数调用信息。请求来源标识可以为每次调用时在线程的ThreadLocal(线程本地存储)中记录唯一标记,每次函数调用信息记录都要附加上此标记,此标记用于区分函数调用的请求来源;函数调用信息可以包括方法标识、输入输出信息和父函数,方法标识可以包括类名和方法名,输入输出信息可以包括输入参数、返回值和异常信息。
为了便于理解,本实施例还提供了如下内容:包(package)是类和接口的集合,一个包内会定义一系列功能相关的类和接口,以便于进行代码复用,包名也是类名的一部分。类就是同一类事物在概念层次上的抽象,一个类通常就是代表一类实体的定义,是实体的抽象。要想描述一个实体(对象),通常从两个方面进行描述,分别是代表功能的“方法”和代表状态的“属性”,所以在类的定义中就需要定义相应的方法和属性。方法通常需要一个完整的功能体来描述方法的具体功能,功能体中则是代表具体功能的代码语句,也叫做“功能语句”。
步骤S204,按照请求来源标识对目标调用信息进行分组,得到至少一个集合,每个集合包括一个URL接口信息和至少一个被调用的目标函数的函数调用信息。
步骤S206,生成每个集合对应的调用链,以使研发人员基于各个集合对应的调用链定位目标软件项目的故障原因。
本发明实施例提供的软件项目故障定位方法,在进行软件项目故障定位时,先获取基于目标包名监听得到的目标页面操作对应的目标调用信息;其中,目标页面操作为在目标软件项目中完成一个发生故障的页面触发效果的相应操作;目标调用信息包括附带有请求来源标识的URL接口信息和附带有请求来源标识的至少一个被调用的目标函数的函数调用信息;然后按照请求来源标识对目标调用信息进行分组,得到至少一个集合,每个集合包括一个URL接口信息和至少一个被调用的目标函数的函数调用信息;进而生成每个集合对应的调用链,以使研发人员基于各个集合对应的调用链定位目标软件项目的故障原因。这样一次性获取与页面触发效果相关的所有函数调用信息,并将其转换成调用链给研发人员排查,不需要运维人员与研发人员多次沟通,研发人员可以基于调用链快速定位故障原因,与基于arthas工具的软件项目故障定位方法相比,降低了运维人员和研发人员的沟通成本,提高了故障定位效率。
本发明实施例还提供了另一种软件项目故障定位方法,与图2相比,细化了部分步骤并增加了监听流程。参见图3所示的另一种软件项目故障定位方法的流程示意图,该方法包括:
步骤S302,当接收到携带有目标包名的启动监听指令时,基于字节码插桩技术、附着技术启动监听路径为目标包名的监听。
本发明实施例使用java的字节码插桩技术和attach(附着)技术,字节码插桩技术可以通过开发javaagent程序修改已发布的java项目的字节码,通过字节码插桩技术给函数添加AOP(Aspect Oriented Programming,面向切面编程)代理,拦截函数调用;attatch技术可以让修改过程发生在项目运行时,通过这2项技术就达到动态增强程序的效果,再指定监听的包名,实现函数的AOP的横向切面埋点,记录URL接口信息和函数调用信息(输入参数、返回值和异常信息等)。
包名来源:软件企业都是有固定且不与其他其他软件企业相冲突的包名,业务代码都在此包路径下,企业内全部项目都使用该包名,基于此包名开启监听,可以增强包名下的全部业务方法。
步骤S304,将监听到的目标页面操作对应的目标调用信息保存在数据缓冲系统中。
数据缓冲系统可以但不限于是文件或数据库等持久化工具。
步骤S306,接收携带有目标包名的导出结果指令。
步骤S308,从数据缓冲系统中获取与目标包名对应的目标调用信息。
步骤S310,按照请求来源标识对目标调用信息进行分组,得到至少一个集合。
对于每个集合,通过如下步骤S312~步骤S316生成每个集合对应的调用链。
步骤S312,根据当前集合中的URL接口信息,确定当前集合对应的调用链的第一级目标函数。
步骤S314,根据当前集合中的各个目标函数的函数调用信息中的父函数,确定当前集合对应的调用链的下一级目标函数。
其中,下一级目标函数的父函数为当前级目标函数,当当前级目标函数为第一级目标函数时,下一级目标函数为第二级目标函数。
步骤S316,将当前集合中的各个目标函数的函数调用信息中的方法标识和输入输出信息,加入到当前集合对应的调用链的相应级目标函数中,得到当前集合对应的调用链。
步骤S318,展示和/或保存各个集合对应的调用链。
可以选择直接展示各个集合对应的调用链给研发人员,也可以选择展示和保存各个集合对应的调用链给研发人员,还可以保存各个集合对应的调用链,之后通过运维人员发送给研发人员。
本实施例中运维人员可以进行页面可视化操作,参见图4所示的一种监听页面示意图,运维人员在监听路径中输入包名后,点击启动监听按钮启动监听。启动监听后,在运维人员完成一个页面触发效果的操作(可能涉及一个或多个请求,不同请求可能调用同一个函数)的过程中,监听调用过程信息。如图4所示,可以在监听页面上显示监听到的URL接口信息和函数调用信息,URL接口信息可以包括URL、触发时间和Controller(控制)名(即Controller方法名),Controller名为调用链顶点的方法名,函数调用信息包括方法名、输入参数、返回值和异常信息,其中方法名中包括类名。之后运维人员可以通过点击导出结果按钮,发送导出结果指令,从而导出各个集合对应的调用链。
参见图5所示的一种软件项目故障定位方法的信息流示意图,在应用程序侧监听并收集URL接口信息、请求来源标识和函数调用的父函数,将监听到的目标调用信息保存至诸如文件/数据库等持久化工具中,之后通过分析程序对监听结果进行分析、归类,显示函数的执行流程。
其中,Controller层的URL接口信息的收集:javaweb系统中,Controller层包含的URL和方法名都是会注册到具体的上下文(即Context,执行任务所需要的相关信息。这个任务可以是一段代码,一个线程,一个进程或一个函数,当这个任务的相关信息需要保存下来时,使用Context来记录)中,可以通过调用上下文的函数获取到,Controller方法作为函数调用的顶点。URL接口信息用于指示URL与Controller方法的映射关系。
请求来源标识:每次调用时在线程的ThreadLocal中记录唯一标记,每次函数调用信息记录都要附加上此标记,此标记用于区分函数调用的请求来源。
函数调用的父函数:即上一级调用函数,可以通过java的函数调用链确定。
分析程序的分析过程可以如下:先根据请求来源标识对目标调用信息进行分组(区分不同的请求),然后找到分组中URL映射的类函数(即函数调用的顶点),之后顺着顶点往下寻找,根据java的函数调用链判断当前函数是否存在子函数,如果存在,则将子函数作为当前函数,并继续判断当前函数是否存在子函数;如果不存在,则流程结束。
本发明实施例在对函数的监听上,采用无侵入式监听javaweb请求的函数调用过程,反馈函数调用的输入输出信息。本发明实施例与arthas工具相比,二者的区别包括:
1、本发明实施例使用包名,该名称是固定、可知的,运维人员不需要填写未知内容,而arthas需要提前知道类名和方法名等可变、未知内容。
2、本发明实施例将监听的结果整理分析,转换成调用链呈现给用户,而arthas只是输出每次孤立的调用动作。
通过本发明实施例提供的方法,研发人员可以一次性获取全部的javaweb后台服务的函数调用信息,节省了与运维人员的沟通成本。
为了便于理解,参见图6所示的一种软件项目故障定位方法的软件项目故障定位流程,该软件项目故障定位流程如下:运维人员发现问题后,打开监听开关,并开启监听功能,复现该问题,查看监听页面,导出分析程序输出的调用链,将调用链发送给研发人员,由研发人员定位问题并给出解决方案,这种方式研发人员可以一次性得到全部的函数执行信息。
本发明实施例提供的方法,减少了运维人员执行源码方法的步骤,可以直接生成调用链并保存下来,由运维人员发给研发人员排查,降低了沟通成本。
对应于上述的软件项目故障定位方法,本发明实施例还提供了一种软件项目故障定位装置,参见图7所示的一种软件项目故障定位装置的结构示意图,该装置包括:
获取模块72,用于获取基于目标包名监听得到的目标页面操作对应的目标调用信息;其中,目标页面操作为在目标软件项目中完成一个发生故障的页面触发效果的相应操作;目标调用信息包括附带有请求来源标识的URL接口信息和附带有请求来源标识的至少一个被调用的目标函数的函数调用信息;
分组模块74,用于按照请求来源标识对目标调用信息进行分组,得到至少一个集合;每个集合包括一个URL接口信息和至少一个被调用的目标函数的函数调用信息;
生成模块76,用于生成每个集合对应的调用链,以使研发人员基于各个集合对应的调用链定位目标软件项目的故障原因。
本发明实施例提供的软件项目故障定位装置,在进行软件项目故障定位时,先获取基于目标包名监听得到的目标页面操作对应的目标调用信息;其中,目标页面操作为在目标软件项目中完成一个发生故障的页面触发效果的相应操作;目标调用信息包括附带有请求来源标识的URL接口信息和附带有请求来源标识的至少一个被调用的目标函数的函数调用信息;然后按照请求来源标识对目标调用信息进行分组,得到至少一个集合,每个集合包括一个URL接口信息和至少一个被调用的目标函数的函数调用信息;进而生成每个集合对应的调用链,以使研发人员基于各个集合对应的调用链定位目标软件项目的故障原因。这样一次性获取与页面触发效果相关的所有函数调用信息,并将其转换成调用链给研发人员排查,不需要运维人员与研发人员多次沟通,研发人员可以基于调用链快速定位故障原因,与相关现有技术相比,降低了运维人员和研发人员的沟通成本,提高了故障定位效率。
进一步地,上述装置还包括监听模块,用于:当接收到携带有目标包名的启动监听指令时,基于字节码插桩技术、附着技术启动监听路径为目标包名的监听;将监听到的目标页面操作对应的目标调用信息保存在数据缓冲系统中。
进一步地,上述获取模块72具体用于:接收携带有目标包名的导出结果指令;从数据缓冲系统中获取与目标包名对应的目标调用信息。
进一步地,上述函数调用信息包括方法标识、输入输出信息和父函数;上述生成模块76具体用于:对于每个集合,根据当前集合中的URL接口信息,确定当前集合对应的调用链的第一级目标函数;根据当前集合中的各个目标函数的函数调用信息中的父函数,确定当前集合对应的调用链的下一级目标函数;其中,下一级目标函数的父函数为当前级目标函数,当当前级目标函数为第一级目标函数时,下一级目标函数为第二级目标函数;将当前集合中的各个目标函数的函数调用信息中的方法标识和输入输出信息,加入到当前集合对应的调用链的相应级目标函数中,得到当前集合对应的调用链。
进一步地,上述请求来源标识为每次调用时在线程的线程本地存储中记录的唯一标记,方法标识包括类名和方法名,输入输出信息包括输入参数、返回值和异常信息。
进一步地,上述装置还包括输出模块,用于:展示和/或保存各个集合对应的调用链。
本实施例所提供的装置,其实现原理及产生的技术效果和前述方法实施例相同,为简要描述,装置实施例部分未提及之处,可参考前述方法实施例中相应内容。
参见图8,本发明实施例还提供一种电子设备100,包括:处理器80,存储器81,总线82和通信接口83,所述处理器80、通信接口83和存储器81通过总线82连接;处理器80用于执行存储器81中存储的可执行模块,例如计算机程序。
其中,存储器81可能包含随机存取存储器(Random Access Memory,简称RAM),也可能还包括非易失性存储器(non-volatile memory,简称NVM),例如至少一个磁盘存储器。通过至少一个通信接口83(可以是有线或者无线)实现该系统网元与至少一个其他网元之间的通信连接,可以使用互联网,广域网,本地网,城域网等。
总线82可以是工业标准体系结构(Industry Standard Architecture,简称ISA)总线、外设部件互连标准(Peripheral Component Interconnect,简称PCI)总线或扩展工业标准结构(Extended Industry Standard Architecture,简称EISA)总线等。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图8中仅用一个双向箭头表示,但并不表示仅有一根总线或一种类型的总线。
其中,存储器81用于存储程序,所述处理器80在接收到执行指令后,执行所述程序,前述本发明实施例任一实施例揭示的流程定义的装置所执行的方法可以应用于处理器80中,或者由处理器80实现。
处理器80可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器80中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器80可以是通用处理器,包括中央处理器(Central Processing Unit,简称CPU)、网络处理器(Network Processor,简称NP)等;还可以是数字信号处理器(Digital SignalProcessing,简称DSP)、专用集成电路(Application Specific Integrated Circuit,简称ASIC)、现成可编程门阵列(Field-Programmable Gate Array,简称FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本发明实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本发明实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器81,处理器80读取存储器81中的信息,结合其硬件完成上述方法的步骤。
本发明实施例还提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行前面方法实施例中所述的软件项目故障定位方法。该计算机可读存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,简称ROM)、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
在这里示出和描述的所有示例中,任何具体值应被解释为仅仅是示例性的,而不是作为限制,因此,示例性实施例的其他示例可以具有不同的值。
附图中的流程图和框图显示了根据本发明的多个实施例的方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
Claims (10)
1.一种软件项目故障定位方法,其特征在于,包括:
获取基于目标包名监听得到的目标页面操作对应的目标调用信息;其中,所述目标页面操作为在目标软件项目中完成一个发生故障的页面触发效果的相应操作;所述目标调用信息包括附带有请求来源标识的URL接口信息和附带有请求来源标识的至少一个被调用的目标函数的函数调用信息;
按照所述请求来源标识对所述目标调用信息进行分组,得到至少一个集合;每个所述集合包括一个URL接口信息和至少一个被调用的目标函数的函数调用信息;
生成每个所述集合对应的调用链,以使研发人员基于各个所述集合对应的调用链定位所述目标软件项目的故障原因。
2.根据权利要求1所述的软件项目故障定位方法,其特征在于,在获取基于目标包名监听得到的目标页面操作对应的目标调用信息之前,所述方法还包括:
当接收到携带有目标包名的启动监听指令时,基于字节码插桩技术、附着技术启动监听路径为所述目标包名的监听;
将监听到的目标页面操作对应的目标调用信息保存在数据缓冲系统中。
3.根据权利要求2所述的软件项目故障定位方法,其特征在于,所述获取基于目标包名监听得到的目标页面操作对应的目标调用信息,包括:
接收携带有所述目标包名的导出结果指令;
从所述数据缓冲系统中获取与所述目标包名对应的目标调用信息。
4.根据权利要求1所述的软件项目故障定位方法,其特征在于,所述函数调用信息包括方法标识、输入输出信息和父函数;所述生成每个所述集合对应的调用链,包括:
对于每个所述集合,根据当前集合中的URL接口信息,确定所述当前集合对应的调用链的第一级目标函数;
根据所述当前集合中的各个目标函数的函数调用信息中的父函数,确定所述当前集合对应的调用链的下一级目标函数;其中,所述下一级目标函数的父函数为当前级目标函数,当所述当前级目标函数为第一级目标函数时,所述下一级目标函数为第二级目标函数;
将所述当前集合中的各个目标函数的函数调用信息中的方法标识和输入输出信息,加入到所述当前集合对应的调用链的相应级目标函数中,得到所述当前集合对应的调用链。
5.根据权利要求4所述的软件项目故障定位方法,其特征在于,所述请求来源标识为每次调用时在线程的线程本地存储中记录的唯一标记,所述方法标识包括类名和方法名,所述输入输出信息包括输入参数、返回值和异常信息。
6.根据权利要求1所述的软件项目故障定位方法,其特征在于,在生成每个所述集合对应的调用链之后,所述方法还包括:
展示和/或保存各个所述集合对应的调用链。
7.一种软件项目故障定位装置,其特征在于,包括:
获取模块,用于获取基于目标包名监听得到的目标页面操作对应的目标调用信息;其中,所述目标页面操作为在目标软件项目中完成一个发生故障的页面触发效果的相应操作;所述目标调用信息包括附带有请求来源标识的URL接口信息和附带有请求来源标识的至少一个被调用的目标函数的函数调用信息;
分组模块,用于按照所述请求来源标识对所述目标调用信息进行分组,得到至少一个集合;每个所述集合包括一个URL接口信息和至少一个被调用的目标函数的函数调用信息;
生成模块,用于生成每个所述集合对应的调用链,以使研发人员基于各个所述集合对应的调用链定位所述目标软件项目的故障原因。
8.根据权利要求7所述的软件项目故障定位装置,其特征在于,所述装置还包括监听模块,用于:
当接收到携带有目标包名的启动监听指令时,基于字节码插桩技术、附着技术启动监听路径为所述目标包名的监听;
将监听到的目标页面操作对应的目标调用信息保存在数据缓冲系统中。
9.一种电子设备,包括存储器、处理器,所述存储器中存储有可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1-6中任一项所述的方法。
10.一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,其特征在于,所述计算机程序被处理器运行时执行权利要求1-6中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111615895.6A CN114297061A (zh) | 2021-12-27 | 2021-12-27 | 软件项目故障定位方法、装置及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111615895.6A CN114297061A (zh) | 2021-12-27 | 2021-12-27 | 软件项目故障定位方法、装置及电子设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114297061A true CN114297061A (zh) | 2022-04-08 |
Family
ID=80969517
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111615895.6A Pending CN114297061A (zh) | 2021-12-27 | 2021-12-27 | 软件项目故障定位方法、装置及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114297061A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116048617A (zh) * | 2022-08-16 | 2023-05-02 | 荣耀终端有限公司 | 信息获取方法、装置、芯片、电子设备及介质 |
-
2021
- 2021-12-27 CN CN202111615895.6A patent/CN114297061A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116048617A (zh) * | 2022-08-16 | 2023-05-02 | 荣耀终端有限公司 | 信息获取方法、装置、芯片、电子设备及介质 |
CN116048617B (zh) * | 2022-08-16 | 2024-05-24 | 荣耀终端有限公司 | 信息获取方法、装置、芯片、电子设备及介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108833459B (zh) | 数据上报方法及终端设备 | |
CN112148674A (zh) | 日志数据处理方法、装置、计算机设备和存储介质 | |
CN109344061B (zh) | 一种接口的异常检测方法、装置、设备及系统 | |
CN111274095A (zh) | 日志数据处理方法、装置、设备及计算机可读存储介质 | |
CN111240876B (zh) | 微服务的故障定位方法、装置、存储介质及终端 | |
CN114490268A (zh) | 全链路监控方法、装置、设备、存储介质和程序产品 | |
CN109726091B (zh) | 一种日志管理方法及相关装置 | |
CN110806931A (zh) | 分布式服务的调用链路跟踪实现方法、装置及电子设备 | |
CN114297061A (zh) | 软件项目故障定位方法、装置及电子设备 | |
CN114549068A (zh) | 一种短链接生成方法、设备、装置及计算机可读存储介质 | |
CN115186274A (zh) | 基于iast的安全测试方法及装置 | |
CN109559121B (zh) | 交易路径调用异常分析方法、装置、设备及可读存储介质 | |
CN107330031B (zh) | 一种数据存储的方法、装置及电子设备 | |
CN112346981A (zh) | 联调测试覆盖率检测方法及系统 | |
CN110147294B (zh) | 调试信息的获取方法、装置、终端及计算机可读存储介质 | |
CN112181479A (zh) | 代码文件版本间差异的确定方法、装置及电子设备 | |
CN114860204B (zh) | 程序处理、运行方法、装置、终端、智能卡及存储介质 | |
CN112862245B (zh) | 数据交换方法、装置以及电子设备 | |
CN112181816B (zh) | 一种基于场景的接口测试方法、装置、计算机设备及介质 | |
JP6665576B2 (ja) | 支援装置、支援方法及びプログラム | |
US20170371651A1 (en) | Automatically establishing significance of static analysis results | |
CN113467815A (zh) | 热更新的应用修复方法、装置、终端设备及存储介质 | |
CN112596974A (zh) | 一种全链路监控方法、装置、设备和存储介质 | |
CN108874625B (zh) | 信息处理方法及装置、电子设备、存储介质 | |
CN111459803A (zh) | 一种信息处理方法、装置、电子设备和存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |