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

程序跟踪调试的方法、系统、设备及存储介质

文献发布时间:2024-04-18 20:01:30


程序跟踪调试的方法、系统、设备及存储介质

技术领域

本公开涉及计算机技术领域,尤其涉及一种程序跟踪调试的方法、系统、设备及存储介质。

背景技术

在编写软件时,软件调试分为开发时软件调试与软件上线后跟踪调试。需要有合适的调试方法才能够快速高效的完成软件开发,并保证质量,解决突发问题。

开发过程中的软件调试比较方便,大部分的编译器编译环境提供了比较完善的调试功能、调试流程和步骤。在软件上线之后,对重点功能的追踪,对缺陷的调试变的非常的困难。

发明内容

有鉴于此,本公开的目的在于提出一种程序跟踪调试的方法、系统、设备及存储介质,解决了软件上线后,对软件进行调试的问题。

为了实现上述公开目的之一,本公开提供了一种程序跟踪调试的方法,所述方法包括:在服务器上创建调试代理服务,所述调试代理服务包括接收命令功能、录制功能和保存功能;通过所述接收命令功能接收配置命令,根据所述配置命令配置录制参数;通过所述接收命令功能接收录制命令,根据所述录制命令执行所述录制功能,录制所述程序运行中的所述录制参数对应的内容,将录制的内容生成录制文件;通过所述接收命令功能接收保存命令,根据所述保存命令将所述录制文件保存在本地;离线条件下,在本地重放所述录制文件,对所述程序进行调试。

在本公开的一些实施例中,所述通过所述接收命令功能接收配置命令,根据所述配置命令配置录制参数之后,所述通过所述接收命令功能接收录制命令,还包括:解析所述录制参数,得到所述录制参数对应的内容;在所述录制参数对应的内容的位置处添加录制代码;所述通过所述接收命令功能接收录制命令,根据录制命令执行所述录制功能,录制所述程序运行中的所述录制参数对应的内容,将录制的内容生成录制文件;包括:接收录制命令,在所述程序执行到所述录制代码时,开始录制所述内容;将录制后的所述内容发送到在线数据库中;将所述内容在所述在线数据库中暂存为所述录制文件。

在本公开的一些实施例中,所述在所述录制参数对应的位置处添加录制代码;包括:利用JavaAssist,在所述程序程序的过程中,在所述录制参数对应的内容的位置处添加所述录制代码;所述录制参数对应的位置处添加录制代码之后,还包括:根据所述程序执行时服务器的运行状态修改所述录制代码。

在本公开的一些实施例中,所述将录制后的所述内容发送到在线数据库中之后,还包括:通过所述接收命令功能,接收停止命令;停止将所述内容发送到所述在线数据库中;利用JavaAssist,在所述程序运行的过程中,在所述录制参数处,查询所述录制代码的位置;并删除所述录制代码。

在本公开的一些实施例中,所述离线条件下,在本地重放所述录制文件,对所述程序进行调试;包括:离线条件下,在本地重放所述录制文件,并选取查询模式;以选取的查询模式,对本地的所述录制文件进行查询,得到所述录制文件中的调试位置;对所述程序中与所述调试位置对应的位置处进行调试。

在本公开的一些实施例中,所述查询模式包括:全部查询模式、异常信息查询模式、单步查询模式、退出查询模式。

在本公开的一些实施例中,所述录制参数包括类名称、方法名称、参数名称、异常名称、异常时退出、监控线程数量、录制线程数量、录制深度、排除的类、排除的方法、排除的参数名称、延迟启动时间、消息队列名称、任务id中的至少一种。

