CN113722204A - 一种应用调试方法、系统、设备及介质 - Google Patents
一种应用调试方法、系统、设备及介质 Download PDFInfo
- Publication number
- CN113722204A CN113722204A CN202010819208.1A CN202010819208A CN113722204A CN 113722204 A CN113722204 A CN 113722204A CN 202010819208 A CN202010819208 A CN 202010819208A CN 113722204 A CN113722204 A CN 113722204A
- Authority
- CN
- China
- Prior art keywords
- application
- debugging
- sub
- module
- user
- 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/3664—Environments for testing or debugging software
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/02—Protocols based on web technology, e.g. hypertext transfer protocol [HTTP]
- H04L67/025—Protocols based on web technology, e.g. hypertext transfer protocol [HTTP] for remote control or remote monitoring of applications
-
- 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
- G06F11/3624—Software debugging by performing operations on the source code, e.g. via a compiler
-
- 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/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/34—Network arrangements or protocols for supporting network services or applications involving the movement of software or configuration parameters
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/56—Provisioning of proxy services
- H04L67/566—Grouping or aggregating service requests, e.g. for unified processing
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/60—Scheduling or organising the servicing of application requests, e.g. requests for application data transmissions using the analysis and optimisation of the required network resources
- H04L67/63—Routing a service request depending on the request content or context
-
- 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
- G06F11/3648—Software debugging using additional hardware
- G06F11/3656—Software debugging using additional hardware using a specific debug interface
Abstract
本申请提供了一种应用调试方法,用于对部署在生产环境中的应用进行调试,应用包括的子应用模块在生产环境中运行以提供服务,该方法包括:接收用户输入或选择的多个子应用模块的标识,根据多个子应用模块的标识,对多个子应用模块的代码块进行调试,向用户呈现调试结果。该方法支持用户选择或输入多个待调试的子应用模块,并在生产环境对多个子应用模块进行调试,提高了应用调试的效率,也使得用户可以更方便地进行应用的调试。
Description
本申请要求于2020年05月26日提交中国国家知识产权局、申请号为202010456122.7、申请名称为“一种应用调试方法、装置、设备及介质”的中国专利申请的优先权,其全部内容通过引用结合在本申请中。
技术领域
本申请涉及应用开发技术领域,尤其涉及一种应用调试方法、应用调试系统、计算设备以及计算机可读存储介质。
背景技术
应用是针对用户的某种特殊应用目的所编写的计算机程序的集合。应用从立项到交付给客户,通常会经历开发、测试、上线等多个阶段。其中,在开发、测试、上线的各个阶段往往会配置相应的环境,例如开发环境(development environment)、测试环境(testingenvironment)、生产环境(production environment)。
开发人员常需要对应用进行调试,应用的调试包括利用人工或者编译的方式检测出应用的程序代码中的错误,进而可以根据调试过程中发现的错误对程序代码进行修正。目前,业界对应用的调试通常是通过集成开发环境(integrated developmentenvironment,IDE)在开发环境下对应用的程序代码进行调试。
针对已上线(即已部署到生产环境)的应用,如何进行高效的调试成为了业界重点关注的问题。
发明内容
本申请提供了一种应用调试方法,实现了在生产环境下直接对应用的多个子应用模块进行调试,提高了调试效率。本申请还提供了上述方法对应的应用调试系统、计算设备、计算机可读存储介质以及计算机程序产品。
第一方面,本申请提供了一种应用调试方法。待调试的应用部署在生产环境(production environment)。生产环境是指正式提供服务的环境。在一些实施例中,生产环境可以是客户自有的数据中心,或者是客户购买、租赁的公有云平台等等。
应用包括的子应用模块在上述生产环境中运行以提供服务。子应用模块是指通过计算机可执行的代码块实现一种或多种功能的功能模块。在一些实施例中,例如在基于微服务架构的应用中,该应用包括的子应用模块可以是微服务。子应用模块在形式上也可以是一个或多个源代码文件。
该方法可以由应用调试系统执行。应用调试系统接收用户输入或选择的多个子应用模块的标识。其中,每个子应用模块包括的代码块用于实现应用的功能。然后应用调试系统根据多个子应用模块的标识,对所述多个子应用模块的代码块进行调试。接着应用调试模块向用户呈现调试结果。
该方法能够支持用户对多个子应用模块进行调试选择,对应用的多个子应用模块进行调试,提高了应用的调试效率。进一步地,在该方法中,用户可以直接在生产环境下进行调试,无需在开发环境下重现生产环境下应用运行所产生的异常,提高了调试效率。并且,在一些实施例中,该方法支持对应用进行云调试,无需将子应用模块包括的代码块加载至集成开发环境(integrated development environment,IDE),通过IDE在开发环境下对应用进行本地调试,也无需将调试后的应用重新部署到生产环境,节省了时间,进一步提高了调试效率。
在一些可能的实现方式中,应用调试系统可以在调试过程中,通过图形用户界面(graphical user interface,GUI)向所述用户呈现所述应用的调试进度图,从而实现向用户呈现调试结果(具体是中间调试结果)。
其中,所述调试进度图包括以下信息中的一种或多种:已调试的子应用模块、正在进行调试的子应用模块、调试报错的子应用模块、调试报错的提醒信息、调试报错类型、子应用模块的请求/响应流。调试报错是指子应用模块的代码块在运行过程中发生错误,应用调试系统通过调试检测出该错误,并向用户报告该错误。调试报错类型可以包括缺少参数、参数类型错误、参数校验异常等错误类型。
一方面,调试进度图可以帮助用户快速获知调试状况,另一方面调试进度图可以为用户确定下一个或下一组待调试的子应用模块提供参考,以及为用户对调试报错的子应用模块的代码块进行修改提供参考。
在一些可能的实现方式中,应用调试系统可以向所述用户呈现被调试的子应用模块在调试过程中的栈信息和/或变量,由此实现向用户呈现调试结果(具体为中间调试结果)。需要说明的是,随着调试过程的进行,应用调试系统可以动态地向用户呈现被调试的子应用模块在调试过程中的栈信息和/或变量。
其中,栈信息可以包括调用栈中已执行的函数的标识。进一步地,栈信息还可以包括当前执行的函数的标识等信息。变量是指上述函数涉及的变量(如局部变量)。
通过呈现栈信息和变量,可以方便用户基于变量的值与预期值是否相同,从而确定子应用模块的代码块是否异常,为应用调试提供帮助。
在一些可能的实现方式中,应用调试系统可以接收用户通过GUI选择的所述多个子应用模块的标识。当然,应用调试系统可以接收用户通过命令用户界面(command userinterface,CUI)输入的所述多个子应用模块的标识。
当应用调试者与应用开发者不同时,通过GUI进行调试对于应用调试者更为友好。当应用调试者与应用开发者相同时,通过CUI进行调试的过程更加简单。
在一些可能的实现方式中,在接收用户输入或选择的多个子应用模块的标识之前,应用调试系统还可以通过用户界面(如CUI和/或GUI)向所述用户呈现所述应用的子应用模块列表,和/或,通过用户界面(如GUI)向所述用户呈现所述应用的子应用模块的拓扑图。
如此,可以方便用户输入或选择多个子应用模块的标识,以便对多个子应用模块进行调试。
在一些可能的实现方式中,应用调试系统可以获取所述应用的结构信息,该结构信息包括应用的标识、子应用模块(例如微服务)的标识、子应用模块(例如微服务)所属资源的标识中的至少一种。当应用的至少一个子应用模块包括多个副本时,子应用模块所属资源的标识可以是子应用模块的各个副本所属资源的标识。该资源可以是物理机(physical machine)或者部署在物理机上的虚拟机(virtual machine)、容器(container)等。然后应用调试系统根据所述应用的结构信息构建所述应用的子应用模块的拓扑图。其中,所述子应用模块的拓扑图表示所述应用的各个子应用模块之间的调用关系。
与采用列表的形式呈现应用的子应用模块相比,通过拓扑图还能够呈现子应用模块之间的调用关系,如此可以辅助用户确定对哪个或哪些子应用模块进行调试。
在一些可能的实现方式中,考虑到应用在不同时刻可用的子应用模块可以发生变化,交互模块102还可以获取更新后的结构信息,根据更新后的结构信息调整应用的子应用模块的拓扑图,向用户呈现调整后的子应用模块的拓扑图。
该方法可以使得用户尽可能地获得较新的拓扑图,避免用户对发生故障的子应用模块进行调试,导致调试效率降低以及资源浪费。
在一些可能的实现方式中,所述应用的每个子应用模块对应一个代理,每个子应用模块的代理用于接收调试指令,并根据调试指令启动对对应的子应用模块中的代码块的调试。
其中,子应用模块(如微服务)在运行时产生一个进程,子应用模块的代理在运行时实质上相当于寄宿在该进程中的独立线程。应用调试系统调试应用的子应用模块时,不会阻塞上述进程,直接通过寄宿在该进程的线程进行交互,如此可以实现在生产环境对子应用模块的调试。
在一些可能的实现方式中,考虑到调试过程是基于会话实现的,应用调试系统可以根据所述多个子应用模块的标识,生成多个调试指令。该调试指令可以包括调试会话建立指令。应用调试系统可以根据所述多个调试指令,与待调试的多个子应用模块的多个代理建立多个调试会话。然后获取每个待调试的子应用模块的代理的调试响应,所述调试响应用于生成所述调试结果。如此实现对多个子应用模块的调试。
通过上述方法可以实现在生产环境中直接对多个子应用模块进行调试,大幅度提高了应用调试效率。
在一些可能的实现方式中,每个代理启动的调试为对应的子应用模块的运行进程中的一个独立线程。应用调试系统调试应用的子应用模块时,不会阻塞上述进程,直接通过寄宿在该进程的线程进行交互,如此可以实现在生产环境对子应用模块的调试,避免了在开发环境下重新运行环境中产生的异常,将代码块加载至IDE进行本地调试,以及异常排除后将应用重新部署上线导致的时间成本增加,进一步提高了调试效率。
在一些可能的实现方式中,所述生产环境中包括至少一个节点,每个节点中部署所述应用的一个或多个子应用模块。应用调试系统可以将每个调试指令路由至每个待调试的子应用模块所在节点的节点代理,进而由所述节点代理将每个调试指令路由至每个待调试的子应用模块对应的代理。
如此为应用调试系统支持同时对多个子应用调试模块进行调试提供了帮助,进而提高了应用调试效率。
在一些可能的实现方式中,每个子应用模块对应的代理和每个节点的节点代理为与所述应用同时部署在所述生产环境的代码块。
其中,每个子应用模块对应的代理用于调试对应的子应用模块,调试过程可以并行,因此可以提高调试效率。节点代理提供了调试指令、调试响应的另一种传输路径(除负载均衡服务器之外的其他传输路径),避免了对同一子应用模块的调试指令被均衡至该应用子模块的不同副本的代理,保障了调试过程的连续性,提高了多副本场景下的可用性。
在一些可能的实现方式中,所述应用的每个子应用模块运行在独立的容器中,容器中运行的子应用模块之间通过容器的接口进行交互。该方法将每个子应用模块运行在独立的容器中,保障了子应用模块的独立性,进而保障了子应用模块的代理的独立性,使得子应用模块的代理对子应用模块的调试可以并行,提高了调试效率。
在一些可能的实现方式中,所述多个子应用模块中包括不同编程语言编写的代码块。每个调试指令被封装为调试消息路由至所述待调试的子应用模块对应的代理。每个子应用模块对应的代理用于将所述调试消息转换为子应用模块的编程语言对应的调试消息。
其中,应用调试系统可以在对应的子应用模块的代理中部署相应编程语言的语言调试模块,从而实现对异构应用的调试。
第二方面,本申请提供了一种应用调试方法。其中,待调试的应用部署在生产环境,所述应用的子应用模块在所述生产环境中运行以提供服务,该方法可以由应用调试系统的交互模块,例如IDE或浏览器实现。
具体地,交互模块可以通过GUI向用户呈现所述应用的子应用模块列表和/或所述子应用模块的拓扑图。其中,所述子应用模块列表和/或所述子应用模块的拓扑图用于供所述用户选择多个待调试的子应用模块。然后交互模块根据所述用户在所述GUI上的调试选择操作,向所述用户呈现对所述用户选择的多个子应用模块的调试结果。
该方法能够支持同时对应用的多个子应用模块进行调试,提高了应用的调试效率。在该方法中,用户可以直接在生产环境下进行调试,无需在开发环境下重现生产环境下应用运行所产生的异常,也无需将子应用模块包括的代码块加载至IDE,通过IDE在开发环境下对应用进行本地调试,更不需要将调试后的应用重新部署到生产环境,节省了时间,进一步提高了调试效率提高了调试效率。
第三方面,本申请提供了一种呈现应用调试结果的方法。待调试的应用部署在生产环境,所述应用的子应用模块在所述生产环境中运行以提供服务。该方法可以由应用调试系统的交互模块,例如IDE或浏览器实现。
具体地,交互模块通过GUI接收用户的调试选择操作,然后在所述GUI上向所述用户呈现所述应用的调试进度图。其中,所述调试进度图表示应用调试系统对所述用户选择的一个或多个子应用模块的调试进度;所述调试进度图中包括以下信息中的一种或多种:已调试的子应用模块、正在进行调试的子应用模块、调试报错的子应用模块、调试报错的提醒信息、调试报错类型、子应用模块的请求/响应流。
一方面,调试进度图可以帮助用户快速获知调试状况,另一方面调试进度图可以为用户确定下一个或下一组待调试的子应用模块提供参考,以及对调试报错的子应用模块的代码块进行修改提供参考。
第四方面,本申请提供了一种应用调试系统。待调试的应用部署在生产环境,所述应用包括的子应用模块在所述生产环境中运行以提供服务,该系统包括:
交互模块,用于接收用户输入或选择的多个子应用模块的标识,其中,每个子应用模块包括的代码块用于实现所述应用的功能;
调试模块,用于根据所述多个子应用模块的标识,对所述多个子应用模块的代码块进行调试;
所述交互模块,还用于向所述用户呈现调试结果。
在一些可能的实现方式中,所述交互模块用于:
通过GUI向所述用户呈现所述应用的调试进度图,其中,所述调试进度图包括以下信息中的一种或多种:已调试的子应用模块、正在进行调试的子应用模块、调试报错的子应用模块、调试报错的提醒信息、调试报错类型、子应用模块的请求/响应流。
在一些可能的实现方式中,所述交互模块用于:
向所述用户呈现被调试的子应用模块在调试过程中的栈信息和/或变量。
在一些可能的实现方式中,所述交互模块具体用于:
接收用户通过图形用户界面GUI选择的所述多个子应用模块的标识,或者,接收用户通过命令用户界面CUI输入的所述多个子应用模块的标识。
在一些可能的实现方式中,所述交互模块还用于:
在接收用户输入或选择的多个子应用模块的标识之前,通过用户界面向所述用户呈现所述应用的子应用模块列表,和/或,通过用户界面向所述用户呈现所述应用的子应用模块的拓扑图。
在一些可能的实现方式中,所述交互模块还用于:
获取所述应用的结构信息;
根据所述应用的结构信息构建所述应用的子应用模块的拓扑图,所述子应用模块的拓扑图表示所述应用的各个子应用模块之间的调用关系。
在一些可能的实现方式中,所述交互模块还用于:
获取所述应用的更新后的结构信息;
根据所述更新后的结构信息调整所述应用的子应用模块的拓扑图;
向所述用户呈现调整后的所述子应用模块的拓扑图。
在一些可能的实现方式中,所述应用的每个子应用模块对应一个代理,每个子应用模块的代理用于接收调试指令,并根据调试指令启动对对应的子应用模块中的代码块的调试。
在一些可能的实现方式中,所述交互模块还用于:
根据所述多个子应用模块的标识,生成多个调试指令;
所述调试模块具体用于:
根据所述多个调试指令,与待调试的多个子应用模块中的多个代理建立多个调试会话;
获取每个待调试的子应用模块的代理的调试响应,所述调试响应用于生成所述调试结果。
在一些可能的实现方式中,每个代理启动的调试为对应的子应用模块的运行进程中的一个独立线程。
在一些可能的实现方式中,所述生产环境中包括至少一个节点,每个节点中部署所述应用的一个或多个子应用模块,所述调试模块具体用于:
将每个调试指令路由至每个待调试的子应用模块所在节点的节点代理,进而由所述节点代理将每个调试指令路由至每个待调试的子应用模块对应的代理。
在一些可能的实现方式中,每个子应用模块对应的代理和每个节点的节点代理为与所述应用同时部署在所述生产环境的代码块。
在一些可能的实现方式中,所述应用的每个子应用模块运行在独立的容器中,容器中运行的子应用模块之间通过容器的接口进行交互。
在一些可能的实现方式中,所述多个子应用模块中包括不同编程语言编写的代码块,每个调试指令被封装为调试消息路由至所述待调试的子应用模块对应的代理;每个子应用模块对应的代理用于将所述调试消息转换为子应用模块的编程语言对应的调试消息。
第五方面,本申请提供一种计算设备,所述计算设备包括处理器、存储器和显示器。所述处理器、所述存储器进行相互的通信。所述处理器用于执行所述存储器中存储的指令,以使得计算设备执行如第一方面、第二方面或第三方面的任一种实现方式中的方法。
第六方面,本申请提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序指令,当所述计算机程序指令由计算设备执行时,计算设备执行上述第一方面、第二方面或第三方面的任一种实现方式中的方法。
第七方面,本申请提供了一种包含指令的计算机程序产品,当其在计算设备上运行时,使得设备执行上述第一方面、第二方面或第三方面的任一种实现方式中的方法。
本申请在上述各方面提供的实现方式的基础上,还可以进行进一步组合以提供更多实现方式。
附图说明
为了更清楚地说明本申请实施例的技术方法,下面将对实施例中所需使用的附图作以简单地介绍。
图1为本申请实施例提供的一种应用调试系统的架构图;
图2A为本申请实施例提供的一种应用调试系统的应用场景示意图;
图2B为本申请实施例提供的一种应用调试系统的应用场景示意图;
图2C为本申请实施例提供的一种应用调试系统的应用场景示意图;
图3为本申请实施例提供的一种应用调试方法的流程图;
图4为本申请实施例提供的一种调试选择界面的示意图;
图5为本申请实施例提供的另一种调试选择界面的示意图;
图6为本申请实施例提供的一种调试结果的显示界面的示意图;
图7为本申请实施例提供的一种计算设备的结构示意图。
具体实施方式
本申请实施例中的术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征。
首先对本申请实施例中所涉及到的一些技术术语进行介绍。
应用(application,APP),是针对用户的某种特殊应用目的所编写的计算机程序的集合,具体可以是单一的应用程序或者多个应用程序的集合形成的应用软件。例如,在办公领域,应用可以是单一的文本编辑应用,也可以是文本编辑应用、表格编辑应用和图形编辑应用组成的应用。
应用通常包括多个子应用模块。子应用模块是指通过计算机可执行的代码块实现一种或多种功能的功能模块,子应用模块可以是一个或者多个源代码文件。该子应用模块可以在生产环境中运行从而提供服务。其中,生产环境是指正式提供服务的环境。生产环境中包括至少一个节点,该节点是指服务器、终端计算设备等具有计算能力的计算节点。
对于功能繁多的复杂应用,开发人员可以采用微服务架构(micro servicesarchitecture,MSA)进行开发,以提高开发效率。其中,微服务架构是指将应用的功能模块拆分成独立的微服务。基于此,子应用模块可以是应用的微服务。微服务是一个或者一组相对较小且独立的功能单元的集合。微服务之间通过接口调用实现数据交互。如此,可以实现应用的各个功能模块的解耦。当应用需要新增功能、删除功能或者修改功能时,开发人员增加、删除或者修改相应的微服务即可。子应用模块也可以是一个或多个微服务。微服务在生产环境中运行,从而提供相应的服务。
针对已部署在生产环境中的应用,如果出现运行异常等问题,通常还需要对应用进行调试。其中,调试是指通过各种手段如单步执行、设置断点、打印变量内容等手段,对应用的程序代码进行查错。
目前,相关技术对已部署在生产环境中的应用的调试方法通常是将该应用的程序代码加载至集成开发环境(integrated development environment,IDE),通过IDE在开发环境下对应用的程序代码进行本地调试,在本地调试后,对确定的问题进行解决后再重新将应用部署上线。这种对已上线的应用的调试方式存在多方面问题。一方面,在开发环境下不一定能够重现生产环境下应用运行所产生的异常,开发人员需要进行额外的工作,以在开发环境下重现生产环境下应用运行所产生的异常,并根据该异常对应用的程序代码进行调试,增加了调试难度,降低了调试效率。另一方面,将应用的程序代码加载至IDE进行本地调试,以及将调试完成的应用重新部署到生产环境,增加了额外的时间成本,进一步降低了调试效率。并且,开发人员一次仅对应用的一个子应用模块进行调试,极大地影响了应用的调试效率。针对已上线(即已部署到生产环境)的应用,如何进行高效的调试成为了业界重点关注的问题。
有鉴于此,本申请实施例提供了一种更高效的应用调试方法。该方法可以由应用调试系统执行。具体地,针对部署在生产环境中待调试的应用,应用调试系统接收用户输入或选择的多个子应用模块的标识,根据多个子应用模块的标识对多个子应用模块的代码块进行调试,然后向用户呈现调试结果。
该方法能够支持用户一次选择多个待调试的子应用模块,对应用的多个子应用模块进行调试,提高了应用的调试效率。在该方法中,用户可以直接在生产环境下进行调试,无需在开发环境下重现生产环境下应用运行所产生的异常,提高了调试效率。并且,在一些实施例中,该方法支持对应用进行云调试,无需将子应用模块包括的代码块加载至IDE,通过IDE在开发环境下对应用进行本地调试,也无需将调试后的应用重新部署到生产环境,节省了时间,进一步提高了调试效率。
为了使得本申请的技术方案更加清楚、易于理解,下面结合附图对本申请实施例提供的应用调试方法的系统架构进行介绍。
如图1所示,应用调试系统100与数据中心300建立有通信通路,应用调试系统100用于对部署在数据中心300上的至少一个应用200进行调试。其中,数据中心300提供生产环境,应用200部署在生产环境中。应用200包括多个子应用模块,每个子应用模块包括的代码块用于实现应用200的功能。
应用200的子应用模块可以分布式地部署在数据中心300的至少一个节点上。例如,在图1的示例中,应用200的n个子应用模块分布式地部署于数据中心的k个节点(也称作主机),其中,k小于等于n。需要说明,子应用模块可以直接部署在节点,即部署在物理机中,也可以部署在节点上的虚拟机或容器中。应用200的每个子应用模块部署在独立的容器中时,容器中运行的子应用模块可以通过容器的接口进行交互。
每个子应用模块具有模块代理(子应用模块为微服务时,也称作微服务代理),每个节点具有节点代理(host agent)。本申请实施例将模块代理称之为代理(agent)。
agent为与应用200同时部署在生产环境的代码块。该代码块在运行时用于代理子应用模块与外部交互,以及对该子应用模块的调试。其中,子应用模块(如微服务)在运行时产生一个进程,子应用模块的agent在运行时实质上相当于寄宿在该进程中的独立线程。应用调试系统100调试应用的子应用模块时,不会阻塞上述进程,直接通过寄宿在该进程的线程进行交互,如此可以实现在生产环境对子应用模块的调试。
在一些实现方式中,agent可以通过代码注入的方式被创建。代码注入是一种向目标进程插入独立运行代码并使之运行的技术。代码注入一般可以配置环境变量(environment variables)实现。以Java平台为例,环境变量可以为JAVA_TOOL_OPTIONS,通过将环境变量赋值为待插入的代码文件的名称,例如export JAVA_TOOL_OPTIONS=“-agent-lib:hprof”,子应用模块(如微服务)的进程启动时,插入的代码文件中的代码被写入上述进程的虚拟内存空间,插入代码对应的线程也随着进程的启动而启动。作为宿主的进程未终止前,线程可以一直运行。
host agent为与应用200同时部署在生产环境的代码块。host agent用于转发来自于节点上的子应用模块的消息或者向节点上的子应用模块转发消息。host agent运行时可以产生一个进程。该进程对应的程序代码可以随着应用200的子应用模块包括的代码块部署到节点时被部署到节点。当节点上的子应用模块的进程启动时,host agent也随之启动。
应用调试系统100包括交互模块102和调试模块104。交互模块102用于接收用户输入或选择的多个子应用模块的标识,例如接收用户通过图形用户界面(graphical userinterface,GUI)选择的多个子应用模块的标识,或者接收用户通过命令用户界面(commanduser interface,CUI)输入的多个子应用模块的标识。调试模块104用于根据多个子应用模块的标识,对多个子应用模块的代码块进行调试。交互模块102还用于向用户呈现调试结果。
在图1所示实施例中,交互模块102可以是提供应用调试功能的IDE,该IDE不仅能够用于编辑应用200的程序代码,对开发过程中的程序代码进行调试,还能够对远程已上线的应用200进行调试。交互模块102也可以是其他能够提供对已上线的应用200进行调试的功能的交互模块,例如加载有用于调试应用200的用户界面的浏览器或者专用于应用调试的交互模块。为了便于描述,后文以交互模块102为IDE进行示例说明。
在一些实现方式中,应用调试系统100的各个模块可以分布式地部署于不同环境。例如,如图2A所示,交互模块102可以部署在终端计算设备中,调试模块104可以部署在云计算集群(包括至少一个云计算设备,例如云服务器等)中。
在图2A的场景中,交互模块102可以为本地IDE。其中,本地也称作本地设备。本地设备包括处于用于用户直接控制之下的终端计算设备(例如笔记本电脑等用户终端)。本地IDE是指以客户端形式安装在本地设备的IDE。在一些示例中,本地IDE可以包括visualstudio、eclipse等等。调试模块104可以为云调试器(cloud debugger)。本地IDE可以安装插件,通过插件与cloud debugger连接,从而对应用200进行调试。
需要说明的是,本地IDE通常具有本地debugger,该本地debugger与clouddebugger相互独立。基于此,用户可以一边通过本地debugger对本地开发的应用程序代码进行调试,一边通过cloud debugger对已上线的应用200进行调试。
在另一些实现方式中,应用调试系统100的各个模块也可以部署于相同环境。例如,如图2B所示,交互模块102和调试模块104可以部署在同一云计算集群中,例如,该云计算集群为一个云服务提供商提供的公有云。交互模块102可以为云化IDE(cloud IDE),调试模块104可以为cloud debugger。
云服务提供商可以将cloud debugger和cloud IDE整合成一个云服务提供给用户使用,也可以分别提供cloud IDE和cloud debugger两个云服务供用户使用。在一些情况下,云服务提供商可以将cloud debugger作为cloud IDE的增值服务,用户购买或者租赁该增值服务后,云服务提供商将其结合在cloud IDE中提供给用户使用。
当然,如图2C所示,交互模块102和调试模块104也可以部署在不同云计算集群中,例如,不同的云计算集群为不同的云服务提供商提供的公有云。交互模块102为cloud IDE,调试模块104为cloud debugger。不同云服务提供商分别提供cloud IDE和cloud debugger给用户使用。
进一步地,应用调试系统100调试的应用200既可以与交互模块102和/或调试模块104部署在相同或不同的云计算集群,也可以独立地部署在任何数据中心(例如用户自有的数据中心),前述图2A、图2B、图2C示例性地展示应用200部署在数据中心300的情况。
当应用200以集群形式(如kubernetes,k8s)部署在自有数据中心或第三方数据中心时,用户通过手动运行命令,在集群的每一个节点运行一组守护进程(daemon set),如日志收集进程fluentd、logstash,系统监控进程collectd、ganglia gmond,系统管理进程kube-proxy、kube-dns等等。如此实现在节点上运行host agent。
应用200和cloud debugger部署在同一云计算集群时,可以由同一云容器引擎(cloud container engine,CCE)创建、运行容器,各容器中运行应用200的子应用模块。具体地,CCE为用户提供容器创建界面,该界面还承载有host agent部署控件,用户选中该host agent部署控件,则CCE可以在创建容器时,自动在集群的每一个节点部署hostagent。
图1是以应用200的每个子应用模块仅部署一个副本(replica)进行示例说明的。在一些实现方式中,为了保证子应用模块的可用性,应用200的至少一个子应用模块可以部署多个副本。对应地,每个副本包括一个agent。host agent可以将调试消息广播至多个副本的agent。进一步地,一个子应用模块的多个副本部署在不同节点时,调试模块104先将调试消息路由至不同节点,然后由不同节点上的host agent分别向对应的agent广播调试消息。
其中,子应用模块的一个副本的agent可以根据调试消息(具体是调试消息中的调试指令)启动对该子应用模块的调试,生成对该调试指令的调试响应,应用调试系统100根据调试响应生成调试结果,从而实现对子应用模块的调试。需要说明的是,子应用模块的一个副本的agent在返回调试响应时,可以先将调试响应返回至host agent,然后通过hostagent返回至应用调试系统100。
其中,host agent提供了调试指令、调试响应的另一种传输路径(除负载均衡服务器之外的其他传输路径),避免了对同一子应用模块的调试指令被均衡至该应用子模块的不同副本的agent,保障了调试过程的连续性,提高了多副本场景下的可用性。
接下来,从应用调试系统100的角度,对本申请实施例提供的应用调试方法进行详细介绍。
参见图3所示的应用调试方法的流程图,该方法包括:
S302:应用调试系统100接收用户输入或选择的多个子应用模块的标识。
应用调试系统100(具体可以是交互模块102)可以通过用户界面向用户呈现应用200的子应用模块列表和/或应用200的子应用模块的拓扑(topology)图。其中,子应用模块的拓扑图用于标识应用200的各个子应用模块之间的调用关系。用户可以通过上述用户界面(例如GUI)选择多个子应用模块,应用调试系统100接收用户通过用户界面(例如GUI)选择的多个子应用模块的标识。
在一些可能的实现方式中,用户可以通过上述用户界面(例如CUI)直接输入多个子应用模块的标识,应用调试系统100的交互模块102接收用户通过用户界面(例如CUI)输入的多个子应用模块的标识,以对多个子应用模块进行调试。
其中,交互模块102呈现的拓扑图可以根据应用200的结构信息构建得到。结构信息包括应用的标识、子应用模块(例如微服务)的标识、子应用模块(例如微服务)所属资源的标识中的至少一种。当应用200的至少一个子应用模块包括多个副本时,子应用模块所属资源的标识可以是子应用模块的各个副本所属资源的标识。该资源可以是物理机(physical machine)或者部署在物理机上的虚拟机(virtual machine)、容器(container)等。结构信息可以用于索引该应用200中可用的子应用模块。
在一些实现方式中,应用调试系统100还可以存储应用的结构信息,包括:应用的标识、子应用模块的标识、资源的标识中的任意一种或多种。这些标识可以通过键值对形式(即key:value)进行存储。为了便于理解,下面结合一具体示例进行说明。在该示例中,应用200为基于微服务架构的应用,结构信息具体包括如下信息:
apps:appId:{appId},{appName,appId}
tiers:appId:{appId}:tierId:{tierId},{tierName,language,technologies,os}
resources:appId:{appId}:tierId:{tierId}:resourceId:{resourceId},{created,hostName,ip,ports,resourceId}。
其中,apps表示应用,tiers表示微服务,resources表示资源。appName表示应用的名称,appId表示应用的标识,应用的标识具有唯一性。appId可以根据项目的标识projectId和appName生成。例如,appId可以是将projectId与默认(default)字段、appName级联后,利用消息摘要(message digest 5,MD5)算法处理得到。在一个示例中,appId可以是{projectId}|default|{appName}的MD5值。tierId表示微服务的标识,tierName表示微服务的名称。tierId可以根据tierName生成,例如tierId可以根据tierName和default字段利用MD5算法处理得到。resourceId表示资源的标识,其可以根据容器的标识containerId得到。例如,resourceId可以是containerId的MD5值。
应用200的子应用模块启动后,该子应用模块的agent也随之启动。agent驻留在子应用模块的进程中,其生存期与子应用模块的进程相同。当子应用模块仍然可用时,agent可以向应用调试系统100发送结构信息。应用调试系统100可以存储结构信息,例如存储结构信息至缓存如Redis cache。如此,交互模块102可以从Redis cache中获取结构信息,根据该结构信息构建应用的子应用模块的拓扑图。
其中,agent在发送结构信息时,可以先发送至host agent。host agent可以对不同agent发送的结构信息汇总,然后将汇总后的结构信息进行存储。考虑到应用200在不同时刻可用的子应用模块可以发生变化,agent还可以更新结构信息。例如,agent可以周期性地发送结构信息,以更新应用调试系统100存储的结构信息。对应地,交互模块102还可以获取更新后的结构信息,根据更新后的结构信息调整应用200的子应用模块的拓扑图,向用户呈现调整后的子应用模块200的拓扑图。
应用调试系统100对应用200的调试过程是基于调试会话(debug session)实现的。交互模块102可以在用户触发调试会话建立操作后,通过用户界面向用户呈现应用200的子应用模块列表和/或应用200的子应用模块的拓扑图,用户可以通过上述子应用模块列表或者拓扑图选择多个子应用模块,应用调试系统100根据多个子应用模块的标识分别建立调试会话。为了便于理解,下面以基于微服务架构的应用200进行示例说明。
图4提供了一种调试选择界面的示意图。如图4所示,界面400中展示有启动调试控件404。该启动调试控件404用于启动对应用的调试,建立调试会话。具体地,启动调试控件404被触发(例如被用户点击)时,界面400中呈现调试会话建立页面408,例如通过弹窗方式呈现调试会话建立页面408。该调试会话建立页面408提供有应用选择控件,通过应用选择控件选中应用200后,该调试会话建立页面408显示应用200的微服务列表。该列表中包括微服务1、微服务2……微服务5。用户可以从微服务列表中选择多个微服务,以建立多个调试会话,每个调试会话对应一个微服务。
在一些实现方式中,界面400中还展示有查看拓扑控件406。该查看拓扑控件406被触发时,用于显示微服务的拓扑图,以供用户查看。参见图5,当拓扑控件406被触发时,界面400还展示有微服务的拓扑图410。如拓扑图410所示,圆圈表示微服务,圆圈之间的虚线箭头表示微服务之间的调用关系。例如,在图5的调试选择界面的示例中,应用200包括微服务1、微服务2……微服务5等多个微服务,微服务1调用微服务2、微服务4,微服务2调用微服务3,微服务4调用微服务3和微服务5。
与采用列表的形式呈现应用200的微服务相比,通过拓扑图410还能够呈现微服务之间的调用关系,如此可以辅助用户确定对哪个或哪些微服务进行调试。其中,图5是以界面400同时呈现列表和拓扑图410进行示例说明。在一些实现方式中,界面400也可以呈现列表和拓扑图410中的任意一种,并在需要时通过相应的控件切换至另一种。
在图4、图5所示实施例中,界面400中的调试会话建立页面408还展示有确定控件409,用户在通过微服务选择控件选中多个微服务后,点击上述确定控件409,则触发针对被选中的多个微服务的调试会话建立操作。
S304:应用调试系统100根据多个子应用模块的标识,对多个子应用模块的代码块进行调试。
当用户触发针对多个子应用模块的调试会话建立操作时,应用调试系统100(具体可以是交互模块102)可以根据接收的多个子应用模块的标识,生成多个调试指令。该调试指令包括调试会话建立指令。应用调试系统100可以根据多个调试会话建立指令,与待调试的多个子应用模块的agent建立多个调试会话。
其中,多个调试会话与多个子应用模块的agent一一对应。每个调试会话具有唯一的调试会话标识(debug session ID)。基于该调试会话标识可以唯一确定交互模块102和子应用模块的agent。通过在调试消息中携带上述调试会话标识可以保障调试消息能够被正确地传输至子应用模块的agent或者交互模块102。
在一些实现方式中,交互模块102还可以通过用户界面如GUI中呈现断点(breakpoint)设置控件、栈信息查看控件、变量显示控件、变量跟踪控件或者单步执行控件等等。这些控件可以由如图4所示的调试会话建立页面呈现,也可以通过独立的调试配置页面呈现。例如,用户可以通过独立的调试配置页面呈现的上述控件,触发断点设置等调试操作。交互模块102根据用户通过上述控件触发的调试操作,生成调试指令。该调试指令包括设置断点的指令,查看栈信息的指令,显示某个变量的指令,跟踪某个变量的指令或者单步执行的指令中的一种或多种。每个调试指令可以被封装在多个调试消息中。
调试模块104可以将多个调试消息发送至多个子应用模块的agent。agent接收到调试消息,可以获得调试指令,根据调试指令启动对对应的子应用模块的代码块的调试。对应地,子应用模块的agent可以生成调试响应。交互模块102还可以获取每个待调试的子应用模块的agent的调试响应,根据该调试响应生成调试结果,向用户呈现调试结果。
为了便于理解,下面结合具体的调试指令进行详细说明。
当调试指令为设置断点的指令时,调试模块104将封装有该指令并且携带有debugsession ID的调试消息路由至对应的子应用模块的agent。agent接收到设置断点的指令,可以设置断点。当agent执行到断点位置时,停止执行。其中,agent还可以返回调试响应,该调试响应具体为实际的断点位置。
当调试指令为显示某个变量的指令时,调试模块104将封装有该指令并且携带有debug session ID的调试消息路由至对应的子应用模块的agent。agent接收到显示变量的指令,可以打印(print)该变量的值。其中,agent还可以返回调试响应,该调试响应具体为变量的值。
当调试指令为查看栈信息的指令时,调试模块104将封装有该指令并且携带有debug session ID的调试消息路由至对应的子应用模块的agent。agent接收到查看栈信息的指令,可以获取栈信息,如获取调用栈(call stack)中已执行的函数的标识和/或当前正在执行的函数的标识等。其中,agent还可以向调试模块104返回调试响应,该调试响应具体为栈信息。
进一步地,在设置断点、跟踪变量后,用户还可以通过用户界面呈现的断点删除控件,取消跟踪控件触发调试操作,生成调试指令。该调试指令可以包括删除断点(删除某个或全部断点)的指令和/或取消跟踪某个变量的指令。
当调试指令为删除断点的指令时,调试模块104将封装有该指令并且携带有debugsession ID的调试消息路由至对应的子应用模块的agent。agent接收到删除断点的指令,可以删除相应的断点,避免agent在对应位置停止执行。其中,agent还可以返回调试响应,该调试响应用于指示删除成功。
当调试指令为取消跟踪某个变量的指令时,调试模块104将封装有该指令并且携带有debug session ID的调试消息路由至对应的子应用模块的agent。agent接收到取消跟踪某个变量的指令,取消跟踪该变量。其中,agent还可以返回调试响应,该调试响应用于指示取消成功。
在一些可能的实现方式中,调试模块104可以先检测每个调试指令对应的debugsession是否存在,若是,则将每个调试指令和对应的debug session ID路由至对应的子应用模块的agent,若否,则根据调试指令建立对应的debug session,然后将每个调试指令和对应的debug session ID路由至对应的微服务的agent。agent接收到上述调试指令,启动对对应微服务的调试。接着,交互模块102获取对应的agent的调试响应,该调试响应可以用于生成调试结果,如此可以实现对子应用模块的调试。
需要说明的是,应用调试系统100可以包括多个交互模块102,例如包括多个IDE。多个用户可以通过各自的交互模块102如IDE同时对应用200的多个子应用模块进行调试。其中,不同用户可以对应用200的相同子应用模块进行调试,也可以对应用200的不同子应用模块进行调试。
当多个用户通过各自的交互模块102触发对同一个子应用模块的操作时,应用调试系统100(具体可以是调试模块104)可以为多个用户分别建立调试会话。调试会话与被调试的子应用模块以及发起调试流程的交互模块102(或者用户)一一对应。例如,当n个用户中的每个用户触发针对m个子应用模块的操作时,应用调试系统100的调试模块104根据n个用户的操作,创建n*m个调试会话。其中,n大于或等于1,m大于或等于1。
S306:应用调试系统100向用户呈现调试结果。
调试结果包括中间调试结果和/或最终调试结果。在调试过程中,应用调试系统100(具体为交互模块102)显示中间调试结果。该中间调试结果用于表征调试过程中产生的结果。调试过程中产生的结果可以通过调试进度图表征。在调试完成后,应用调试系统100(具体为交互模块102)显示最终调试结果。该最终调试结果用于表征调试成功或调试失败。
其中,调试进度图包括以下信息中的一种或多种:已调试的子应用模块、正在进行调试的子应用模块、调试报错的子应用模块、调试报错的提醒信息、调试报错类型、子应用模块的请求/响应流。调试报错是指子应用模块的代码块在运行过程中出现错误,应用调试系统100通过调试检测出该错误,并向用户报告该错误。
进一步地,应用调试系统100的交互模块102还可以向用户呈现子应用模块调试过程的栈信息和/或变量。具体地,交互模块102可以根据调试进度动态地呈现调试过程的栈信息和/或变量。
其中,应用调试系统100的交互模块102可以通过GUI或CUI向用户呈现调试结果。为了便于描述,下面以应用调试系统100调试基于微服务架构的应用200,并通过GUI呈现调试结果进行示例说明。
参见图6所示的调试结果的显示界面示意图,界面600呈现有调试结果控件,该调试结果控件被触发时,例如被用户点击而触发时,界面600显示调试进度图602。该调试进度图602中包括已调试的微服务、正在进行调试的微服务、调试报错的微服务、调试报错的提醒信息、调试报错类型和微服务的请求/响应流。
其中,已调试的微服务、正在进行调试的微服务、调试报错的微服务可以通过文字、符号、颜色或者形状等进行区分。具体地,交互模块102可以在微服务拓扑中调整微服务标识符的颜色,从应用200的微服务中标识已调试的微服务、正在进行调试的微服务。例如,交互模块102将微服务1、微服务2的标识符由灰色调整为绿色,表示微服务1、微服务2已调试,将微服务3的颜色由灰色调整为黄色表示微服务3正在进行调试。其中,调试进度图为灰度图时,还可以基于不同灰度标识已调试的微服务、正在进行调试的微服务。
交互模块102还可以通过调试报错的提醒信息,从应用200的微服务中标识调试报错的微服务。例如,将微服务3通过连接线连接一个错误提示框609,错误提示框609中包括调试报错的提醒信息,由此可以标识微服务3为调试报错的微服务。其中,调试报错的提醒信息包括调试报错类型,如缺少参数、参数类型错误、参数校验异常等错误类型。在该示例中,微服务3的调试错误类型为5003,用于指示参数校验异常。
进一步地,交互模块102还可以在拓扑图上添加微服务的请求/响应流,辅助描述微服务的调试进度。例如,有请求流(调试指令形成的数据流)流入或者有响应流(调试响应形成的数据流)流出,表明微服务要么已调试,要么正在进行调试;既没有请求流流入,也没有响应流流出,表明微服务尚未调试。
根据上述请求/响应流,用户可以确定下一个或下一组需要调试的微服务。在图6的示例中,请求流和响应流表征微服务1、微服务2、微服务3已启动调试,即应用200的一个分支已启动调试。接下来,用户可以确定对应用200的另一分支进行调试。其中,另一分支可以是微服务1、微服务4、微服务3形成的分支,或者微服务1、微服务4、微服务5形成的分支,由于微服务1已启动调试,因此,用户可以确定对微服务4进行调试。
对于正在进行调试的微服务,交互模块102还可以通过在拓扑图中修改微服务标识符的形状,标识对该微服务的调试类型。例如,针对微服务3的标识符增加一个圆圈,标识正在对微服务3进行断点调试。在一些实现方式中,交互模块102也可以将微服务的标识符修改为正方形,标识正在对该微服务进行单步调试。
在一些实现方式中,界面600还可以呈现栈信息603和/或变量的值604。栈信息603可以包括调用栈中已执行的函数的标识(在该示例中为函数1、函数2)。进一步地,栈信息603还可以包括当前执行的函数的标识等信息(在该示例中为函数3)。变量的值604具体可以通过键值对(key value)进行呈现,如图6所示,界面600还可以呈现局部变量的名称和该局部变量的值等。
需要说明的是,界面600呈现的栈信息603和/变量的值604可以随着调试过程发生变化。例如,在调试微服务2时,界面600呈现微服务2的调用栈中已执行的函数和当前正在执行的函数,并呈现这些函数涉及的局部变量的值,在调试微服务3时,界面600呈现微服务3的调用栈中已执行的函数和当前正在执行的函数,并呈现这些函数涉及的局部变量的值。
进一步地,界面600中还可以呈现代码块606。其中,用户可以根据代码块606确定变量的理论值,根据该理论值和界面600中显示的、变量的值604确定相应的代码块606是否异常。在一些实现方式中,界面600中还包括代码文件目录608。代码文件目录608可以用于在应用200的不同代码块606(或者不同源代码文件)之间快速跳转,由此可以实现快速跳转至其他微服务的代码块606进行调试。
其中,界面600中还展示有调试控制台控件。该调试控制台控件被触发时,用于切换至调试控制台,以便用户基于该调试控制台继续执行对应用200的调试,如执行对应用200的其他微服务的调试。
基于上述内容描述,本申请实施例提供了一种应用调试方法。在该方法中,应用调试系统100接收用户输入或选择的多个子应用模块的标识,根据多个子应用模块的标识对多个子应用模块的代码块进行调试,然后向用户呈现调试结果。该方法支持同时对应用200的多个子应用模块进行调试,提高了调试效率。并且,用户可以直接在生产环境下对应用200的子应用模块进行调试,无需在开发环境下重现生产环境下应用200运行所产生的异常,也不需要将代码块加载至IDE进行本地调试,以及将调试完成的应用200重新部署到生产环境,进一步提高了调试效率。
在一些实现方式中,应用调试系统100向agent路由的调试指令是携带在调试消息中的。该调试消息可以是基于调试适配器协议(debug adapter protocol)的消息,因此,agent还可以将该标准的DAP调试消息转换为与上层应用对应的调试消息,具体是与上层微服务的技术栈(或者编程语言)对应的调试消息。例如,被调试的子应用模块是基于Java技术栈(或者Java语言)开发时,则agent可以将标准的DAP调试消息转换为基于java调试接口(java debug interface,JDI)的调试消息。
为了实现上述转换过程,agent可以预先部署与上层子应用模块如微服务的技术栈(或者编程语言)对应的语言调试模块。具体地,应用调试系统100可以存储至少一种技术栈对应的语言调试模块,例如C技术栈、Python技术栈、Java技术栈对应的语言调试模块。其中,语言调试模块具体可以存储在云容器引擎(cloud container engine,CCE)存储文件集(storage volume)或者hadoop分布式文件系统(hadoop distributed file system,HDFS)中。
应用调试系统100可以接收来自于agent的语言调试模块部署请求,然后响应于该语言调试模块部署请求,获取该agent请求的语言调试模块的程序代码,向agent发送该语言调试模块的程序代码,以在agent中部署相应的语言调试模块。
应用200可以是异构应用。即应用200的多个子应用模块可以包括基于编程语言编写的代码块。对应地,应用调试系统100可以在对应的agent中部署相应编程语言的语言调试模块,从而实现对异构应用的调试。
上文结合图1至图6对本申请实施例提供的应用调试方法进行了详细介绍,下面将结合附图对本申请实施例提供的应用调试系统100以及相关设备进行介绍。
参见图1所示的应用调试系统100的结构示意图,待调试的应用部署在生产环境,所述应用包括的子应用模块在所述生产环境中运行以提供服务,该系统100包括:
交互模块102,用于接收用户输入或选择的多个子应用模块的标识,其中,每个子应用模块包括的代码块用于实现所述应用的功能;
调试模块104,用于根据所述多个子应用模块的标识,对所述多个子应用模块的代码块进行调试;
所述交互模块102,还用于向所述用户呈现调试结果。
在一些可能的实现方式中,所述交互模块102用于:
通过GUI向所述用户呈现所述应用的调试进度图,其中,所述调试进度图包括以下信息中的一种或多种:已调试的子应用模块、正在进行调试的子应用模块、调试报错的子应用模块、调试报错的提醒信息、调试报错类型、子应用模块的请求/响应流。
在一些可能的实现方式中,所述交互模块102用于:
向所述用户呈现被调试的子应用模块在调试过程中的栈信息和/或变量。
在一些可能的实现方式中,所述交互模块102具体用于:
接收用户通过图形用户界面GUI选择的所述多个子应用模块的标识,或者,接收用户通过命令用户界面CUI输入的所述多个子应用模块的标识。
在一些可能的实现方式中,所述交互模块102还用于:
在接收用户输入或选择的多个子应用模块的标识之前,通过用户界面向所述用户呈现所述应用的子应用模块列表,和/或,通过用户界面向所述用户呈现所述应用的子应用模块的拓扑图。
在一些可能的实现方式中,所述交互模块102还用于:
获取所述应用的结构信息;
根据所述应用的结构信息构建所述应用的子应用模块的拓扑图,所述子应用模块的拓扑图表示所述应用的各个子应用模块之间的调用关系。
在一些可能的实现方式中,所述交互模块102还用于:
获取所述应用的更新后的结构信息;
根据所述更新后的结构信息调整所述应用的子应用模块的拓扑图;
向所述用户呈现调整后的所述子应用模块的拓扑图。
在一些可能的实现方式中,所述应用的每个子应用模块对应一个代理,每个子应用模块的代理用于接收调试指令,并根据调试指令启动对对应的子应用模块中的代码块的调试。
在一些可能的实现方式中,所述交互模块102还用于:
根据所述多个子应用模块的标识,生成多个调试指令;
所述调试模块104具体用于:
根据所述多个调试指令,与待调试的多个子应用模块中的多个代理建立多个调试会话;
获取每个待调试的子应用模块的代理的调试响应,所述调试响应用于生成所述调试结果。
在一些可能的实现方式中,每个代理启动的调试为对应的子应用模块的运行进程中的一个独立线程。
在一些可能的实现方式中,所述生产环境中包括至少一个节点,每个节点中部署所述应用的一个或多个子应用模块,所述调试模块104具体用于:
将每个调试指令路由至每个待调试的子应用模块所在节点的节点代理,进而由所述节点代理将每个调试指令路由至每个待调试的子应用模块对应的代理。
在一些可能的实现方式中,每个子应用模块对应的代理和每个节点的节点代理为与所述应用同时部署在所述生产环境的代码块。
在一些可能的实现方式中,所述应用的每个子应用模块运行在独立的容器中,容器中运行的子应用模块之间通过容器的接口进行交互。
在一些可能的实现方式中,所述多个子应用模块中包括不同编程语言编写的代码块,每个调试指令被封装为调试消息路由至所述待调试的子应用模块对应的代理;每个子应用模块对应的代理用于将所述调试消息转换为子应用模块的编程语言对应的调试消息。
根据本申请实施例的应用调试系统100可对应于执行本申请实施例中描述的方法,并且应用调试系统100的各个模块/单元的上述和其它操作和/或功能分别为了实现图3所示实施例中的各个方法的相应流程,为了简洁,在此不再赘述。
本申请实施例还提供了一种计算设备700。该计算设备700可以是笔记本电脑、台式机等端侧设备,也可以是云环境中的云计算设备(例如云服务器),或者是端侧设备和云计算设备的组合。该计算设备700具体用于实现如图1所示实施例中应用调试系统100的功能。
图7提供了一种计算设备700的结构示意图,如图7所示,计算设备700包括总线701、处理器702、显示器703和存储器704。处理器702、存储器704和显示器703之间通过总线701通信。
总线701可以是外设部件互连标准(peripheral component interconnect,PCI)总线或扩展工业标准结构(extended industry standard architecture,EISA)总线等。总线可以分为地址总线、数据总线、控制总线等。为便于表示,图7中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
处理器702可以为中央处理器(central processing unit,CPU)、图形处理器(graphics processing unit,GPU)、微处理器(micro processor,MP)或者数字信号处理器(digital signal processor,DSP)等处理器中的任意一种或多种。
显示器703是一种输入输出(input/output,I/O)设备。该设备可以将电子文件如图像、文字显示到屏幕上,以供用户查看。根据制造材料不同,显示器703可以分为液晶显示器(liquid crystal display,LCD)、有机电激光(organic light emitting diode,OLED)显示器等。具体地,显示器703可以接收用户输入或选择的多个子应用模块的标识,向所述用户呈现调试结果等等。
存储器704可以包括易失性存储器(volatile memory),例如随机存取存储器(random access memory,RAM)。存储器704还可以包括非易失性存储器(non-volatilememory),例如只读存储器(read-only memory,ROM),快闪存储器,机械硬盘(hard drivedrive,HDD)或固态硬盘(solid state drive,SSD)。
存储器704中存储有可执行的程序代码,处理器702执行该可执行的程序代码以实现前述应用调试系统100的功能,或者执行前述实施例描述的应用调试方法。具体地,处理器702执行上述程序代码,以控制显示器703通过GUI接收用户选择的多个子应用模块的标识,或者通过CUI接收用户输入的多个子应用模块的标识,然后显示器703通过总线701向处理器702传输用户选择的或输入的多个子应用模块的标识,处理器702根据多个子应用模块的标识对多个子应用模块的代码块进行调试,控制显示器703向用户呈现调试结果。
在一些可能的实现方式中,处理器702还可以控制其他接口接收多个子应用模块的标识。其中,其他接口可以是麦克风等。具体地,麦克风可以接收以语音形式表示的子应用模块的标识。
在一些可能的实现方式中,处理器702还可以执行上述方法实施例所提供的任意一种实现方式对应的方法步骤,在此不再赘述。
本申请实施例还提供了一种计算机可读存储介质。所述计算机可读存储介质可以是计算设备能够存储的任何可用介质或者是包含一个或多个可用介质的数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘)等。该计算机可读存储介质包括指令,所述指令指示计算设备执行上述应用于应用调试系统100的应用调试方法。
本申请实施例还提供了一种计算机程序产品。所述计算机程序产品包括一个或多个计算机指令。在计算设备上加载和执行所述计算机指令时,全部或部分地产生按照本申请实施例所述的流程或功能。
所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机或数据中心进行传输。
所述计算机程序产品可以为一个软件安装包,在需要使用前述应用调试方法的任一方法的情况下,可以下载该计算机程序产品并在计算设备上执行该计算机程序产品。
上述各个附图对应的流程或结构的描述各有侧重,某个流程或结构中没有详述的部分,可以参见其他流程或结构的相关描述。
Claims (32)
1.一种应用调试方法,其特征在于,待调试的应用部署在生产环境,所述应用在所述生产环境中运行以提供服务,所述方法包括:
接收用户输入或选择的多个子应用模块的标识,其中,每个子应用模块包括的代码块用于实现所述应用的功能;
根据所述多个子应用模块的标识,对所述多个子应用模块的代码块进行调试;
向所述用户呈现调试结果。
2.根据权利要求1所述的方法,其特征在于,所述向所述用户呈现调试结果,包括:
通过图形用户界面GUI向所述用户呈现所述应用的调试进度图,其中,所述调试进度图包括以下信息中的一种或多种:已调试的子应用模块、正在进行调试的子应用模块、调试报错的子应用模块、调试报错的提醒信息、调试报错类型、子应用模块的请求/响应流。
3.根据权利要求1或2所述的方法,其特征在于,所述向所述用户呈现调试结果,包括:
向所述用户呈现被调试的子应用模块在调试过程中的栈信息和/或变量。
4.根据权利要求1至3任一项所述的方法,其特征在于,所述接收用户输入或选择的多个子应用模块的标识,包括:接收用户通过图形用户界面GUI选择的所述多个子应用模块的标识,或者,接收用户通过命令用户界面CUI输入的所述多个子应用模块的标识。
5.根据权利要求1至4任一项所述的方法,其特征在于,在接收用户输入或选择的多个子应用模块的标识之前,所述方法还包括:
通过用户界面向所述用户呈现所述应用的子应用模块列表,和/或,通过用户界面向所述用户呈现所述应用的子应用模块的拓扑图。
6.根据权利要求1至5任一项所述的方法,其特征在于,所述方法还包括:
构建所述应用的子应用模块的拓扑图,所述子应用模块的拓扑图表示所述应用的各个子应用模块之间的调用关系。
7.根据权利要求1至6任一项所述的方法,其特征在于,所述方法还包括:
调整所述应用的子应用模块的拓扑图;
向所述用户呈现调整后的所述子应用模块的拓扑图。
8.根据权利要求1至7任一项所述的方法,其特征在于,所述应用的每个子应用模块对应一个代理,每个子应用模块的代理用于接收调试指令,并根据调试指令启动对对应的子应用模块中的代码块的调试。
9.根据权利要求8所述的方法,其特征在于,所述对所述多个子应用模块中的代码块进行调试,包括:
根据所述多个子应用模块的标识,生成多个调试指令;
根据所述多个调试指令,与待调试的多个子应用模块的多个代理建立多个调试会话;
获取每个待调试的子应用模块的代理的调试响应,所述调试响应用于生成所述调试结果。
10.根据权利要求8或9所述的方法,其特征在于,每个代理启动的调试为对应的子应用模块的运行进程中的一个独立线程。
11.根据权利要求9所述的方法,其特征在于,所述生产环境中包括至少一个节点,每个节点中部署所述应用的一个或多个子应用模块,所述根据所述多个调试指令,与待调试的多个子应用模块中的多个代理建立多个调试会话,包括:
将每个调试指令路由至每个待调试的子应用模块所在节点的节点代理,进而由所述节点代理将每个调试指令路由至每个待调试的子应用模块对应的代理。
12.根据权利要求11所述的方法,其特征在于,每个子应用模块对应的代理和每个节点的节点代理为与所述应用同时部署在所述生产环境的代码块。
13.根据权利要求1至12任一项所述的方法,其特征在于,所述应用的每个子应用模块运行在独立的容器中,容器中运行的子应用模块之间通过容器的接口进行交互。
14.根据权利要求8至13任一项所述的方法,其特征在于,所述多个子应用模块中包括不同编程语言编写的代码块,每个调试指令被封装为调试消息路由至所述待调试的子应用模块对应的代理;每个子应用模块对应的代理用于将所述调试消息转换为子应用模块的编程语言对应的调试消息。
15.一种应用调试方法,其特征在于,待调试的应用部署在生产环境,所述应用的子应用模块在所述生产环境中运行以提供服务,所述方法包括:
通过图形用户界面GUI向用户呈现所述应用的子应用模块列表和/或所述子应用模块的拓扑图,其中,所述子应用模块列表和/或所述子应用模块的拓扑图用于供所述用户选择多个待调试的子应用模块;
根据所述用户在所述GUI上的调试选择操作,向所述用户呈现对所述用户选择的多个子应用模块的调试结果。
16.一种呈现应用调试结果的方法,其特征在于,待调试的应用部署在生产环境,所述应用的子应用模块在所述生产环境中运行以提供服务,所述方法包括:
通过图形用户界面GUI接收用户的调试选择操作;
在所述GUI上向所述用户呈现所述应用的调试进度图,其中,所述调试进度图表示应用调试系统对所述用户选择的一个或多个子应用模块的调试进度;所述调试进度图中包括以下信息中的一种或多种:已调试的子应用模块、正在进行调试的子应用模块、调试报错的子应用模块、调试报错的提醒信息、调试报错类型、子应用模块的请求/响应流。
17.一种应用调试系统,其特征在于,待调试的应用部署在生产环境,所述应用在所述生产环境中运行以提供服务,所述应用调试系统包括:
交互模块,用于接收用户输入或选择的多个子应用模块的标识,其中,每个子应用模块包括的代码块用于实现所述应用的功能;
调试模块,用于根据所述多个子应用模块的标识,对所述多个子应用模块的代码块进行调试;
所述交互模块,还用于向所述用户呈现调试结果。
18.根据权利要求17所述的系统,其特征在于,所述交互模块用于:
通过图形用户界面GUI向所述用户呈现所述应用的调试进度图,其中,所述调试进度图包括以下信息中的一种或多种:已调试的子应用模块、正在进行调试的子应用模块、调试报错的子应用模块、调试报错的提醒信息、调试报错类型、子应用模块的请求/响应流。
19.根据权利要求17或18所述的系统,其特征在于,所述交互模块用于:
向所述用户呈现被调试的子应用模块在调试过程中的栈信息和/或变量。
20.根据权利要求17至19任一项所述的系统,其特征在于,所述交互模块具体用于:
接收用户通过图形用户界面GUI选择的所述多个子应用模块的标识,或者,接收用户通过命令用户界面CUI输入的所述多个子应用模块的标识。
21.根据权利要求17至20任一项所述的系统,其特征在于,所述交互模块还用于:
在接收用户输入或选择的多个子应用模块的标识之前,通过用户界面向所述用户呈现所述应用的子应用模块列表,和/或,通过用户界面向所述用户呈现所述应用的子应用模块的拓扑图。
22.根据权利要求17至21任一项所述的系统,其特征在于,所述交互模块还用于:
构建所述应用的子应用模块的拓扑图,所述子应用模块的拓扑图表示所述应用的各个子应用模块之间的调用关系。
23.根据权利要求17至22任一项所述的系统,其特征在于,所述交互模块还用于:
调整所述应用的子应用模块的拓扑图;
向所述用户呈现调整后的所述子应用模块的拓扑图。
24.根据权利要求17至23任一项所述的系统,其特征在于,所述应用的每个子应用模块对应一个代理,每个子应用模块的代理用于接收调试指令,并根据调试指令启动对对应的子应用模块中的代码块的调试。
25.根据权利要求24所述的系统,其特征在于,所述交互模块还用于:根据所述多个子应用模块的标识,生成多个调试指令;
所述调试模块具体用于:根据所述多个调试指令,与待调试的多个子应用模块中的多个代理建立多个调试会话;获取每个待调试的子应用模块的代理的调试响应,所述调试响应用于生成所述调试结果。
26.根据权利要求24或25所述的系统,其特征在于,每个代理启动的调试为对应的子应用模块的运行进程中的一个独立线程。
27.根据权利要求25所述的系统,其特征在于,所述生产环境中包括至少一个节点,每个节点中部署所述应用的一个或多个子应用模块,所述调试模块具体用于:
将每个调试指令路由至每个待调试的子应用模块所在节点的节点代理,进而由所述节点代理将每个调试指令路由至每个待调试的子应用模块对应的代理。
28.根据权利要求27所述的系统,其特征在于,每个子应用模块对应的代理和每个节点的节点代理为与所述应用同时部署在所述生产环境的代码块。
29.根据权利要求17至28任一项所述的系统,其特征在于,所述应用的每个子应用模块运行在独立的容器中,容器中运行的子应用模块之间通过容器的接口进行交互。
30.根据权利要求24至29任一项所述的系统,其特征在于,所述多个子应用模块中包括不同编程语言编写的代码块,每个调试指令被封装为调试消息路由至所述待调试的子应用模块对应的代理;每个子应用模块对应的代理用于将所述调试消息转换为子应用模块的编程语言对应的调试消息。
31.一种计算设备,其特征在于,所述计算设备包括处理器、存储器和显示器;
所述处理器用于执行所述存储器中存储的指令,以使得所述计算设备执行如权利要求1至16中任一项所述的方法。
32.一种计算机可读存储介质,其特征在于,包括计算机程序指令,当所述计算机程序指令由计算设备执行时,所述计算设备执行如权利要求1至16中任一项所述的方法。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
EP21812877.5A EP4148585A4 (en) | 2020-05-26 | 2021-04-30 | METHOD AND SYSTEM FOR APPLICATION ERROR ELIMINATION AS WELL AS DEVICE AND MEDIUM |
PCT/CN2021/091752 WO2021238592A1 (zh) | 2020-05-26 | 2021-04-30 | 一种应用调试方法、系统、设备及介质 |
US17/993,619 US20230092858A1 (en) | 2020-05-26 | 2022-11-23 | Application Debugging Method and System, Device, and Medium |
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2020104561227 | 2020-05-26 | ||
CN202010456122 | 2020-05-26 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113722204A true CN113722204A (zh) | 2021-11-30 |
Family
ID=78672240
Family Applications (4)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010819208.1A Pending CN113722204A (zh) | 2020-05-26 | 2020-08-14 | 一种应用调试方法、系统、设备及介质 |
CN202010837046.4A Pending CN113722116A (zh) | 2020-05-26 | 2020-08-19 | 一种调试消息的传输方法、装置、设备及介质 |
CN202010858123.4A Pending CN113726834A (zh) | 2020-05-26 | 2020-08-24 | 消息路由的方法、装置、系统、设备及介质 |
CN202010940931.5A Pending CN113722205A (zh) | 2020-05-26 | 2020-09-09 | 一种应用调试方法、装置、设备及介质 |
Family Applications After (3)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010837046.4A Pending CN113722116A (zh) | 2020-05-26 | 2020-08-19 | 一种调试消息的传输方法、装置、设备及介质 |
CN202010858123.4A Pending CN113726834A (zh) | 2020-05-26 | 2020-08-24 | 消息路由的方法、装置、系统、设备及介质 |
CN202010940931.5A Pending CN113722205A (zh) | 2020-05-26 | 2020-09-09 | 一种应用调试方法、装置、设备及介质 |
Country Status (4)
Country | Link |
---|---|
US (2) | US20230087995A1 (zh) |
EP (2) | EP4148585A4 (zh) |
CN (4) | CN113722204A (zh) |
WO (2) | WO2021238592A1 (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116185882A (zh) * | 2023-04-28 | 2023-05-30 | 深圳鸿芯微纳技术有限公司 | 软件调试方法、装置、设备及存储介质 |
WO2024012101A1 (zh) * | 2022-07-13 | 2024-01-18 | 华为云计算技术有限公司 | 分布式服务生成方法、系统、计算设备及存储介质 |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115242771B (zh) * | 2022-09-19 | 2023-01-31 | 武汉海微科技有限公司 | 设备调试方法、装置、设备及存储介质 |
Family Cites Families (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020199173A1 (en) * | 2001-01-29 | 2002-12-26 | Matt Bowen | System, method and article of manufacture for a debugger capable of operating across multiple threads and lock domains |
US6941492B1 (en) * | 2002-02-05 | 2005-09-06 | Emc Corporation | Debugging tool for efficient switching between targets in a multi-processor environment |
US7669186B2 (en) * | 2005-11-16 | 2010-02-23 | Sun Microsystems, Inc. | Debugging applications at resource constrained virtual machines using dynamically installable lightweight agents |
US7739553B2 (en) * | 2007-05-31 | 2010-06-15 | Microsoft Corporation | System crash analysis using path tracing technologies |
CN102143523B (zh) * | 2010-11-18 | 2014-06-25 | 华为技术有限公司 | 基于业务递送平台的应用测试方法和业务递送平台 |
US9064049B2 (en) * | 2010-12-14 | 2015-06-23 | Microsoft Technology Licensing, Llc | Remote debugging of server side code without blocking or high-level privileges |
CN102222043B (zh) * | 2011-07-08 | 2015-06-17 | 华为软件技术有限公司 | 一种测试方法和测试装置 |
CN103853147B (zh) * | 2012-12-06 | 2016-04-20 | 中国科学院软件研究所 | 一种嵌入式系统的在线调试系统 |
US9098636B2 (en) * | 2013-12-18 | 2015-08-04 | Software Ag | White-box testing systems and/or methods in web applications |
US20160239162A1 (en) * | 2015-02-16 | 2016-08-18 | Hcl Technologies Ltd. | System and Method for Determining Distances Among User Interface Elements |
CN107977304B (zh) * | 2016-10-24 | 2021-05-25 | 北京京东尚科信息技术有限公司 | 一种系统调试方法和装置 |
CN108734033B (zh) * | 2017-04-14 | 2020-12-22 | 北京京东尚科信息技术有限公司 | 一种实现系统间安全交互的方法和装置 |
US10783055B2 (en) * | 2018-01-08 | 2020-09-22 | Ozcode Ltd. | Time travel source code debugger incorporating live coding ability |
CN110297749B (zh) * | 2018-03-22 | 2022-12-13 | 福建天泉教育科技有限公司 | 一种测试新功能的方法及终端 |
CN108920366B (zh) * | 2018-06-28 | 2020-09-29 | 腾讯科技(深圳)有限公司 | 一种子应用调试方法、装置及系统 |
CN109343878A (zh) * | 2018-09-19 | 2019-02-15 | 北京英视睿达科技有限公司 | 一种代码部署方法 |
CN110489297B (zh) * | 2019-08-26 | 2023-07-25 | 山东浪潮科学研究院有限公司 | 一种基于图形界面的fpga调试信号设置方法 |
-
2020
- 2020-08-14 CN CN202010819208.1A patent/CN113722204A/zh active Pending
- 2020-08-19 CN CN202010837046.4A patent/CN113722116A/zh active Pending
- 2020-08-24 CN CN202010858123.4A patent/CN113726834A/zh active Pending
- 2020-09-09 CN CN202010940931.5A patent/CN113722205A/zh active Pending
-
2021
- 2021-04-30 EP EP21812877.5A patent/EP4148585A4/en active Pending
- 2021-04-30 WO PCT/CN2021/091752 patent/WO2021238592A1/zh unknown
- 2021-06-15 EP EP21813031.8A patent/EP4148586A4/en active Pending
- 2021-06-15 WO PCT/CN2021/100195 patent/WO2021239157A1/zh unknown
-
2022
- 2022-11-23 US US17/993,624 patent/US20230087995A1/en active Pending
- 2022-11-23 US US17/993,619 patent/US20230092858A1/en active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2024012101A1 (zh) * | 2022-07-13 | 2024-01-18 | 华为云计算技术有限公司 | 分布式服务生成方法、系统、计算设备及存储介质 |
CN116185882A (zh) * | 2023-04-28 | 2023-05-30 | 深圳鸿芯微纳技术有限公司 | 软件调试方法、装置、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN113726834A (zh) | 2021-11-30 |
CN113722205A (zh) | 2021-11-30 |
WO2021238592A1 (zh) | 2021-12-02 |
EP4148585A1 (en) | 2023-03-15 |
EP4148586A4 (en) | 2024-01-24 |
CN113722116A (zh) | 2021-11-30 |
US20230087995A1 (en) | 2023-03-23 |
WO2021239157A1 (zh) | 2021-12-02 |
US20230092858A1 (en) | 2023-03-23 |
EP4148586A1 (en) | 2023-03-15 |
EP4148585A4 (en) | 2023-10-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107979508B (zh) | 微服务测试方法及装置 | |
US10990369B2 (en) | Repurposing serverless application copies | |
WO2021238592A1 (zh) | 一种应用调试方法、系统、设备及介质 | |
US9703677B2 (en) | Code coverage plugin | |
US8756577B2 (en) | Collaborative software debugging in a distributed system with private debug sessions | |
US8438418B2 (en) | Simplifying automated software maintenance of data centers | |
CN110096424B (zh) | 测试的处理方法、装置、电子设备及存储介质 | |
WO2016177124A1 (zh) | 一种实现持续集成测试的方法及装置 | |
US20230236809A1 (en) | Ios application program construction method and apparatus, electronic device, and storage medium | |
US9792198B2 (en) | Debugger with method restart capability | |
US9009673B2 (en) | Collaborative software debugging in a distributed system with collaborative step over operation | |
US20120102466A1 (en) | Collaborative Software Debugging In A Distributed System With Graphic Representation Of Source Code Ownership Assignments | |
CN111740948B (zh) | 数据包发布方法、动态更新方法、装置、设备及介质 | |
CN109460268B (zh) | 应用参数配置方法、装置和系统 | |
CN111026634A (zh) | 一种接口自动化测试系统、方法、装置及存储介质 | |
CN110659198A (zh) | 应用程序的测试用例执行方法、装置和软件测试系统 | |
CN112769706B (zh) | 组件化路由方法及系统 | |
US20080115109A1 (en) | Enhanced Hover Help For Software Debuggers | |
US9892022B2 (en) | Apparatus for minimally intrusive debugging of production user interface software | |
CN113377468A (zh) | 一种脚本执行方法、装置、电子设备及存储介质 | |
US20240086157A1 (en) | Visual generation of software deployment pipelines using recommendations of development and operations blueprints | |
CN113032004A (zh) | 在开发环境中管理开发作业的方法、设备和程序产品 | |
CN113626007B (zh) | 连接器模型的应用方法、装置及服务器 | |
CN112181802A (zh) | 测试方法及装置 | |
CN115061900A (zh) | 一种本地调试离线包的方法、系统、设备及介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
TA01 | Transfer of patent application right | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20220216 Address after: 550025 Huawei cloud data center, jiaoxinggong Road, Qianzhong Avenue, Gui'an New District, Guiyang City, Guizhou Province Applicant after: Huawei Cloud Computing Technology Co.,Ltd. Address before: 518129 Bantian HUAWEI headquarters office building, Longgang District, Guangdong, Shenzhen Applicant before: HUAWEI TECHNOLOGIES Co.,Ltd. |
|
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |