CN115470143A - 在线调试方法、装置、设备及计算机可读存储介质 - Google Patents
在线调试方法、装置、设备及计算机可读存储介质 Download PDFInfo
- Publication number
- CN115470143A CN115470143A CN202211207201.XA CN202211207201A CN115470143A CN 115470143 A CN115470143 A CN 115470143A CN 202211207201 A CN202211207201 A CN 202211207201A CN 115470143 A CN115470143 A CN 115470143A
- Authority
- CN
- China
- Prior art keywords
- program
- virtual machine
- debugging
- preset
- command line
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45591—Monitoring or debugging support
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Debugging And Monitoring (AREA)
Abstract
本申请公开了一种在线调试方法、装置、设备及计算机可读存储介质,属于软件调试技术领域。本申请通过将预设代理程序附加到正在运行异常业务程序的虚拟机上,并加载所述预设代理程序;动态获取命令行参数;将所述命令行参数传递给所述预设代理程序,基于所述预设代理程序根据所述命令行参数对所述异常业务程序进行调试。在测试环境和生产环境中均不需要重新编译部署服务,实现了在保证程序持续运行的同时对问题进行排查,显著地减少了服务编译部署的时间,进而减少了问题排查时间,提升了问题排查效率,由于线上服务不用中断,故而在问题排查过程中不会影响业务服务的连续性,避免了现有技术中由于中断业务服务而产生的业务风险。
Description
技术领域
本申请涉及软件调试技术领域,尤其涉及在线调试方法、装置、设备及计算机可读存储介质。
背景技术
目前,在Java开发测试过程中,程序在测试/生产环境上线后可能会出现一些问题。现有技术中,当需要排查、定位这些问题时,若发现程序输出的日志不能满足当前需求,则需要增加部分日志的输出,这就需要重新修改项目源代码,然后重新编译部署服务,但是这种方式会有以下缺点:
在测试环境中:修改源代码、重新编译上线的过程非常耗费时间,且在实际的问题排查过程中,并不是修改一次代码就能排查成功,可能需要反复修改代码,这就会造成反复的编译部署,进而耗费大量时间;
在生产环境中:如果线上问题需要排查,就需要增加相关的日志重新编译部署上线,而这又需要停止当前的业务服务,进而导致业务服务中断,产生较大的业务风险。
发明内容
本申请的主要目的在于提供一种在线调试方法、装置、设备及计算机可读存储介质,旨在解决如何提升程序运行过程中的问题排查效率,且在问题排查过程中不影响业务服务的连续性的技术问题。
为实现上述目的,本申请提供一种在线调试方法,所述在线调试方法包括以下步骤:
将预设代理程序附加到正在运行异常业务程序的虚拟机上,并加载所述预设代理程序;
动态获取命令行参数;
将所述命令行参数传递给所述预设代理程序,基于所述预设代理程序根据所述命令行参数对所述异常业务程序进行调试。
可选地,所述将预设代理程序附加到正在运行异常业务程序的虚拟机上的步骤,包括:
获取当前的虚拟机列表;
在所述虚拟机列表中筛选出正在运行异常业务程序的目标虚拟机,并获取所述目标虚拟机的唯一身份标识;
根据所述目标虚拟机的唯一身份标识将预设代理程序附加到所述目标虚拟机上。
可选地,所述获取当前的虚拟机列表的步骤,包括:
调用预设虚拟机方法中的获取指令以获取当前的虚拟机列表。
可选地,所述在所述虚拟机列表中筛选出正在运行异常业务程序的目标虚拟机的步骤,包括:
根据异常业务程序的应用名称,在所述虚拟机列表中筛选出与所述应用名称对应的正在运行所述异常业务程序的目标虚拟机。
可选地,所述根据所述目标虚拟机的唯一身份标识将预设代理程序附加到所述目标虚拟机上的步骤,包括:
调用预设虚拟机方法中的附加指令,将所述目标虚拟机的唯一身份标识作为所述附加指令的参数,以将预设代理程序附加到所述目标虚拟机上。
可选地,所述基于所述预设代理程序根据所述命令行参数对所述异常业务程序进行调试的步骤,包括:
基于所述预设代理程序从所述命令行参数中提取类参数和/或方法参数;
基于所述预设代理程序根据所述类参数和/或所述方法参数定位所述异常业务程序中指定的类和/或方法;
基于所述预设代理程序根据所述命令行参数对所述异常业务程序的指定的类和/或方法进行调试。
可选地,所述基于所述预设代理程序根据所述命令行参数对所述异常业务程序的指定的类和/或方法进行调试的步骤,包括:
基于所述预设代理程序从所述命令行参数中提取指定调试代码;
基于所述预设代理程序将所述指定调试代码注入到所述异常业务程序的指定的类和/或方法中以进行调试。
此外,为实现上述目的,本申请还提供一种在线调试装置,所述在线调试装置包括:
附加模块,所述附加模块用于将预设代理程序附加到正在运行异常业务程序的虚拟机上,并加载所述预设代理程序;
获取模块,所述获取模块用于动态获取命令行参数;
调试模块,所述调试模块用于将所述命令行参数传递给所述预设代理程序,基于所述预设代理程序根据所述命令行参数对所述异常业务程序进行调试。
此外,为实现上述目的,本申请还提供一种在线调试设备,所述在线调试设备包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的在线调试程序,所述在线调试程序被所述处理器执行时实现如上所述的在线调试方法的步骤。
此外,为实现上述目的,本申请还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有在线调试程序,所述在线调试程序被处理器执行时实现如上所述的在线调试方法的步骤。
本申请提出一种在线调试方法、装置、设备及计算机可读存储介质,在所述在线调试方法中,先通过服务器上预设的调试程序将预设的代理程序附加到正在运行异常业务程序的虚拟机上,并加载所述预设代理程序,同时通过预设的调试程序动态获取命令行参数,再将所述命令行参数传递给所述预设代理程序,基于所述预设代理程序根据所述命令行参数对所述异常业务程序进行调试,即可通过预设代理程序向异常业务程序中动态注入指定的调试代码。由此,在测试环境中通过本申请提供的在线调试方法对业务程序进行调试时,不需要重新编译部署服务,实现了在保证程序持续运行的同时对问题进行排查,显著地减少了服务编译部署的时间,进而减少了问题排查时间,提升了问题排查效率;在生产环境中通过本申请提供的在线调试方法对业务程序进行调试时,本申请不需要重新编译部署服务,意味着线上服务不用中断,在问题排查过程中不影响业务服务的连续性,避免了现有技术中由于中断业务服务而产生的业务风险。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请实施例的一部分,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请一实施例提供的一种在线调试方法的流程示意图;
图2为本申请一实施例提供的一种在线调试方法涉及的运行环境示意图;
图3为本申请一实施例提供的一种在线调试方法的应用场景示意图;
图4为本申请一实施例提供的一种在线调试装置的结构示意图;
图5为本申请一实施例提供的一种在线调试设备的硬件结构示意图。
具体实施方式
以下描述中,为了说明而不是为了限定,提出了诸如特定系统结构、技术之类的具体细节,以便透彻理解本申请实施例。然而,本领域的技术人员应当清楚,在没有这些具体细节的其它实施例中也可以实现本申请实施例。在其它情况中,省略对众所周知的系统、装置、电路以及方法的详细说明,以免不必要的细节妨碍本申请实施例的描述。
需要说明的是,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于流程图中的顺序执行所示出或描述的步骤。说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。
还应当理解,在本申请实施例说明书中描述的参考“一个实施例”或“一些实施例”等意味着在本申请实施例的一个或多个实施例中包括结合该实施例描述的特定特征、结构或特点。由此,在本说明书中的不同之处出现的语句“在一个实施例中”、“在一些实施例中”、“在其他一些实施例中”、“在另外一些实施例中”等不是必然都参考相同的实施例,而是意味着“一个或多个但不是所有的实施例”,除非是以其他方式另外特别强调。术语“包括”、“包含”、“具有”及它们的变形都意味着“包括但不限于”,除非是以其他方式另外特别强调。
目前,在Java开发测试过程中,程序在测试/生产环境上线后可能会出现一些问题。现有技术中,当需要排查、定位这些问题时,若发现程序输出的日志不能满足当前需求,则需要增加部分日志的输出,这就需要重新修改项目源代码,然后重新编译部署服务,但是这种方式会有以下缺点:
在测试环境中:修改源代码、重新编译上线的过程非常耗费时间,且在实际的问题排查过程中,并不是修改一次代码就能排查成功,可能需要反复修改代码,这就会造成反复的编译部署,进而耗费大量时间;
在生产环境中:如果线上问题需要排查,就需要增加相关的日志重新编译部署上线,而这又需要停止当前的业务服务,进而导致业务服务中断,产生较大的业务风险。
基于此,本申请实施例提供了一种在线调试方法、装置、设备及计算机可读存储介质,在所述在线调试方法中,先通过服务器上预设的调试程序将预设的代理程序附加到正在运行异常业务程序的虚拟机上,并加载所述预设代理程序,同时通过预设的调试程序动态获取命令行参数,再将所述命令行参数传递给所述预设代理程序,基于所述预设代理程序根据所述命令行参数对所述异常业务程序进行调试,即可通过预设代理程序向异常业务程序中动态注入指定的调试代码。由此,在测试环境中通过本申请实施例提供的在线调试方法对业务程序进行调试时,不需要重新编译部署服务,实现了在保证程序持续运行的同时对问题进行排查,显著地减少了服务编译部署的时间,进而减少了问题排查时间,提升了问题排查效率;在生产环境中通过本申请实施例提供的在线调试方法对业务程序进行调试时,不需要重新编译部署服务,意味着线上服务不用中断,在问题排查过程中不影响业务服务的连续性,避免了现有技术中由于中断业务服务而产生的业务风险。
本申请实施例提供的在线调试方法、装置、设备及计算机可读存储介质,具体通过如下实施例进行说明,首先描述本申请实施例中的在线调试方法。
本申请实施例提供了一种在线调试方法,参照图1,图1为本申请一实施例提供的一种在线调试方法的流程示意图,该在线调试方法可以应用于在线调试设备,如图1所示,本实施例提供的在线调试方法包括步骤S10至S30。
需要说明的是,本实施例的被调试对象是处于测试环境或生产环境下的业务程序,该业务程序是基于项目源码编译后部署在Linux(全称GNU/Linux,是一种免费使用和自由传播的类UNIX操作系统)服务器上的Java程序,其项目源码在由开发者编写后会存储到源代码仓库中,在对业务程序进行测试或者需要将业务程序部署在生产环境的服务器中之前,可以根据项目的git(分布式版本控制系统)地址从源代码仓库中获取到项目源码,并通过maven(一种Java构建工具)编译工具编译成可以独立运行的jar包(Java Archive,Java归档文件,是Java编译后的可执行产物)或者war包(是一个可以直接运行的web模块,是Java编译后的可执行产物),最后将jar包或者war包部署到对应的测试环境或者生产环境的Linux服务器上,至此,在项目启动后业务程序就可以在Linux服务器上正常运行。
步骤S10,将预设代理程序附加到正在运行异常业务程序的虚拟机上,并加载所述预设代理程序;
需要说明的是,本实施例是基于在线调试程序对异常业务程序进行在线调试,在开发者或管理者发现业务程序出现需要排查的问题时,就会将该业务程序认定为异常业务程序,并启动本实施例中的在线调试程序以对异常业务程序进行在线调试,在需要通过在线调试排查问题时,可以通过调用预先部署在已经成功部署业务程序的Linux服务器上的在线调试程序对应的jar包来启动本实施例提供的在线调试程序。
在步骤S10中,预设代理程序agent(独立于应用程序的代理程序,用来协助监测、运行甚至替换其他JVM上的程序)是本实施例用于对异常业务程序实现在线调试的代码注入接口,也需要在Linux服务器上预先部署预设代理程序的jar包;虚拟机JVM(JavaVirtual Machine,Java虚拟机)是Java程序运行的载体,本实施例中的异常业务程序自然也必须基于虚拟机才能运行;应理解的是,当本实施例提供的在线调试程序被启动后,就会通过运行Linux服务器上agent程序的jar包来将agent程序附加到正在运行异常业务程序的Java虚拟机上,并通过loadagent(方法名,加载代理)方法加载在线调试的agent程序,这样动态注入的程序就加载到业务程序上了。
需要补充的是,在将该agent程序编译成jar包之前,为了使其具备对业务程序进行在线调试的功能,需要对预设代理程序中的agentmain(方法名,程序运行中,动态注入方法)方法进行重写,进而实现动态修改class(Java程序中的类,是实现面向对象思想的一种方式),在业务程序运行后class已经加载完成的情况下,通过试点修改class来达到在线调试的效果。对agentmain方法进行重写后的agent程序具备以下功能:在Transform类中,可以同时实现ClassFileTransformer(接口名,类文件转换)接口,用于改变运行时的字节码;可以使用getAllLoadedClasses(方法名,获取所有加载的类)方法获取当前JVM中加载的所有的class,然后根据命令行传入的class参数,筛选指定的class;在class中可以根据命令行传入的method(方法)参数,获取到该class的指定方法;如果是要在方法开始的时候注入指定代码,使用insertbefore(方法名,在之前插入)方法并附上指定调试代码即可;如果是要在方法结束的时候注入指定代码,使用insertafter(方法名,在之后插入)方法并附上指定调试代码即可;如果是要在方法指定行注入指定代码,使用insertat(方法名,在指定位置插入)方法并附上指定代码行和指定调试代码即可。此外,还需要修改编辑manifest.mf(文件名,定义了与扩展和包相关的数据,manifest意为显示)文件,指定main-class,agent-class,并在pom(Java项目配置文件)文件中指定manifest.mf(程序入口配置文件)文件路径,确保程序在编译后被调用运行时能找到主程序(即本实施例中的在线调试程序)入口。在确保agent程序具备上述功能后,就可以使用maven命令将在线调试agent程序编译成能独立运行的jar包,并将其部署在Linux服务器上。为便于理解上述实施例,参照图2,本实施例还提供一种在线调试方法涉及的运行环境示意图,由图2可知,在已经成功部署业务程序的Linux服务器上,还部署了本实施例提供的在线调试程序以及预设代理程序agent。
步骤S20,动态获取命令行参数;
步骤S30,将所述命令行参数传递给所述预设代理程序,基于所述预设代理程序根据所述命令行参数对所述异常业务程序进行调试。
需要说明的是,本实施例提供的在线调试程序可以视为主程序,开发者或管理者可以通过主程序的入口输入命令行参数,命令行参数可以包括指定的类、指定的方法和指定的代码,主程序在被启动后就会动态地获取这些命令行参数,在接收到这些命令行参数后,主程序会将其传递至agent程序中,并基于agent程序根据命令行参数中包括的指定的类、指定的方法和指定的代码在异常业务程序中定位对应的类或方法,并向其中注入指定的代码,以实现对异常业务程序的在线调试。
为便于理解上述实施例,参照图3,本实施例还提供一种在线调试方法的应用场景示意图,如图3所示,本实施例提供的在线调试程序在接收到命令行参数后,会将命令行参数传递至预设代理程序处,并基于预设代理程序动态地向异常业务程序已经加载的class文件中注入监控代码或日志输出代码等相关调试代码,以对业务程序进行监控,或使得业务程序在生成原业务功能及日志之外,生成新的调试代码日志。显然这些调试代码并不会影响业务程序的正常运行,故而本实施例在Java程序服务不停止的情况下,通过主程序获取命令行参数,再将命令行参数传递至已经附加在正在运行异常业务程序的JVM上的agent程序中,基于agent程序动态地向异常业务程序中注入指定的代码,实现了在线调试。
本实施例提供了一种在线调试方法,先通过服务器上预设的调试程序将预设的代理程序附加到正在运行异常业务程序的虚拟机上,并加载所述预设代理程序,同时通过预设的调试程序动态获取命令行参数,再将所述命令行参数传递给所述预设代理程序,基于所述预设代理程序根据所述命令行参数对所述异常业务程序进行调试,即可通过预设代理程序向异常业务程序中动态注入指定的调试代码。由此,在测试环境中通过本实施例提供的在线调试方法对业务程序进行调试时,不需要重新编译部署服务,实现了在保证程序持续运行的同时对问题进行排查,显著地减少了服务编译部署的时间,进而减少了问题排查时间,提升了问题排查效率;在生产环境中通过本实施例提供的在线调试方法对业务程序进行调试时,不需要重新编译部署服务,意味着线上服务不用中断,在问题排查过程中不影响业务服务的连续性,避免了现有技术中由于中断业务服务而产生的业务风险。
进一步地,在一些可行的实施例中,步骤S10中所述将预设代理程序附加到正在运行异常业务程序的虚拟机上的步骤,可以包括但不限于有以下步骤:
步骤S11,获取当前的虚拟机列表;
步骤S12,在所述虚拟机列表中筛选出正在运行异常业务程序的目标虚拟机,并获取所述目标虚拟机的唯一身份标识;
步骤S13,根据所述目标虚拟机的唯一身份标识将预设代理程序附加到所述目标虚拟机上。
进一步地,在一些可行的实施例中,步骤S11可以包括但不限于有以下步骤:
步骤S110,调用预设虚拟机方法中的获取指令以获取当前的虚拟机列表。
进一步地,在一些可行的实施例中,步骤S12中所述在所述虚拟机列表中筛选出正在运行异常业务程序的目标虚拟机的步骤,可以包括但不限于有以下步骤:
步骤S120,根据异常业务程序的应用名称,在所述虚拟机列表中筛选出与所述应用名称对应的正在运行所述异常业务程序的目标虚拟机。
进一步地,在一些可行的实施例中,步骤S13可以包括但不限于有以下步骤:
步骤S130,调用预设虚拟机方法中的附加指令,将所述目标虚拟机的唯一身份标识作为所述附加指令的参数,以将预设代理程序附加到所述目标虚拟机上。
需要说明的是,本实施例中,在线调试程序通过调用virtualmachine.list(virtualmachine即预设虚拟机方法,list即该方法中的获取指令)方法获取当前的虚拟机JVM列表;在JVM列表中根据异常业务程序的应用名称,筛选出运行异常业务程序的JVM(即所述目标虚拟机),并获取jvmpid(Java虚拟机的唯一id,即所述目标虚拟机的唯一身份标识),将在线调试的agent程序通过virtualmachine.attach(jvmpid)(virtualmachine即预设虚拟机方法,attach即该方法中的附加指令,jvmpid即所述附加指令的参数)方法附加到指定的JVM上。
进一步地,在一些可行的实施例中,步骤S30中基于所述预设代理程序根据所述命令行参数对所述异常业务程序进行调试的步骤,可以包括但不限于有以下步骤:
步骤S31,基于所述预设代理程序从所述命令行参数中提取类参数和/或方法参数;
步骤S32,基于所述预设代理程序根据所述类参数和/或所述方法参数定位所述异常业务程序中指定的类和/或方法;
步骤S33,基于所述预设代理程序根据所述命令行参数对所述异常业务程序的指定的类和/或方法进行调试。
需要说明的是,需要进行排查的问题可能出现在异常业务程序中指定的类中,也可能出现在指定的类所包含的指定的方法中,当只需要定位异常业务程序中指定的类时,命令行参数中可以不包括方法参数,当需要定位到指定的类所包含的指定的方法时,命令行参数中需要包括类参数和方法参数。
进一步地,在一些可行的实施例中,步骤S33可以包括但不限于有以下步骤:
步骤S330,基于所述预设代理程序从所述命令行参数中提取指定调试代码;
步骤S331,基于所述预设代理程序将所述指定调试代码注入到所述异常业务程序的指定的类和/或方法中以进行调试。
需要说明的是,由上述实施例可知,预设代理程序agent中的agentmain方法是进行了重写的,而这使得agent程序具备了根据命令行参数使用其包含的多种方法的功能,例如:使用getAllLoadedClasses方法获取当前JVM中加载的所有的class,然后根据命令行传入的类参数,筛选指定的class;在class中还可以根据命令行传入的方法参数,获取到该class中指定的方法;使用insertbefore方法结合指定调试代码在方法开始的时候注入指定代码;使用insertafter方法结合指定调试代码在方法结束的时候注入指定代码;使用insertat方法结合指定代码行和指定调试代码在方法指定行注入指定代码。
此外,本申请实施例还提供一种在线调试装置,参照图4,图4为本申请一实施例提供的一种在线调试装置的结构示意图,如图4所示,本实施例中,所述在线调试装置包括:附加模块100、获取模块200和调试模块300。
附加模块100,所述附加模块100用于将预设代理程序附加到正在运行异常业务程序的虚拟机上,并加载所述预设代理程序;
获取模块200,所述获取模块200用于动态获取命令行参数;
调试模块300,所述调试模块300用于将所述命令行参数传递给所述预设代理程序,基于所述预设代理程序根据所述命令行参数对所述异常业务程序进行调试。
本实施例提供了一种在线调试装置,先通过服务器上预设的调试程序将预设的代理程序附加到正在运行异常业务程序的虚拟机上,并加载所述预设代理程序,同时通过预设的调试程序动态获取命令行参数,再将所述命令行参数传递给所述预设代理程序,基于所述预设代理程序根据所述命令行参数对所述异常业务程序进行调试,即可通过预设代理程序向异常业务程序中动态注入指定的调试代码。由此,在测试环境中通过本实施例提供的在线调试方法对业务程序进行调试时,不需要重新编译部署服务,实现了在保证程序持续运行的同时对问题进行排查,显著地减少了服务编译部署的时间,进而减少了问题排查时间,提升了问题排查效率;在生产环境中通过本实施例提供的在线调试方法对业务程序进行调试时,不需要重新编译部署服务,意味着线上服务不用中断,在问题排查过程中不影响业务服务的连续性,避免了现有技术中由于中断业务服务而产生的业务风险。
在一些可行的实施例中,所述附加模块100还用于:
获取当前的虚拟机列表;
在所述虚拟机列表中筛选出正在运行异常业务程序的目标虚拟机,并获取所述目标虚拟机的唯一身份标识;
根据所述目标虚拟机的唯一身份标识将预设代理程序附加到所述目标虚拟机上。
在一些可行的实施例中,所述附加模块100还用于:
调用预设虚拟机方法中的获取指令以获取当前的虚拟机列表。
在一些可行的实施例中,所述附加模块100还用于:
根据异常业务程序的应用名称,在所述虚拟机列表中筛选出与所述应用名称对应的正在运行所述异常业务程序的目标虚拟机。
在一些可行的实施例中,所述附加模块100还用于:
调用预设虚拟机方法中的附加指令,将所述目标虚拟机的唯一身份标识作为所述附加指令的参数,以将预设代理程序附加到所述目标虚拟机上。
在一些可行的实施例中,所述调试模块300还用于:
基于所述预设代理程序从所述命令行参数中提取类参数和/或方法参数;
基于所述预设代理程序根据所述类参数和/或所述方法参数定位所述异常业务程序中指定的类和/或方法;
基于所述预设代理程序根据所述命令行参数对所述异常业务程序的指定的类和/或方法进行调试。
在一些可行的实施例中,所述调试模块300还用于:
基于所述预设代理程序从所述命令行参数中提取指定调试代码;
基于所述预设代理程序将所述指定调试代码注入到所述异常业务程序的指定的类和/或方法中以进行调试。
本实施例提供的在线调试装置与上述实施例提供的在线调试方法属于同一发明构思,未在本实施例中详尽描述的技术细节可参见上述任意实施例,并且本实施例具备与执行在线调试方法相同的有益效果。
此外,本申请实施例还提供一种在线调试设备,上述应用于在线调试设备的在线调试方法可以由在线调试装置执行,该在线调试装置可以通过软件和/或硬件的方式实现,并集成在所述在线调试设备中。所述在线调试设备可以为手机、笔记本、平板电脑等可与网络侧通信的移动设备。
参照图5,图5为本申请实施例一实施例提供的一种在线调试设备的硬件结构示意图。如图5所示,所述在线调试设备可以包括:处理器1001,例如中央处理器(CentralProcessing Unit,CPU),通信总线1002、用户接口1003,网络接口1004,存储器1005。其中,通信总线1002用于实现这些组件之间的连接通信。用户接口1003可以包括显示屏(Display)、输入单元比如键盘(Keyboard),可选用户接口1003还可以包括标准的有线接口、无线接口。网络接口1004可选的可以包括标准的有线接口、无线接口(如无线保真(WIreless-FIdelity,WI-FI)接口)。存储器1005可以是高速的随机存取存储器(RandomAccess Memory,RAM)存储器,也可以是稳定的非易失性存储器(Non-Volatile Memory,NVM),例如磁盘存储器。存储器1005可选的还可以是独立于前述处理器1001的存储设备。
本领域技术人员可以理解,图5中示出的结构并不构成对在线调试设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
如图5所示,作为一种存储介质的存储器1005中可以包括操作系统、数据存储模块、网络通信模块、用户接口模块以及在线调试程序。
在图5所示的在线调试设备中,网络接口1004主要用于与其他设备进行数据通信;用户接口1003主要用于与用户进行数据交互;本实施例中的处理器1001、存储器1005可以设置在在线调试设备中,所述在线调试设备通过处理器1001调用存储器1005中存储的在线调试程序,并执行以下操作:
将预设代理程序附加到正在运行异常业务程序的虚拟机上,并加载所述预设代理程序;
动态获取命令行参数;
将所述命令行参数传递给所述预设代理程序,基于所述预设代理程序根据所述命令行参数对所述异常业务程序进行调试。
进一步地,处理器1001可以调用存储器1005中存储的在线调试程序,还执行以下操作:
获取当前的虚拟机列表;
在所述虚拟机列表中筛选出正在运行异常业务程序的目标虚拟机,并获取所述目标虚拟机的唯一身份标识;
根据所述目标虚拟机的唯一身份标识将预设代理程序附加到所述目标虚拟机上。
进一步地,处理器1001可以调用存储器1005中存储的在线调试程序,还执行以下操作:
调用预设虚拟机方法中的获取指令以获取当前的虚拟机列表。
进一步地,处理器1001可以调用存储器1005中存储的在线调试程序,还执行以下操作:
根据异常业务程序的应用名称,在所述虚拟机列表中筛选出与所述应用名称对应的正在运行所述异常业务程序的目标虚拟机。
进一步地,处理器1001可以调用存储器1005中存储的在线调试程序,还执行以下操作:
调用预设虚拟机方法中的附加指令,将所述目标虚拟机的唯一身份标识作为所述附加指令的参数,以将预设代理程序附加到所述目标虚拟机上。
进一步地,处理器1001可以调用存储器1005中存储的在线调试程序,还执行以下操作:
基于所述预设代理程序从所述命令行参数中提取类参数和/或方法参数;
基于所述预设代理程序根据所述类参数和/或所述方法参数定位所述异常业务程序中指定的类和/或方法;
基于所述预设代理程序根据所述命令行参数对所述异常业务程序的指定的类和/或方法进行调试。
进一步地,处理器1001可以调用存储器1005中存储的在线调试程序,还执行以下操作:
基于所述预设代理程序从所述命令行参数中提取指定调试代码;
基于所述预设代理程序将所述指定调试代码注入到所述异常业务程序的指定的类和/或方法中以进行调试。
本实施例提出的在线调试设备与上述实施例提出的应用于在线调试设备的在线调试方法属于同一发明构思,未在本实施例中详尽描述的技术细节可参见上述任意实施例,并且本实施例具备与执行在线调试方法相同的有益效果。
此外,本申请实施例还提供一种计算机可读存储介质,应用于计算机,该计算机可读存储介质可以为非易失性计算机可读存储介质,该计算机可读存储介质上存储有在线调试程序,该在线调试程序被处理器执行时实现如上所述的任一实施例的在线调试方法。
本领域普通技术人员可以理解,上文中所公开方法中的全部或某些步骤、系统可以被实施为软件、固件、硬件及其适当的组合。某些物理组件或所有物理组件可以被实施为由处理器,如中央处理器、数字信号处理器或微处理器执行的软件,或者被实施为硬件,或者被实施为集成电路,如专用集成电路。这样的软件可以分布在计算机可读介质上,计算机可读介质可以包括计算机存储介质(或非暂时性介质)和通信介质(或暂时性介质)。如本领域普通技术人员公知的,术语计算机存储介质包括在用于存储信息(诸如计算机可读指令、数据结构、程序模块或其他数据)的任何方法或技术中实施的易失性和非易失性、可移除和不可移除介质。计算机存储介质包括但不限于RAM、ROM、EEPROM、闪存或其他存储器技术、CD-ROM、数字多功能盘(DVD)或其他光盘存储、磁盒、磁带、磁盘存储或其他磁存储装置、或者可以用于存储期望的信息并且可以被计算机访问的任何其他的介质。此外,本领域普通技术人员公知的是,通信介质通常包含计算机可读指令、数据结构、程序模块或者诸如载波或其他传输机制之类的调制数据信号中的其他数据,并且可包括任何信息递送介质。
以上是对本申请实施例的较佳实施进行了具体说明,但本申请实施例并不局限于上述实施方式,熟悉本领域的技术人员在不违背本申请实施例精神的前提下还可作出种种的等同变形或替换,这些等同的变形或替换均包含在本申请实施例权利要求所限定的范围内。
Claims (10)
1.一种在线调试方法,其特征在于,所述在线调试方法包括以下步骤:
将预设代理程序附加到正在运行异常业务程序的虚拟机上,并加载所述预设代理程序;
动态获取命令行参数;
将所述命令行参数传递给所述预设代理程序,基于所述预设代理程序根据所述命令行参数对所述异常业务程序进行调试。
2.如权利要求1所述的在线调试方法,其特征在于,所述将预设代理程序附加到正在运行异常业务程序的虚拟机上的步骤,包括:
获取当前的虚拟机列表;
在所述虚拟机列表中筛选出正在运行异常业务程序的目标虚拟机,并获取所述目标虚拟机的唯一身份标识;
根据所述目标虚拟机的唯一身份标识将预设代理程序附加到所述目标虚拟机上。
3.如权利要求2所述的在线调试方法,其特征在于,所述获取当前的虚拟机列表的步骤,包括:
调用预设虚拟机方法中的获取指令以获取当前的虚拟机列表。
4.如权利要求2所述的在线调试方法,其特征在于,所述在所述虚拟机列表中筛选出正在运行异常业务程序的目标虚拟机的步骤,包括:
根据异常业务程序的应用名称,在所述虚拟机列表中筛选出与所述应用名称对应的正在运行所述异常业务程序的目标虚拟机。
5.如权利要求2所述的在线调试方法,其特征在于,所述根据所述目标虚拟机的唯一身份标识将预设代理程序附加到所述目标虚拟机上的步骤,包括:
调用预设虚拟机方法中的附加指令,将所述目标虚拟机的唯一身份标识作为所述附加指令的参数,以将预设代理程序附加到所述目标虚拟机上。
6.如权利要求1-5中任一项所述的在线调试方法,其特征在于,所述基于所述预设代理程序根据所述命令行参数对所述异常业务程序进行调试的步骤,包括:
基于所述预设代理程序从所述命令行参数中提取类参数和/或方法参数;
基于所述预设代理程序根据所述类参数和/或所述方法参数定位所述异常业务程序中指定的类和/或方法;
基于所述预设代理程序根据所述命令行参数对所述异常业务程序的指定的类和/或方法进行调试。
7.如权利要求6所述的在线调试方法,其特征在于,所述基于所述预设代理程序根据所述命令行参数对所述异常业务程序的指定的类和/或方法进行调试的步骤,包括:
基于所述预设代理程序从所述命令行参数中提取指定调试代码;
基于所述预设代理程序将所述指定调试代码注入到所述异常业务程序的指定的类和/或方法中以进行调试。
8.一种在线调试装置,其特征在于,所述在线调试装置包括:
附加模块,所述附加模块用于将预设代理程序附加到正在运行异常业务程序的虚拟机上,并加载所述预设代理程序;
获取模块,所述获取模块用于动态获取命令行参数;
调试模块,所述调试模块用于将所述命令行参数传递给所述预设代理程序,基于所述预设代理程序根据所述命令行参数对所述异常业务程序进行调试。
9.一种在线调试设备,其特征在于,所述在线调试设备包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的在线调试程序,所述在线调试程序被所述处理器执行时实现如权利要求1至7中任一项所述的在线调试方法的步骤。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有在线调试程序,所述在线调试程序被处理器执行时实现如权利要求1至7中任一项所述的在线调试方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211207201.XA CN115470143A (zh) | 2022-09-26 | 2022-09-26 | 在线调试方法、装置、设备及计算机可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211207201.XA CN115470143A (zh) | 2022-09-26 | 2022-09-26 | 在线调试方法、装置、设备及计算机可读存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115470143A true CN115470143A (zh) | 2022-12-13 |
Family
ID=84334344
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211207201.XA Pending CN115470143A (zh) | 2022-09-26 | 2022-09-26 | 在线调试方法、装置、设备及计算机可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115470143A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117667722A (zh) * | 2023-12-08 | 2024-03-08 | 中科世通亨奇(北京)科技有限公司 | 程序跟踪调试的方法、系统、设备及存储介质 |
-
2022
- 2022-09-26 CN CN202211207201.XA patent/CN115470143A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117667722A (zh) * | 2023-12-08 | 2024-03-08 | 中科世通亨奇(北京)科技有限公司 | 程序跟踪调试的方法、系统、设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6263456B1 (en) | System for remote debugging of client/server application | |
US9940225B2 (en) | Automated error checking system for a software application and method therefor | |
US10331425B2 (en) | Automated source code adaption to inject features between platform versions | |
US20070220492A1 (en) | Application verifier infrastructure and checks | |
CN113703730A (zh) | 持续集成方法、装置、计算机设备及存储介质 | |
CN108733553B (zh) | 基于docker的测试装置的配置方法、装置和系统 | |
CN111382048B (zh) | 真机测试平台上移动设备的管理方法和装置 | |
CN107577609B (zh) | 一种基于主机端动态链接的嵌入式系统动态模块调试系统 | |
CN109471768B (zh) | 业务问题的监控方法、装置以及电子设备 | |
CN111880987A (zh) | 应用程序的动态监测方法、装置、存储介质以及电子装置 | |
CN108874437B (zh) | 一种android应用程序的在线云更新方法 | |
WO2017041499A1 (zh) | 一种软件升级方法、系统和计算机可读存储介质 | |
CN110221845A (zh) | 应用部署方法、装置、设备和介质 | |
CN115470143A (zh) | 在线调试方法、装置、设备及计算机可读存储介质 | |
CN111176722A (zh) | 第三方库的文件版本检测方法、装置及存储介质 | |
CN111880804A (zh) | 应用程序代码的处理方法及装置 | |
CN112596784A (zh) | 一种迭代版本部署方法及装置 | |
CN113127329A (zh) | 脚本调试方法、装置及计算机存储介质 | |
CN111026638A (zh) | 一种网页自动化测试方法、装置、电子设备和存储介质 | |
CN115454575B (zh) | jar包转换并自动加载的方法、装置、设备及存储介质 | |
CN110928787B (zh) | 自动化测试脚本录制回放方法、装置、设备和存储介质 | |
CN111563050A (zh) | 用于移动设备的自动化测试方法 | |
CN113051088B (zh) | 程序加载方法、装置、设备及计算机可读介质 | |
CN115543812A (zh) | 基于动态注入的代码覆盖率测试方法、装置、系统及介质 | |
CN112596751B (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 |