为了实现上述公开目的另一实施例,本公开提供了一种程序跟踪调试的系统,包括:创建模块,用于创建调试代理服务,所述调试代理服务包括接收命令功能、录制功能和保存功能;第一接收模块,用于通过所述接收命令功能接收配置命令,根据所述配置命令配置录制参数;第二接收模块,用于通过所述接收命令功能接收录制命令,根据所述录制命令执行所述录制功能,录制所述程序运行中的所述录制参数对应的内容,将录制的内容生成录制文件;第三接收模块,用于通过所述接收命令功能接收保存命令,根据所述保存命令将所述录制文件保存在本地;重放模块,用于离线条件下,在本地重放所述录制文件,对所述程序进行调试。

为了实现上述公开目的另一实施例,本公开提供了一种计算机设备,包括处理器和存储器;所述存储器存储有计算机程序,所述计算机程序被所述处理器执行时,使得所述处理器执行如上述任一项所述方法的步骤。

为了实现上述公开目的另一实施例,本公开提供了一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令用于使计算机执行上述任一所述的程序跟踪调试的方法。

相对于现有技术,本发明的技术效果在于:通过将运行中的程序的相关参数录制到本地,在本地重放录制文件,在本地追踪程序中需要调试的位置,无需事先编写代码,无侵入地录制线上程序运行过程,不影响程序的线上运行。

附图说明

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

图1为本公开一实施方式提供的一种程序跟踪调试的方法流程图;

图2为本公开另一实施方式提供的添加录制代码的流程图;

图3为本公开另一实施方式提供的生成录制文件的流程图;

图4为本公开另一实施方式提供的停止生成录制文件的流程图;

图5为本公开另一实施方式提供的调试程序的流程图;

图6为本公开另一实施方式提供的一种程序跟踪调试系统的示意图;

图7为本公开另一实施方式提供的一种计算机设备硬件结构示意图。

具体实施方式

以下将结合附图所示的具体实施方式对本发明进行详细描述。但这些实施方式并不限制本发明,本领域的普通技术人员根据这些实施方式所做出的结构、方法、或功能上的变换均包含在本发明的保护范围内。

实施方式需要说明的是,除非另外定义,本公开实施方式使用的技术术语或者科学术语应当为本公开所属领域内具有一般技能的人士所理解的通常意义。本公开实施方式中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。“包括”或者“包含”等类似的词语意指出现该词前面的元件或者物件涵盖出现在该词后面列举的元件或者物件及其等同,而不排除其他元件或者物件。

目前,开发过程中的软件调试比较方便,大部分的编译器编译环境提供了比较完善的调试功能、调试流程和步骤。

在程序上线之后,重要功能的跟踪,重点缺陷的调试变的非常的困难。

通常的线上功能的调试、问题的追踪利用的方法是手动打印日志。通过事先编写代码的方式,打印语句将打印信息打印到日志文件中,并分析打印日志,进而定位问题。

还有一种方法是,使用日志工具包,比如Log4j,它优化了编写代码的方式,可以将日志分为不同的级别,在需要的时候,通过调整配置文件,调整日志的级别,比如一般情况下打印错误日志,需要分析更加详细的信息的时候,调整为打印信息日志或者调试日志,在适当的时候打印必要的日志,从而避免影响系统的性能。

但是这两种方式某些场景下并不能完全满足用户的需求,存在一些缺陷:

(1)在没有事先编写代码的地方无法打印日志,需要重新编写代码,并且重新打包;

(2)在开发环境无法中无法重现线上环境中的实际运行参数和流程,导致无法快速定位问题。

有鉴于此,本公开实施方式提供一种程序跟踪调试的方法,可以在本地追踪程序中的问题的位置,对程序进行调试,如图1所示,程序跟踪调试的方法包括以下步骤:

步骤S100,在服务器上创建调试代理服务,所述调试代理服务包括接收命令功能、录制功能和保存功能。

具体的,创建一个调试代理服务,调试代理服务是指一种用于调试分布式系统的服务,通常用于调试应用程序、服务和系统,调试代理服务可以通过网络连接到分布式系统中的各个节点,收集和汇总各种信息,并将其呈现给开发人员和运维人员,可以更快速地定位和解决问题,提高系统的可靠性和稳定性。下文步骤中过程需要依靠调试代理服务的接收命令功能,接收人员的操作,定位接收命令的位置,同时执行录制功能和保存功能。

具体的,在java业务程序中创建调试代理服务,Java业务程序的启动命令一般如下:java-jar business.jar。在业务程序business.jar中,需要包含调试代理服务模块,在启动业务程序的同时启动调试代理服务模块。调试代理服务模块主要包括三部分内容,分别是“接收命令接口”、“执行录制”、“保存录制文件”。

步骤S200,通过接收命令功能接收配置命令,根据配置命令配置录制参数。

具体的,调试代理服务接收到配置命令后,匹配合适的录制参数,才能录制到有效的执行内容,根据本程序跟踪调试方法应用在不同的程序中时,配置的录制参数不同。

在一种实施例中,程序中具有配置参数按钮,人员操作点击配置参数按钮,调试代理服务接收配置命令。

本公开一可实现方式中,录制参数包括类名称、方法名称、参数名称、异常名称、异常时退出、监控线程数量、录制线程数量、录制深度、排除的类、排除的方法、排除的参数名称、延迟启动时间、消息队列名称、任务id中的至少一种。

需要说明的是,类名称为要录制的类的名称;方法名称为要录制的方法的名称;参数名称为要录制的参数的名称;异常名称为要录制的异常的名称;异常时退出为在出现异常时,是否退出;监控线程数量为启动几个线程去监控;录制线程数量为最多录制几个线程;录制深度为1层深度或2层深度或n层深度;排除的类为不录制的类名称;排除的方法为不录制的方法;排除的参数名称为不录制的参数的名称;延迟启动时间为发送开始录制命令后,需要延迟多少毫秒启动;消息队列名称为录制结果发送的消息队列名称;任务id为录制任务的id。

通常选择上述内容作为录制参数,录制后的内容体现程序的运行过程。

本公开一可实现方式中,对于步骤S200之后,步骤S300之前,参见图2,具体还包括:

步骤S210,解析录制参数,得到录制参数对应的内容。

具体的,解析录制参数后,录制参数对应的内容是指上述的需要录制的类名、方法名、参数名和线程数量等。

步骤S220,在录制参数对应的内容的位置处添加录制代码。

具体的,在需要录制的内容上添加录制代码,添加在内容的前、中、后部分。如具体实施例中,在(save)中,录制代码可以添加在括号之前,或添加在括号之后,或添加在括号之内。录制代码的主要功能为记录上述类名、方法名、参数名和线程数量等。

本公开一可实现方式中,对于步骤S220,具体还包括:

步骤S221,利用JavaAssist,在程序程序的过程中,在录制参数对应的内容的位置处添加录制代码。

需要说明的是,JavaAssist是一个开源的Java字节码操作库,允许在运行时修改已编译的Java字节码,使得开发人员能够在不重新编译代码的情况下动态地修改类、方法和字段。JavaAssist的主要用途中包括:性能分析和调试:通过使用JavaAssist,可以在运行时修改字节码来添加性能计数器、日志记录或调试信息;还包括:代码修改和修复:JavaAssist可以用于在运行时修复或修改已编译的代码,例如修复错误、添加功能或更新配置。

步骤S230,根据程序执行时服务器的运行状态修改录制代码。

具体的,服务器的运行状态包括服务器的cpu状态、内存状态和硬盘状态等,根据以上状态修改录制代码,使录制代码准确的记录录制参数的内容。

步骤S300,通过接收命令功能接收录制命令,根据录制命令执行录制功能,录制程序运行中的录制参数对应的内容,将录制的内容生成录制文件。

具体的,接收录制命令后,程序可以依旧维持在运行状态,程序运行时的过程参数被录制下来。

本公开一可实现方式中,对于步骤S300,如图4所示,具体还包括:

步骤S310,接收录制命令,在程序执行到录制代码时,开始录制内容。

步骤S320,将录制后的内容发送到在线数据库中。

具体的,在线数据库可以选择kafka,将录制的内容发送到kafka中对应的消息主题中,还能起到分类和组织信息的作用。

本公开一可实现方式中,步骤S320之后,如图5所示,还包括:

步骤S321,通过接收命令功能,接收停止命令。

具体的,人员点击停止录制的按钮,发送停止命令,调试代理服务接收停止指令。

步骤S322,停止将内容发送到在线数据库中。

步骤S323,利用JavaAssiet,在程序运行的过程中,在录制参数处,查询录制代码的位置,并删除录制代码。

关于JavaAssiet的功能如上文所述,不再赘述。本步骤中通过删除录制代码,使程序的录制参数贵妇原样,实现物侵入地录制线上环境运行构成和环境参数。

步骤S330,将所述内容在所述在线数据库中暂存为录制文件。

录制下的内容显示为文本,将文本样式的录制内容暂存在在线数据库中,在在线数据库中为录制文件的形式。

步骤S400,通过接收命令功能接收保存命令,根据保存命令将录制文件保存在本地。

具体的,下载在线数据库中的录制文件,保存至本地,在本地对录制文件进行操作。

步骤S500,离线条件下,在本地重放所述录制文件,对程序进行调试。

本公开一可实现方式中,对于步骤S500,如图5所示,还包括:

步骤S510,离线条件下,在本地重放录制文件,并选取查询模式。

具体的,离线条件下,即为设备的本地上,重放录制文件的文本,查询其中的内容。

本公开一可实现方式中,查询模式包括全部查询模式、异常信息查询模式、单步查询模式,退出查询模式。

具体的,全部查询模式的指令操作为“-a”,在该模式下,查询并调试所有信息;异常信息查询模式的指令操作为“-er”,在该模式下,查询并调试所有记录的异常信息;退出查询模式的指令操作为“-q”,用于退出查询模式;单步查询模式的指令操作为“-rsa”,在该模式下,一类一类的查询并调试信息,分别查看类信息、方法信息、参数信息、临时数据变量等,避免无法重新线上环境的问题。

步骤S520,以选取的查询模式,对本地的录制文件进行查询,得到录制文件中的调试位置。

根据上述几种查询模式,对录制文件中的文本进行查询。

步骤S530,对程序中与调试位置对应的位置处进行调试。

录制文件中的内容与程序中的录制参数对应,录制文件中需要调试的位置可以在程序的录制参数中找到对应的位置,此处即为程序中需要调试的位置,对此位置处进行调试操作。

在一种具体实施例中,执行一种程序跟踪调试方法,并补充其具体配置的录制参数、录制内容和重现内容为:想要查看的类为,(com/stonehg/login/Login),及类的方法(Login),及方法的几个参数(username,password)是否有问题,按这几个名称配置参数className、methodName、paramName。同时有一些附加条件:需要延迟5000毫秒开始(delayedStart":5000)、需要在异常发生时退出("exitOnException":true)、只开启一个线程监控("threadsToMonitor":1)、最多只录制10个线程("threadsToRecord":10)、录制深度为2("depth":2)、排除这个类("exceptClassName":"com/stonehg/util/Util")、排除这个方法("exceptMethodName":"Test")、排除这个参数("exceptParamName":"int:str")。这个实施例想要达到的效果是,在线上程序运行的每一步,将Login方法的username和password记录下来,逐行记录下来,方便重放时,排查问题。

在重放调试时,选择单步查询模式,可以逐行执行代码,在逐行执行代码的同时,展示出当前一行代码执行时,录制的类、方法、参数名称和参数值。即,在执行第一行“赋值”代码时,username是“admin”,password是“admin!@#$%”,在执行第二行“加密”代码时,username被加密成了“QWEREDEDE”,password被加密成了“DEGDEEBEFRB124BRF4g”,在执行第三行代码时,username被解密成了“admin”,password被解密成了“admin!@#$”,这个时候发现解密后的password少了一个字符“%”,由此可以判断,是“加密”这个方法,或者“解密”这个方法,出现了问题。由此定位在线的程序上的问题。

本公开具体实施方式提供另一种程序跟踪调试的方法,具体执行步骤为:

步骤S101,在服务器上创建调试代理服务,所述调试代理服务包括接收命令功能、录制功能和保存功能。

步骤S102,通过所述接收命令功能接收配置命令,根据所述配置命令配置录制参数。

步骤S103,解析所述录制参数,得到所述录制参数对应的内容。

步骤S104,利用JavaAssist,在所述程序程序的过程中,在所述录制参数对应的内容的位置处添加所述录制代码。

步骤S105,根据所述程序执行时服务器的运行状态修改所述录制代码。

步骤S106,接收录制命令,在所述程序执行到所述录制代码时,开始录制所述内容。

步骤S107,将录制后的所述内容发送到在线数据库中。

步骤S108,通过接收命令功能,接收停止命令。

步骤S109,停止将内容发送到在线数据库中。

步骤S1010,利用JavaAssiet,在程序运行的过程中,在录制参数处,查询录制代码的位置,并删除录制代码。

步骤S1011,将所述内容在所述在线数据库中暂存为所述录制文件。

步骤S1012,通过所述接收命令功能接收保存命令,根据所述保存命令将所述录制文件保存在本地。

步骤S1013,离线条件下,在本地重放所述录制文件,并选取查询模式。

步骤S1014,以选取的查询模式,对本地的所述录制文件进行查询,得到所述录制文件中的调试位置。

步骤S1015,对所述程序中与所述调试位置对应的位置处进行调试。

需要说明的是,上述对本公开的一些实施方式进行了描述。其它实施方式在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于上述实施方式中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。

基于同一发明构思,与上述任意实施方式方法相对应的,本公开还提供了一种程序跟踪调试的系统。

参考图6,一种程序跟踪调试的系统,包括:

创建模块100,用于创建调试代理服务,所述调试代理服务包括接收命令功能、录制功能和保存功能;

第一接收模块200,用于通过所述接收命令功能接收配置命令,根据所述配置命令配置录制参数;

第二接收模块300,用于通过所述接收命令功能接收录制命令,根据所述录制命令执行所述录制功能,录制所述程序运行中的所述录制参数对应的内容,将录制的内容生成录制文件;

第三接收模块400,用于通过所述接收命令功能接收保存命令,根据所述保存命令将所述录制文件保存在本地;

重放模块500,用于离线条件下,在本地重放所述录制文件,对所述程序进行调试。

为了描述的方便,描述以上装置时以功能分为各种模块分别描述。当然,在实施本公开时可以把各模块的功能在同一个或多个软件和/或硬件中实现。

上述实施方式的装置用于实现前述任一实施方式中相应的程序跟踪调试的方法,并且具有相应的方法实施方式的有益效果,在此不再赘述。

基于同一发明构思,与上述任意实施方式方法相对应的,本公开还提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上任意一实施方式所述的程序跟踪调试的方法。

图7示出了本实施方式所提供的一种更为具体的计算机设备硬件结构示意图,该设备可以包括:处理器1010、存储器1020、输入/输出接口1030、通信接口1040和总线1050。其中处理器1010、存储器1020、输入/输出接口1030和通信接口1040通过总线1050实现彼此之间在设备内部的通信连接。

处理器1010可以采用通用的CPU(Central Processing Unit,中央处理器)、微处理器、应用专用集成电路(Application Specific Integrated Circuit,ASIC)、或者一个或多个集成电路等方式实现,用于执行相关程序,以实现本说明书实施方式所提供的技术方案。

存储器1020可以采用ROM(Read Only Memory,只读存储器)、RAM(Random AccessMemory,随机存取存储器)、静态存储设备,动态存储设备等形式实现。存储器1020可以存储操作系统和其他应用程序,在通过软件或者固件来实现本说明书实施方式所提供的技术方案时,相关的程序代码保存在存储器1020中,并由处理器1010来调用执行。

输入/输出接口1030用于连接输入/输出模块,以实现信息输入及输出。输入输出/模块可以作为组件配置在设备中(图中未示出),也可以外接于设备以提供相应功能。其中输入设备可以包括键盘、鼠标、触摸屏、麦克风、各类传感器等,输出设备可以包括显示器、扬声器、振动器、指示灯等。

通信接口1040用于连接通信模块(图中未示出),以实现本设备与其他设备的通信交互。其中通信模块可以通过有线方式(例如USB、网线等)实现通信,也可以通过无线方式(例如移动网络、WIFI、蓝牙等)实现通信。

总线1050包括一通路,在设备的各个组件(例如处理器1010、存储器1020、输入/输出接口1030和通信接口1040)之间传输信息。

需要说明的是,尽管上述设备仅示出了处理器1010、存储器1020、输入/输出接口1030、通信接口1040以及总线1050,但是在具体实施过程中,该设备还可以包括实现正常运行所必需的其他组件。此外,本领域的技术人员可以理解的是,上述设备中也可以仅包含实现本说明书实施方式方案所必需的组件,而不必包含图中所示的全部组件。

上述实施方式的计算机设备用于实现前述任一实施方式中相应的程序跟踪调试的方法,并且具有相应的方法实施方式的有益效果,在此不再赘述。

基于同一发明构思,与上述任意实施方式方法相对应的,本公开还提供了一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令用于使所述计算机执行如上任一实施方式所述的程序跟踪调试的方法。

本实施方式的计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。

上述实施方式的存储介质存储的计算机指令用于使所述计算机执行如上任一实施方式所述的程序跟踪调试的方法,并且具有相应的方法实施方式的有益效果,在此不再赘述。

所属领域的普通技术人员应当理解:以上任何实施方式的讨论仅为示例性的,并非旨在暗示本公开的范围(包括权利要求)被限于这些例子;说明书的这种叙述方式仅仅是为清楚起见,本领域技术人员应当将说明书作为一个整体,在本公开的思路下,以上实施方式或者不同实施方式中的技术特征之间也可以进行适当组合,步骤可以以任意顺序实现,并存在如上所述的本公开实施方式的不同方面的许多其它变化,为了简明它们没有在细节中提供。

另外,为简化说明和讨论,并且为了不会使本公开实施方式难以理解,在所提供的附图中可以示出或可以不示出与集成电路(IC)芯片和其它部件的公知的电源/接地连接。此外,可以以框图的形式示出装置,以便避免使本公开实施方式难以理解,并且这也考虑了以下事实,即关于这些框图装置的实施方式的细节是高度取决于将要实施本公开实施方式的平台的(即,这些细节应当完全处于本领域技术人员的理解范围内)。在阐述了具体细节(例如,电路)以描述本公开的示例性实施方式的情况下,对本领域技术人员来说显而易见的是,可以在没有这些具体细节的情况下或者这些具体细节有变化的情况下实施本公开实施方式。因此,这些描述应被认为是说明性的而不是限制性的。

尽管已经结合了本公开的具体实施方式对本公开进行了描述,但是根据前面的描述,这些实施方式的很多替换、修改和变型对本领域普通技术人员来说将是显而易见的。例如,其它存储器架构(例如,动态RAM(DRAM))可以使用所讨论的实施方式。

本公开实施方式旨在涵盖落入所附权利要求的宽泛范围之内的所有这样的替换、修改和变型。因此,凡未脱离本公开实施方式的精神和原则,所做的任何省略、修改、等同替换、改进等,均应包含在本公开的保护范围之内。

技术分类

06120116556809