CN113722205A - 一种应用调试方法、装置、设备及介质 - Google Patents
一种应用调试方法、装置、设备及介质 Download PDFInfo
- Publication number
- CN113722205A CN113722205A CN202010940931.5A CN202010940931A CN113722205A CN 113722205 A CN113722205 A CN 113722205A CN 202010940931 A CN202010940931 A CN 202010940931A CN 113722205 A CN113722205 A CN 113722205A
- Authority
- CN
- China
- Prior art keywords
- debugging
- debug
- sub
- application
- request messages
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Software Systems (AREA)
- Debugging And Monitoring (AREA)
- Stored Programmes (AREA)
Abstract
本申请提供了一种应用调试方法,应用于应用调试系统,应用调试系统用于对应用的子应用模块进行代码调试,应用调试系统包括交互子系统和路由子系统,该方法包括:交互子系统接收用户输入或选择的多个子应用模块的标识,然后创建与上述多个子应用模块一一对应的调试会话,接着根据多个调试会话生成多个调试请求消息。每个调试请求消息被路由子系统路由至请求调试的子应用模块的代理,以用于请求调试对应的子应用模块的代码块。由此实现同时对多个子应用模块进行调试,提高了调试效率。
Description
本申请要求于2020年05月26日提交中国国家知识产权局、申请号为202010456122.7、申请名称为“一种应用调试方法、装置、设备及介质”的中国专利申请的优先权,其全部内容通过引用结合在本申请中。
技术领域
本申请涉及应用开发技术领域,尤其涉及一种应用调试方法、装置、设备以及计算机可读存储介质。
背景技术
应用是针对用户的某种特殊应用目的所编写的计算机程序的集合。应用从立项到交付给客户,通常会经历开发、测试、上线等多个阶段。其中,在开发、测试、上线的各个阶段往往会配置相应的环境,例如开发环境(development environment)、测试环境(testingenvironment)、生产环境(production environment)。
开发人员常需要对应用进行调试,应用的调试包括利用人工或者编译的方式检测出应用的程序代码中的错误,进而可以根据调试过程中发现的错误对程序代码进行修正。
现有调试方法的调试效率普遍较低,难以满足业务需求。如何对应用进行高效的调试成为了业界重点关注的问题。
发明内容
本申请提供了一种应用调试方法。该方法支持同时对应用的多个子应用模块进行调试,提高了调试效率。本申请还提供了调试请求消息的处理方法以及上述方法对应的装置、设备、计算机可读存储介质以及计算机程序产品。
第一方面,本申请提供了一种应用调试方法。该方法可以由应用调试系统执行。应用调试系统用于对应用的子应用模块进行代码调试。应用通常包括多个子应用模块。子应用模块是指通过计算机可执行的代码块实现一种或多种功能的功能模块,子应用模块可以是一个或者多个源代码文件。该子应用模块可以在生产环境中运行从而提供服务。在一些实施例中,子应用模块也可以是一个或多个微服务。微服务在生产环境中运行,从而提供相应的服务。
该应用调试系统包括路由子系统和至少一个交互子系统。应用调试系统可以支持一个或多个用户通过各自的交互子系统对应用的子应用模块进行代码调试。为了便于描述,本申请实施例以一个用户通过至少一个交互子系统中的一个交互子系统,对应用进行代码调试的过程进行示例说明。
具体地,交互子系统接收用户输入或选择的多个子应用模块的标识,其中,每个子应用模块包括的代码块用于实现应用的功能,然后交互子系统创建多个调试会话,这多个调试会话与请求调试的多个子应用模块一一对应,接着交互子系统根据多个调试会话对应的调试会话标识生成多个调试请求消息。这多个调试请求消息被路由子系统路由至请求调试的子应用模块的代理(agent),以用于请求调试对应的子应用模块的代码块。
其中,调试会话(debug session)具体是用于调试子应用模块的会话。调试会话与被调试的子应用模块一一对应。每个调试会话具有唯一的调试会话标识(debug sessionID),通过在调试请求消息中携带调试会话标识,可以将调试请求消息与调试会话的两端如子应用模块和交互子系统建立联系。如此,可以使得每个调试请求消息以及针对该调试请求消息的调试响应消息在该调试会话的两端进行传输,而不会传输至其他的子应用模块或者交互子系统。由此实现同时对多个子应用模块进行调试,提高了调试效率。
每个子应用模块对应的agent为与应用同时部署在生产环境的代码块。该代码块在运行时用于代理子应用模块与外部交互,以及对该子应用模块的调试。其中,子应用模块(如微服务)在运行时产生一个进程,子应用模块的agent在运行时实质上相当于寄宿在该进程中的独立线程。路由子系统将用户对不同子应用模块进行调试产生的调试请求消息分别路由至对应的子应用模块的agent,agent根据调试请求消息启动对子应用模块的调试。应用调试系统调试应用的子应用模块时,不会阻塞上述进程,直接通过寄宿在上述进程的线程进行交互,如此可以实现在生产环境直接对应用的子应用模块进行调试,进一步提高了调试效率。
在一些可能的实现方式中,交互子系统根据多个子应用模块的标识生成多个原始调试请求消息,然后交互子系统在所述多个原始调试请求消息中添加请求调试的子应用模块对应的调试会话标识,得到多个调试请求消息。由此可以实现将多个调试请求消息分别路由至请求调试的子应用模块的agent,以便各个agent根据调试请求消息启动对相应子应用模块的调试,提高调试效率。
在一些可能的实现方式中,交互子系统还可以创建全局调试会话。全局调试会话的两端分别为交互子系统和被调试的应用(例如是应用的多个子应用模块)。全局调试会话与子应用模块对应的调试会话的区别在于,一个全局调试会话与一次调试启动操作请求调试的多个子应用模块对应,而一个调试会话与请求调试的一个子应用模块对应,故一个全局调试会话通常对应多个调试会话。该全局调试会话可以用于对一次调试启动操作请求调试的多个子应用模块的调试消息进行管理,如对多个调试响应消息进行筛选、汇聚。
全局调试会话具有唯一的标识,该标识称为全局调试会话标识。基于此,交互子系统可以在多个原始调试请求消息中添加请求调试的子应用模块对应的调试会话标识以及全局调试会话标识,生成多个调试请求消息。
由于多个调试请求消息中还携带有全局调试会话标识,因此,子应用模块的代理也可以在调试响应消息中携带上述全局调试会话标识。如此,交互子系统在接收到调试响应消息时,还可以根据全局调试会话标识对多个调试响应消息进行筛选、汇聚,具体是对不同调试启动操作对应的调试响应消息进行筛选、汇聚。交互子系统可以根据筛选、汇聚后的结果生成子应用模块的拓扑图和/或调试请求响应流图,向用户呈现上述拓扑图和/或请求响应流图,以便用户查看调试进度。
在一些可能的实现方式中,交互子系统还可以接收多个调试响应消息,这多个调试响应消息与交互子系统发送的多个调试请求消息一一对应。基于这多个调试响应消息可以实现对多个子应用模块的调试,提高调试效率。
在一些可能的实现方式中,交互子系统还可以在向所述路由子系统发送所述多个调试请求消息之前,建立与所述路由子系统的长连接。通过该长连接,可以多次传输调试请求消息,避免多次建立连接导致资源浪费。
在一些可能的实现方式中,交互子系统还可以在长连接建立失败时,丢弃已接收的调试请求消息,例如可以是已接收的原始调试请求消息。具体地,交互子系统在和路由子系统建立长连接时所获得的调试请求消息(如原始调试请求消息)可以存储在专用的队列,如调试请求队列中。当长连接建立成功时,交互子系统针对原始调试请求消息请求调试的子应用模块创建调试会话。当长连接建立失败时,交互子系统可以丢弃队列中已接收的原始调试请消息,拒绝创建相应的调试会话。由此避免不必要的资源浪费,减少资源开销。
在一些可能的实现方式中,交互子系统还可以在当前没有任意一个调试会话,例如交互子系统创建的多个调试会话关闭时,断开与所述路由子系统的长连接。如此避免网络资源闲置,提高资源利用率。
第二方面,本申请提供了一种调试请求消息的处理方法。该方法可以由交互子系统中的调试适配器(debug adapter)执行。调试适配器实质上是一段程序代码。该程序代码可以插件形式提供给用户,用户可以在交互子系统中的交互模块如集成开发环境(integrated development environment,IDE)中安装上述插件。该插件被执行时产生一个独立于IDE和编程语言框架的服务进程。debug adapter这一服务进程作为IDE和路由子系统的中间层,用于监听来自于IDE的调试启动操作,并与路由子系统建立长连接,例如websocket连接。该长连接可以用于传输调试消息,例如调试请求消息。
具体地,调试适配器接收多个原始调试请求消息,每个原始调试请求消息用于请求调试应用的一个子应用模块,每个子应用模块包括的代码块用于实现所述应用的功能,然后调试适配器创建多个调试会话,多个调试会话与请求调试的多个子应用模块一一对应,接着调试适配器根据所述多个调试会话对应的调试会话标识和所述多个原始调试请求消息生成多个调试请求消息,并发送所述多个调试请求消息。
通过该方法,可以实现同时对应用的多个子应用模块进行调试,提高了调试效率,满足了业务的需求。
在一些可能的实现方式中,调试适配器可以通过在多个原始调试请求消息中添加请求调试的子应用模块对应的调试会话标识的方式,得到多个调试请求消息。由此可以实现将多个调试请求消息分别路由至请求调试的子应用模块的agent,以便各个agent根据调试请求消息启动对相应子应用模块的调试,提高调试效率。
在一些可能的实现方式中,调试适配器还可以创建全局调试会话。该全局调试会话与所述多个调试会话对应。对应地,调试适配器可以在所述多个原始调试请求消息中添加请求调试的子应用模块对应的调试会话标识以及全局调试会话标识,得到多个调试请求消息。子应用模块的代理接收到调试请求消息时,启动对相应子应用模块的代码调试,生成调试响应消息。该调试响应消息中携带全局调试会话标识。全局调试会话标识可以用于对多个调试响应消息进行筛选、汇聚,进而生成子应用模块的拓扑图和/或调试请求响应流图,以便用户查看调试进度。
在一些可能的实现方式中,调试适配器可以删除所述多个原始调试请求消息的标准消息头,并为所述多个原始调试请求消息添加更新的消息头。其中,更新的消息头包括请求调试的子应用模块对应的调试会话标识。如此,一方面可以保障调试请求消息能够被准确地路由至相应的子应用模块的代理,另一方面可以避免增加额外的传输开销。
在一些可能的实现方式中,调试适配器还可以接收多个调试响应消息。这多个调试响应消息与多个调试请求消息一一对应。基于这多个调试响应消息可以实现对多个子应用模块的调试,提高调试效率。
在一些可能的实现方式中,调试适配器还可以删除所述多个调试响应消息的消息头。其中,多个调试响应消息的消息头包括调试会话标识。并且,调试适配器为所述多个调试响应消息添加标准消息头。如此,一方面可以保障调试响应消息能够被交互模块如IDE识别,另一方面可以避免增加额外的传输开销。
在一些可能的实现方式中,调试适配器发送所述多个调试请求消息之前,还可以建立与路由子系统的长连接。其中,所述路由子系统用于路由所述调试请求消息至请求调试的子应用模块的代理。通过上述长连接,可以多次传输调试请求消息,避免多次建立连接导致资源浪费。
在一些可能的实现方式中,调试适配器还可以在所述长连接建立失败时,丢弃已接收的调试请求消息。例如,丢弃调试请求队列中的调试请求消息。由此避免不必要的资源浪费,减少资源开销。
在一些可能的实现方式中,调试适配器还可以在当前没有任意一个调试会话,例如调试适配器创建的多个调试会话关闭时,断开与所述路由子系统的长连接。如此避免网络资源闲置,提高资源利用率。
第三方面,本申请提供了一种交互子系统。应用调试系统用于对应用的子应用模块进行代码调试,应用调试系统包括路由子系统和交互子系统。所述交互子系统包括:
通信单元,用于接收用户输入或选择的多个子应用模块的标识,其中,每个子应用模块包括的代码块用于实现所述应用的功能;
创建单元,用于创建多个调试会话,所述多个调试会话与所述多个子应用模块一一对应;
生成单元,用于根据所述多个调试会话生成多个调试请求消息,每个调试请求消息被所述路由子系统路由至请求调试的子应用模块的代理,以用于请求调试对应的子应用模块的代码块。
在一些可能的实现方式中,每个调试会话包括调试会话标识,所述生成单元具体用于:
根据多个子应用模块的标识生成多个原始调试请求消息;
在所述多个原始调试请求消息中添加请求调试的子应用模块对应的调试会话标识,得到多个调试请求消息。
在一些可能的实现方式中,所述创建单元还用于:
创建全局调试会话,所述全局调试会话与所述多个调试会话对应;
所述生成单元具体用于:
在所述多个原始调试请求消息中添加请求调试的子应用模块对应的调试会话标识以及全局调试会话标识,生成多个调试请求消息。
在一些可能的实现方式中,所述通信单元还用于:
接收多个调试响应消息,所述多个调试响应消息与所述多个调试请求消息一一对应。
在一些可能的实现方式中,所述子系统还包括:
处理单元,用于在向所述路由子系统发送所述多个调试请求消息之前,建立与所述路由子系统的长连接。
在一些可能的实现方式中,所述处理单元还用于:
当所述长连接建立失败时,丢弃已接收的调试请求消息。
在一些可能的实现方式中,所述子系统还包括:
处理单元,用于当所述多个调试会话关闭时,断开与所述路由子系统的长连接。
第四方面,本申请提供了一种调试请求消息的处理装置。所述装置包括:
通信单元,用于接收多个原始调试请求消息,每个原始调试请求消息用于请求调试应用的一个子应用模块,每个子应用模块包括的代码块用于实现所述应用的功能;
创建单元,用于创建多个调试会话,所述多个调试会话与请求调试的多个子应用模块一一对应;
生成单元,用于根据所述多个调试会话对应的调试会话标识和所述多个原始调试请求消息生成多个调试请求消息;
所述通信单元,还用于发送所述多个调试请求消息。
在一些可能的实现方式中,所述生成单元具体用于:
在所述多个原始调试请求消息中添加请求调试的子应用模块对应的调试会话标识,得到多个调试请求消息。
在一些可能的实现方式中,所述创建单元还用于:
创建全局调试会话,所述全局调试会话与所述多个调试会话对应;
所述生成单元具体用于:
在所述多个原始调试请求消息中添加请求调试的子应用模块对应的调试会话标识以及全局调试会话标识,得到多个调试请求消息。
在一些可能的实现方式中,所述生成单元具体用于:
删除所述多个原始调试请求消息的标准消息头;
为所述多个原始调试请求消息添加更新的消息头,所述更新的消息头包括请求调试的子应用模块对应的调试会话标识。
在一些可能的实现方式中,所述通信单元还用于:
接收多个调试响应消息,所述多个调试响应消息与所述多个调试请求消息一一对应。
在一些可能的实现方式中,所述生成单元具体用于:
删除所述多个调试响应消息的消息头,所述调试响应消息的消息头包括调试会话标识;
为所述多个调试响应消息添加标准消息头。
在一些可能的实现方式中,所述装置还包括:
处理单元,用于建立与路由子系统的长连接,所述路由子系统用于路由所述调试请求消息至请求调试的子应用模块的代理。
在一些可能的实现方式中,所述处理单元还用于:
当所述长连接建立失败时,丢弃已接收的调试请求消息。
在一些可能的实现方式中,所述装置还包括:
处理单元,用于当所述多个调试会话关闭时,断开与路由子系统的连接。
第五方面,本申请提供一种设备,所述设备包括处理器和存储器。所述处理器、所述存储器进行相互的通信。所述处理器用于执行所述存储器中存储的指令,以使得设备执行如第一方面或第二方面的任一种实现方式中的方法。
第六方面,本申请提供一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,所述指令指示设备执行上述第一方面或第二方面的任一种实现方式中的方法。
第七方面,本申请提供了一种包含指令的计算机程序产品,当其在设备上运行时,使得设备执行上述第一方面或第二方面的任一种实现方式中的方法。
本申请在上述各方面提供的实现方式的基础上,还可以进行进一步组合以提供更多实现方式。
附图说明
为了更清楚地说明本申请实施例的技术方法,下面将对实施例中所需使用的附图作以简单地介绍。
图1为本申请实施例提供的一种应用调试方法的应用场景图;
图2A为本申请实施例提供的一种应用调试系统的系统架构图;
图2B为本申请实施例提供的一种应用调试系统的系统架构图;
图2C为本申请实施例提供的一种应用调试系统的系统架构图;
图3为本申请实施例提供的一种应用调试方法的流程图;
图4为本申请实施例提供的一种消息处理的示意图;
图5为本申请实施例提供的一种交互子系统的结构示意图;
图6为本申请实施例提供的一种调试请求消息的处理装置的结构示意图;
图7为本申请实施例提供的一种设备的结构示意图。
具体实施方式
本申请实施例中的术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征。
首先对本申请实施例中所涉及到的一些技术术语进行介绍。
应用(application,APP),是针对用户的某种特殊应用目的所编写的计算机程序的集合,具体可以是单一的应用程序或者多个应用程序的集合形成的应用软件。例如,在办公领域,应用可以是单一的文本编辑应用,也可以是文本编辑应用、表格编辑应用和图形编辑应用组成的应用。
应用通常包括多个子应用模块。子应用模块是指通过计算机可执行的代码块实现一种或多种功能的功能模块,子应用模块可以是一个或者多个源代码文件。该子应用模块可以在生产环境中运行从而提供服务。其中,生产环境是指正式提供服务的环境。生产环境中包括至少一个节点,该节点是指服务器、终端计算设备等具有计算能力的计算节点。
对于功能繁多的复杂应用,开发人员可以采用微服务架构(micro servicesarchitecture,MSA)进行开发,以提高开发效率。其中,微服务架构是指将应用的功能模块拆分成独立的微服务。微服务是一个或者一组相对较小且独立的功能单元的集合。微服务之间通过接口调用实现数据交互。如此,可以实现应用的各个功能模块的解耦。当应用需要新增功能、删除功能或者修改功能时,开发人员增加、删除或者修改相应的微服务即可。子应用模块也可以是一个或多个微服务。微服务在生产环境中运行,从而提供相应的服务。
考虑到不同的编程语言(技术栈)具有各自的优势,开发人员在开发应用时可以根据需求采用不同的编程语言开发应用的子应用模块。例如,开发人员可以通过C语言开发应用的一些子应用模块,采用Python语言开发应用的另一些子应用模块。
开发人员在利用编辑器(editor)或者集成开发环境(integrated developmentenvironment,IDE)等开发工具对应用的子应用模块进行调试时,为了实现对不同编程语言的子应用模块进行调试,需要为编辑器等开发工具编写单独的扩展或调试模块,以调用相应的调试器(debugger)。如此增加了编辑器的开发难度和开发成本,而且编辑器本身也变得比较庞大,对于硬件要求较高,影响了用户体验。
基于此,业界提出了调试适配协议(debug adapter protocol,DAP)。各编辑器可以通过相同的协议即DAP与不同编程语言的debugger通信,无需为编辑器编写针对不同编程语言的扩展或调试模块,降低了编辑器的开发难度、开发成本,而且可以实现轻量级的编辑器,提高了编辑器的可用性以及用户体验。
考虑到有些调试器不支持DAP,还可以针对调试器配置调试适配器(debugadapter)。editor、IDE等开发工具可以和调试器对应的调试适配器通信,实现对相应编程语言的子应用模块的调试。然而,基于DAP的调试方法通常仅支持同时对应用的一个子应用模块进行调试,调试效率较低。如何对应用进行高效的调试成为了业界重点关注的问题。
有鉴于此,本申请实施例提供了一种应用调试方法。该方法可以由应用调试系统执行。应用调试系统用于对应用的子应用模块进行代码调试。该应用调试系统包括路由子系统和至少一个交互子系统。本申请实施例的应用调试系统可以支持一个或多个用户通过各自的交互子系统对应用的子应用模块进行代码调试。
为了便于描述,本申请实施例以一个用户通过至少一个交互子系统中的一个交互子系统,对应用进行代码调试的过程进行示例说明。具体地,交互子系统接收用户输入或选择的多个子应用模块的标识,其中,每个子应用模块包括的代码块用于实现应用的功能,然后交互子系统创建多个调试会话,这多个调试会话与请求调试的多个子应用模块一一对应,接着交互子系统根据多个调试会话对应的调试会话标识生成多个调试请求消息。这多个调试请求消息被路由子系统路由至请求调试的子应用模块的代理(agent),以用于请求调试对应的子应用模块的代码块。
其中,调试会话(debug session)具体是用于调试子应用模块的会话。调试会话与被调试的子应用模块一一对应。每个调试会话具有唯一的调试会话标识(debug sessionID),通过在调试请求消息中携带调试会话标识,可以将调试请求消息与调试会话的两端如子应用模块和交互子系统建立联系。如此,可以使得每个调试请求消息以及针对该调试请求消息的调试响应消息在该调试会话的两端进行传输,而不会传输至其他的子应用模块或者交互子系统。由此实现同时对多个子应用模块进行调试,提高了调试效率。
每个子应用模块对应的agent为与应用同时部署在生产环境的代码块。该代码块在运行时用于代理子应用模块与外部交互,以及对该子应用模块的调试。其中,子应用模块(如微服务)在运行时产生一个进程,子应用模块的agent在运行时实质上相当于寄宿在该进程中的独立线程。路由子系统将用户对不同子应用模块进行调试产生的调试请求消息分别路由至对应的子应用模块的agent,agent根据调试请求消息启动对子应用模块的调试。应用调试系统调试应用的子应用模块时,不会阻塞上述进程,直接通过寄宿在上述进程的线程进行交互,如此可以实现在生产环境直接对应用的子应用模块进行调试,提高了调试效率。
为了使得本申请的技术方案更加清楚、易于理解,下面结合附图对本申请实施例提供应用调试方法的应用场景进行介绍。
如图1所示,应用调试系统100与数据中心300建立有通信通路,应用调试系统100用于对部署在数据中心300上的至少一个应用200进行调试。其中,数据中心300提供生产环境,应用200部署在生产环境中。应用200包括多个子应用模块,每个子应用模块包括的代码块用于实现应用200的功能。
应用200的子应用模块可以分布式地部署在数据中心300的至少一个节点上。例如,在图1的示例中,应用200的n个子应用模块分布式地部署于数据中心的k个节点(也称作主机),其中,k小于等于n。需要说明,子应用模块可以直接部署在节点,即部署在物理机中,也可以部署在节点上的虚拟机或容器中。应用200的每个子应用模块部署在独立的容器中时,容器中运行的子应用模块可以通过容器的接口进行交互。
每个子应用模块具有agent(子应用模块为微服务时,也称作微服务代理)。该agent可以通过代码注入的方式被创建。代码注入是一种向目标进程插入独立运行代码并使之运行的技术。代码注入一般可以配置环境变量(environment variables)实现。以Java平台为例,环境变量可以为JAVA_TOOL_OPTIONS,通过将环境变量赋值为待插入的代码文件的名称,例如export JAVA_TOOL_OPTIONS=“-agent-lib:hprof”,子应用模块(如微服务)的进程启动时,插入的代码文件中的代码被写入上述进程的虚拟内存空间,插入代码对应的线程也随着进程的启动而启动。作为宿主的进程未终止前,线程可以一直运行。
应用调试系统100包括路由子系统104和至少一个交互子系统102。下面从一个交互子系统102的角度对应用调试过程进行说明。交互子系统102可以接收用户输入或选择的多个子应用模块的标识,然后交互子系统102创建多个调试会话,多个调试会话与多个子应用模块一一对应,接着交互子系统102根据多个调试会话对应的调试会话标识生成多个调试请求消息。然后,交互子系统102向路由子系统104发送至多个调试请求消息,路由子系统104可以将多个调试请求消息分别路由至请求调试的子应用模块的agent。agent可以根据调试请求消息启动对对应的子应用模块的代码调试。
在一些可能的实现方式中,每个子应用模块所在节点具有节点代理。该节点代理也称作主机代理(host agent)。host agent为与应用200同时部署在生产环境的代码块。host agent用于转发来自于节点上的子应用模块的消息或者向节点上的子应用模块转发消息。host agent运行时可以产生一个进程。该进程对应的程序代码可以随着应用200的子应用模块包括的代码块部署到节点时被部署到节点。当节点上的子应用模块的进程启动时,host agent也随之启动。
基于此,路由子系统104在路由调试请求消息时,可以将多个调试请求消息先传输至请求调试的子应用模块所在节点的host agent,然后通过host agent将多个调试请求消息传输至请求调试的子应用模块对应的agent。
在一些可能的实现方式中,交互子系统102可以包括交互模块和调试适配器(debug adapter)。其中,交互模块用于提供用户界面,如图形用户界面(graphical userinterface,GUI)或命令用户界面(command user interface,CUI)等用户界面。用户可以通过上述用户界面进行调试操作。
例如,交互模块通过GUI向用户呈现应用200的子应用模块,用户可以通过GUI进行调试选择和调试启动操作。其中,调试选择包括选择调试的子应用模块。在一些实施例中,调试选择也可以包括调试类型,如断点调试、单步调试、变量跟踪等等。又例如,用户也可以通过CUI以命令的形式直接发送调试选择和调试启动操作。
交互模块可以是提供应用调试功能的集成开发环境(integrated developmentenvironment IDE)。该IDE不仅能够用于编辑应用200的程序代码,对开发过程中的程序代码进行调试,还能够对远程已上线的应用200进行调试。交互模块也可以是其他能够提供对已上线的应用200进行调试的功能的交互模块,例如加载有用于调试应用200的用户界面的浏览器或者专用于应用调试的交互模块。为了便于描述,后文以交互模块为IDE进行示例说明。
debug adapter实质上是一段程序代码。该程序代码可以插件形式提供给用户,用户可以在IDE中安装上述插件。该插件被执行时产生一个独立于IDE和编程语言框架的服务进程。debug adapter这一服务进程作为IDE和路由子系统的中间层,用于监听来自于IDE的调试启动操作,并与路由子系统建立长连接,例如websocket连接。该长连接可以用于传输调试消息,例如调试请求消息。
图1所示的应用调试系统100具有多种部署方式,接下来对应用调试系统100的部署方式进行详细说明。
在一些实现方式中,应用调试系统100的各个子系统可以分布式地部署于不同环境。例如,如图2A所示,交互子系统102可以部署在终端计算设备(例如台式机、笔记本电脑等用户终端)中,路由子系统104可以部署在云计算集群(包括至少一个云计算设备,例如云服务器等)中。
在图2A的场景中,交互模块可以为本地IDE。其中,本地也称作本地设备。本地设备包括处于用于用户直接控制之下的终端计算设备(例如台式机、笔记本电脑等用户终端)。本地IDE是指以客户端形式安装在本地设备的IDE。在一些示例中,本地IDE可以包括visualstudio、eclipse等等。debug adapter可以以插件的形式提供给用户,用户可以在本地IDE安装插件,从而对应用200进行调试。其中,IDE和debug adapter的安装包可以是同一厂商提供,也可以是不同厂商提供。
在另一些实现方式中,应用调试系统100的各个子系统也可以部署于相同环境。例如,如图2B所示,交互子系统102和路由子系统104可以部署在同一云计算集群中。该云计算集群可以为一个云服务提供商提供的公有云。交互模块可以为云化IDE(cloud IDE)。路由子系统104可以形成cloud debugger,用于提供云调试服务。
云服务提供商可以将cloud debugger和cloud IDE整合成一个云服务提供给用户使用,也可以分别提供cloud IDE和cloud debugger两个云服务供用户使用。在一些情况下,云服务提供商可以将cloud debugger作为cloud IDE的增值服务,用户购买或者租赁该增值服务后,云服务提供商将其结合在cloud IDE中提供给用户使用。
当然,如图2C所示,交互子系统102和路由子系统104也可以部署在不同云计算集群中。不同的云计算集群可以是不同的云服务提供商提供的公有云。不同云服务提供商分别提供cloud IDE和cloud debugger给用户使用。
进一步地,应用调试系统100调试的应用200既可以与交互子系统102和/或路由子系统104部署在相同或不同的云计算集群,也可以独立地部署在任何数据中心(例如用户自有的数据中心),前述图2A、图2B、图2C示例性地展示应用200部署在数据中心300的情况,并不构成对本申请技术方案的限定。
另外,图2A、图2B、图2C仅仅是示例性地展示了应用调试系统100部署在不同环境或者部署在相同环境的一些具体示例。在一些实现方式中,应用调试系统100的各个模块还可以部署于其他环境,例如交互模块、debug adapter可以部署于终端计算设备或者云计算设备,路由子系统104可以部署于边缘计算集群(包括至少一个边缘计算设备,例如边缘服务器)。
为了使得本申请的技术方案更加清楚、易于理解,下面从一个交互子系统102的角度,结合附图对本申请实施例提供的应用调试方法进行详细介绍。
参见图3所示的应用调试方法的流程图,该方法包括:
S302:交互子系统102接收用户输入或选择的多个子应用模块的标识。
交互子系统102(具体是交互模块)可以通过用户界面向用户呈现应用200的子应用模块列表和/或应用200的子应用模块的拓扑(topology)图。其中,子应用模块的拓扑图用于标识应用200的各个子应用模块之间的调用关系。用户可以通过上述用户界面(例如GUI)选择多个子应用模块,交互子系统102接收用户通过用户界面(例如GUI)选择的多个子应用模块的标识。
在一些可能的实现方式中,用户可以通过上述用户界面(例如CUI)直接输入多个子应用模块的标识,交互子系统102的交互模块接收用户通过用户界面(例如CUI)输入的多个子应用模块的标识,以对多个子应用模块进行调试。
每个子应用模块具有唯一的标识。不同子应用模块的标识是不同的。在一些实施例中,子应用模块的标识可以是子应用模块的名称、编号等等。以子应用模块为微服务为例,子应用模块的标识可以是微服务名称。
S304:交互子系统102创建多个调试会话。
交互子系统102中的debug adapter可以监听调试启动操作。当debug adapter监听到对多个子应用模块的调试启动操作时,可以创建多个与子应用模块一一对应的调试会话。
具体地,当用户通过交互子系统102的交互模块选择或输入多个子应用模块的标识,并启动对多个子应用模块的调试时,交互模块可以产生多个原始调试请求消息。所谓原始调试请求消息是指交互模块基于原生的DAP协议生成的、用于对子应用模块进行调试的请求消息。每个原始调试请求消息用于请求调试多个子应用模块中的一个子应用模块。不同原始调试请求消息请求调试的子应用模块不同。
debug adapter监听到多个原始调试请求消息,可以创建多个调试会话。多个调试会话与多个原始调试请求消息请求调试的多个子应用模块一一对应。其中,交互子系统102中的debug adapter在创建调试会话时,还可以先检测与该原始调试请求消息请求调试的子应用模块对应的调试会话是否存在,若否,则创建对应的调试会话,若是,则可以跳过创建调试会话的步骤。
在一些可能的实现方式中,交互子系统102中的debug adapter还可以维护一个调试请求队列,该调试请求队列专用于存储交互模块如IDE发送的原始调试请求消息。debugadapter可以从调试请求队列中依次读取原始调试请求消息,以执行创建相应的调试会话的步骤。
其中,调试会话具体是用于调试子应用模块的会话。调试会话与被调试的子应用模块一一对应。每个调试会话具有唯一的调试会话标识,通过在调试请求消息中携带调试会话标识,可以将调试请求消息与调试会话的两端如子应用模块和交互子系统建立联系。如此,可以使得每个调试请求消息以及针对该调试请求消息的调试响应消息在该调试会话的两端进行传输,而不会传输至其他的子应用模块或者交互子系统。
每个调试会话具有唯一性的标识,该标识称为调试会话标识(debug sessionID)。每个调试会话的两端对应于一个交互子系统(具体是交互模块,如IDE)和一个子应用模块(具体是子应用模块的agent)。因此,debug adapter可以根据交互子系统的标识(例如使用交互子系统的用户的标识,即用户标识)和子应用模块的标识(例如子应用模块所属资源的标识,即resource ID)生成debug session ID。
在一些示例中,debug adapter可以将交互子系统的用户标识和子应用模块所属资源的资源标识拼接生成debug session ID。进一步地,debug adapter还可以将交互子系统的用户标识和子应用模块所属资源的资源标识以及预留字段拼接生成debug sessionID。其中,预留字段可以是固定值,也可以是随机方式生成的随机数。
在一些可能的实现方式中,debug adapter也可以对多个debug session排序,将序号作为该debug session ID,或者debug adapter也可以生成随机数,作为debugsession ID。当debug adapter将序号或者随机数作为debug session ID时,debugadapter还可以将该debug session ID与对应的交互子系统的用户标识和子应用模块所属资源的资源标识进行关联。例如,debug adapter可以在debug session对象中存储debugsession ID以及对应的交互子系统的用户标识和子应用模块所属资源的资源标识。
S306:交互子系统102根据多个调试会话生成多个调试请求消息。
交互子系统102(具体是交互子系统102中的交互模块)可以根据多个子应用模块标识生成多个原始调试请求消息,然后交互模块可以向debug adapter发送多个原始调试请求消息,交互子系统102(具体是交互子系统102中的debug adapter)可以在多个原始调试请求消息中添加请求调试的子应用模块对应的调试会话标识,得到多个调试请求消息。
交互子系统102(具体是交互子系统102中的debug adapter)可以向路由子系统发送多个调试请求消息。路由子系统可以将多个调试请求消息分别路由至请求调试的子应用模块的代理。子应用模块的代理接收到调试请求消息,启动对子应用模块的代码调试,例如对子应用模块的代码块进行断点调试、单步执行、变量跟踪等等。子应用模块的代理还可以生成调试响应消息。该调试响应消息中可以携带调试会话标识,以便路由子系统可以根据调试会话标识将调试响应消息路由至对应的交互子系统。
在一些可能的实现方式中,交互子系统102(具体是交互子系统102中的debugadapter)还可以针对一次调试启动操作,创建一个全局调试会话。全局调试会话的两端分别为交互子系统102和被调试的应用200(例如是应用200的多个子应用模块)。全局调试会话与子应用模块对应的调试会话的区别在于,一个全局调试会话与一次调试启动操作请求调试的多个子应用模块对应,而一个调试会话与请求调试的一个子应用模块对应,故一个全局调试会话通常对应多个调试会话。该全局调试会话可以用于对一次调试启动操作请求调试的多个子应用模块的调试消息进行管理,例如对多个调试响应消息进行筛选、汇聚。
全局调试会话具有唯一的标识,该标识称为全局调试会话标识。基于此,交互子系统102(具体是交互子系统102中的debug adapter)可以在所述多个原始调试请求消息中添加请求调试的子应用模块对应的调试会话标识以及全局调试会话标识,生成多个调试请求消息。
由于多个调试请求消息中还携带有全局调试会话标识,因此,子应用模块的代理也可以在调试响应消息中携带上述全局调试会话标识。如此,交互子系统102在接收到调试响应消息时,还可以根据全局调试会话标识对多个调试响应消息进行筛选、汇聚,具体是对不同调试启动操作对应的调试响应消息进行筛选、汇聚。交互子系统102可以根据筛选、汇聚后的结果生成子应用模块的拓扑图和/或调试请求响应流图,向用户呈现上述拓扑图和/或请求响应流图。
考虑到原生DAP协议不支持资源标识,也不支持多调试会话,因此,原始调试请求消息中并不携带资源标识,也不携带调试会话标识。debug adapter可以在原始调试请求消息(也可以称为DAP消息)中添加包括资源标识、调试会话标识在内的元数据,生成调试请求消息。具体地,debug adapter可以在原始调试请求消息的消息头中添加上述元数据,得到调试请求消息。
在一些可能的实现方式中,元数据还可以包括全局会话标识,即global sessionID。如此,交互子系统还可以根据global session ID对子应用模块的代理返回的调试响应消息进行筛选、汇聚,由此生成请求响应流图,并在交互子系统中展示请求响应流图。
考虑到传输开销,交互子系统102(具体是交互子系统102中的debug adapter)还可以删除原始调试请求消息的标准消息头,并为多个原始调试请求消息添加更新的消息头,该更新的消息头中包括请求调试的子应用模块对应的调试会话标识,从而得到调试请求消息。其中,更新的消息头中还可以全局会话标识、资源标识中的至少一种。
进一步地,交互子系统102(具体是交互子系统102中的debug adapter)接收到多个调试响应消息时,还可以删除多个调试响应消息的消息头,该消息头中包括调试会话标识,并为多个调试响应消息添加标准消息头,如DAP消息头,得到处理后的调试响应消息。接着,debug adapter向交互模块如IDE返回处理后的调试响应消息。
为了便于理解,本申请还提供了一个示例对原始调试请求消息进行处理得到调试请求消息,以及对调试响应消息进行处理,得到处理后的调试响应消息进行说明。
参见图4,debug adapter接收到来自于IDE的原始调试请求消息后,可以删除该原始调试请求消息的DAP头,然后按照如下格式添加元数据,形成调试请求消息:
struct TDapWrapper{
1:string resource ID
2:string global session ID
3:string session ID
4:string dapJsonString
}
其中,resource ID表示资源标识,global session ID表示全局调试会话标识,session ID标识调试会话标识,dapJsonString表示消息内容。
如图4所示,当debug adapter接收到来自于IDE的原始调试请求消息时,删除原始调试请求消息的DAP头。在该示例中,原始调试请求消息的DAP头为:
Content-Length:107\r\n\r\n。
然后,debug adapter为原始调试请求消息添加元数据。具体地,debug adapter可以为原始调试请求消息添加更新的消息头,该更新的消息头携带resource ID、globalsession ID、session ID等元数据,从而得到调试请求消息。
当debug adapter接收到子应用模块的agent的调试响应消息时,可以删除调试响应消息中的元数据,具体是删除resource ID、global session ID、session ID,保留dapJsonString中的内容,然后为该内容添加一个DAP消息头,即Content-Length:107\r\n\r\n,得到处理后的调试响应消息。debug adapter向IDE返回处理后的调试响应消息。
基于上述内容描述,本申请实施例提供了一种应用调试方法。交互子系统102接收用户输入或选择的多个子应用模块的标识,然后交互子系统102创建多个调试会话,这多个调试会话与请求调试的多个子应用模块一一对应,接着交互子系统102根据多个调试会话对应的调试会话标识生成多个调试请求消息。这多个调试请求消息被路由子系统104路由至请求调试的子应用模块的代理,以用于请求调试对应的子应用模块的代码块。
调试请求消息中携带调试会话标识,可以将调试请求消息与调试会话的两端如子应用模块和交互子系统建立联系。如此,可以使得每个调试请求消息以及针对该调试请求消息的调试响应消息在该调试会话的两端进行传输,而不会传输至其他的子应用模块或者交互子系统。由此实现同时对多个子应用模块进行调试,提高了调试效率。
在图3所示实施例中,交互子系统102(具体是交互子系统102中的debug adapter)可以在传输多个调试请求消息之前,建立与路由子系统104的长连接。进一步地,为了避免资源浪费,debug adapter可以在没有任何调试会话时,例如多个调试会话均关闭时,将debug adapter与路由子系统的长连接断开。当debug adapter监听到新的调试启动操作,接收到新的原始调试请求消息时,再和路由子系统104建立长连接。
在一些可能的实现方式中,debug adapter可以在建立连接时,将接收到的原始调试请求消息添加至调试请求队列。当debug adapter与路由子系统104的长连接建立成功时,debug adapter针对调试请求队列中的每个原始调试请求消息创建对应的调试会话。当debug adapter与调试代理的长连接建立失败时,debug adapter可以丢弃所有排队的原始调试请求消息。进一步地,debug adapter还可以向交互模块如IDE返回提示消息,以提示连接建立失败。如此,交互模块可以重新和debug adapter建立长连接。
上文结合图1至图4对本申请实施例提供的应用调试方法进行了详细介绍,下面将结合附图对本申请实施例提供的装置、设备进行介绍。
参见图5所示的交互子系统102的结构示意图,该交互子系统102包括:
通信单元1022,用于接收用户输入或选择的多个子应用模块的标识,其中,每个子应用模块包括的代码块用于实现所述应用的功能;
创建单元1024,用于创建多个调试会话,所述多个调试会话与所述多个子应用模块一一对应;
生成单元1026,用于根据所述多个调试会话生成多个调试请求消息,每个调试请求消息被所述路由子系统路由至请求调试的子应用模块的代理,以用于请求调试对应的子应用模块的代码块。
其中,上述通信单元1022、创建单元1024以及生成单元1026可以是软件单元,这些软件单元可以部署在终端设备或者云设备中。当然,上述单元也可以是硬件单元。本申请实施例对此不作限定。
在一些可能的实现方式中,每个调试会话包括调试会话标识,所述生成单元1026具体用于:
根据多个子应用模块的标识生成多个原始调试请求消息;
在所述多个原始调试请求消息中添加请求调试的子应用模块对应的调试会话标识,得到多个调试请求消息。
在一些可能的实现方式中,所述创建单元1024还用于:
创建全局调试会话,所述全局调试会话与所述多个调试会话对应;
所述生成单元1026具体用于:
在所述多个原始调试请求消息中添加请求调试的子应用模块对应的调试会话标识以及全局调试会话标识,生成多个调试请求消息。
在一些可能的实现方式中,所述通信单元1022还用于:
接收多个调试响应消息,所述多个调试响应消息与所述多个调试请求消息一一对应。
在一些可能的实现方式中,所述子系统102还包括:
处理单元,用于在向所述路由子系统发送所述多个调试请求消息之前,建立与所述路由子系统的长连接。
在一些可能的实现方式中,所述处理单元还用于:
当所述长连接建立失败时,所述交互子系统丢弃已接收的调试请求消息。
在一些可能的实现方式中,所述子系统还包括:
处理单元,用于当所述多个调试会话关闭时,断开与所述路由子系统的长连接。
根据本申请实施例的交互子系统102可对应于执行本申请实施例中描述的方法,并且交互子系统102的各个模块/单元的上述和其它操作和/或功能分别为了实现图3所示实施例中的各个方法的相应流程,为了简洁,在此不再赘述。
本申请还提供了一种调试请求消息的处理装置。该装置具体可以是如图1所示的调试适配器。下面结合附图对该装置的结构进行详细说明。
参见图6所示的调试请求消息的处理装置的结构示意图,该装置600包括:
通信单元602,用于接收多个原始调试请求消息,每个原始调试请求消息用于请求调试应用的一个子应用模块,每个子应用模块包括的代码块用于实现所述应用的功能;
创建单元604,用于创建多个调试会话,所述多个调试会话与请求调试的多个子应用模块一一对应;
生成单元606,用于根据所述多个调试会话对应的调试会话标识和所述多个原始调试请求消息生成多个调试请求消息;
所述通信单元602,还用于发送所述多个调试请求消息。
在一些可能的实现方式中,所述生成单元606具体用于:
在所述多个原始调试请求消息中添加请求调试的子应用模块对应的调试会话标识,得到多个调试请求消息。
在一些可能的实现方式中,所述创建单元604还用于:
创建全局调试会话,所述全局调试会话与所述多个调试会话对应;
所述生成单元606具体用于:
在所述多个原始调试请求消息中添加请求调试的子应用模块对应的调试会话标识以及全局调试会话标识,得到多个调试请求消息。
在一些可能的实现方式中,所述生成单元606具体用于:
删除所述多个原始调试请求消息的标准消息头;
为所述多个原始调试请求消息添加更新的消息头,所述更新的消息头包括请求调试的子应用模块对应的调试会话标识。
在一些可能的实现方式中,所述通信单元602还用于:
接收多个调试响应消息,所述多个调试响应消息与所述多个调试请求消息一一对应。
在一些可能的实现方式中,所述生成单元606具体用于:
删除所述多个调试响应消息的消息头,所述调试响应消息的消息头包括调试会话标识;
为所述多个调试响应消息添加标准消息头。
在一些可能的实现方式中,所述装置600还包括:
处理单元,用于建立与路由子系统的长连接,所述路由子系统用于路由所述调试请求消息至请求调试的子应用模块的代理。
在一些可能的实现方式中,所述处理单元还用于:
当所述长连接建立失败时,丢弃已接收的调试请求消息。
在一些可能的实现方式中,所述装置600还包括:
处理单元,用于当所述多个调试会话关闭时,断开与路由子系统的连接。
根据本申请实施例的调试请求消息的处理装置600可对应于执行本申请实施例中描述的方法,并且调试请求消息的处理装置600的各个模块/单元的上述和其它操作和/或功能分别为了实现图3所示实施例中的各个方法的相应流程,为了简洁,在此不再赘述。
本申请实施例还提供了一种计算设备700。该计算设备700可以是笔记本电脑、台式机等终端计算设备,也可以是云环境中的云计算设备,或者是边缘环境中的边缘计算设备。当然,计算设备700也可以是多个设备形成的计算机集群。该计算设备700具体用于实现如图5所示的交互子系统102或者如图6所示的调试请求消息的处理装置600的功能。
图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用于与外部通信。例如,在实现图5所示的交互子系统102的功能时,通信接口703用于用户输入或选择的多个子应用模块的标识,向路由子系统104发送多个调试请求消息等等。又例如,在实现图6所示的调试请求消息的处理装置600的功能时,通信接口703用于接收多个原始调试请求消息,发送多个调试请求消息等等。
存储器704可以包括易失性存储器(volatile memory),例如随机存取存储器(random access memory,RAM)。存储器704还可以包括非易失性存储器(non-volatilememory),例如只读存储器(read-only memory,ROM),快闪存储器,机械硬盘(hard diskdrive,HDD)或固态硬盘(solid state drive,SSD)。
存储器704中存储有可执行代码,处理器702执行该可执行代码以执行前述实施例中的方法。
在实现图5所示实施例的情况下,且图5实施例中所描述的交互子系统102的各单元为通过软件实现的情况下,执行图5中的创建单元1024、生成单元1026功能所需的软件或程序代码存储在存储器704中。通信单元1022功能通过通信接口703实现。
具体地,通信接口703接收用户输入或选择的多个子应用模块的标识,通过总线701将用户输入或选择的多个子应用模块的标识传输至处理器702。处理器702执行存储器704中的程序代码,从而创建多个调试会话,并根据多个调试会话生成多个调试请求消息。。
在实现图6所示实施例的情况下,且图6所示实施例中所描述的调试请求消息的处理装置600的各单元为通过软件实现的情况下,执行图6中的创建单元604、生成单元606功能所需的软件或程序代码存储在存储器704中。通信单元602功能通过通信接口703实现。
具体地,通信接口703接收多个原始调试请求消息,通过总线701将多个原始调试请求消息传输至处理器702。处理器702执行存储器704中的程序代码,从而创建多个调试会话,根据所述多个调试会话对应的调试会话标识和所述多个原始调试请求消息生成多个调试请求消息。然后通信接口703发送多个调试请求消息。
本申请实施例还提供了一种计算机可读存储介质。所述计算机可读存储介质可以是计算设备能够存储的任何可用介质或者是包含一个或多个可用介质的数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘)等。该计算机可读存储介质包括指令,所述指令指示计算设备执行上述应用于应用调试方法或者调试请求消息的处理方法。
本申请实施例还提供了一种计算机程序产品。所述计算机程序产品包括一个或多个计算机指令。在计算设备上加载和执行所述计算机指令时,全部或部分地产生按照本申请实施例所述的流程或功能。
所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机或数据中心进行传输。
所述计算机程序产品可以为一个软件安装包,在需要使用前述应用调试方法或者调试请求消息的处理方法的任一方法的情况下,可以下载该计算机程序产品并在计算设备上执行该计算机程序产品。
上述各个附图对应的流程或结构的描述各有侧重,某个流程或结构中没有详述的部分,可以参见其他流程或结构的相关描述。
Claims (34)
1.一种应用调试方法,其特征在于,所述方法应用于应用调试系统,所述应用调试系统用于对应用的子应用模块进行代码调试,所述应用调试系统包括路由子系统和交互子系统,所述方法包括:
所述交互子系统接收用户输入或选择的多个子应用模块的标识,其中,每个子应用模块包括的代码块用于实现所述应用的功能;
所述交互子系统创建多个调试会话,所述多个调试会话与所述多个子应用模块一一对应;
所述交互子系统根据所述多个调试会话生成多个调试请求消息,每个调试请求消息被所述路由子系统路由至请求调试的子应用模块的代理,以用于请求调试对应的子应用模块的代码块。
2.根据权利要求1所述的方法,其特征在于,每个调试会话包括调试会话标识,所述交互子系统根据所述多个调试会话生成多个调试请求消息,包括:
所述交互子系统根据多个子应用模块的标识生成多个原始调试请求消息;
所述交互子系统在所述多个原始调试请求消息中添加请求调试的子应用模块对应的调试会话标识,得到多个调试请求消息。
3.根据权利要求2所述的方法,其特征在于,所述方法还包括:
所述交互子系统创建全局调试会话,所述全局调试会话与所述多个调试会话对应;
所述交互子系统在所述多个原始调试请求消息中添加请求调试的子应用模块对应的调试会话标识,得到多个调试请求消息,包括:
所述交互子系统在所述多个原始调试请求消息中添加请求调试的子应用模块对应的调试会话标识以及全局调试会话标识,生成多个调试请求消息。
4.根据权利要求1至3任一项所述的方法,其特征在于,所述方法还包括:
所述交互子系统接收多个调试响应消息,所述多个调试响应消息与所述多个调试请求消息一一对应。
5.根据权利要求1至4任一项所述的方法,其特征在于,在向所述路由子系统发送所述多个调试请求消息之前,所述方法还包括:
所述交互子系统建立与所述路由子系统的长连接。
6.根据权利要求5所述的方法,其特征在于,所述方法还包括:
当所述长连接建立失败时,所述交互子系统丢弃已接收的调试请求消息。
7.根据权利要求1至6任一项所述的方法,其特征在于,所述方法还包括:
当所述多个调试会话关闭时,所述交互子系统断开与所述路由子系统的长连接。
8.一种调试请求消息的处理方法,其特征在于,所述方法包括:
调试适配器接收多个原始调试请求消息,每个原始调试请求消息用于请求调试应用的一个子应用模块,每个子应用模块包括的代码块用于实现所述应用的功能;
所述调试适配器创建多个调试会话,所述多个调试会话与请求调试的多个子应用模块一一对应;
所述调试适配器根据所述多个调试会话对应的调试会话标识和所述多个原始调试请求消息生成多个调试请求消息,发送所述多个调试请求消息。
9.根据权利要求8所述的方法,其特征在于,所述调试适配器根据所述多个调试会话对应的调试会话标识和所述多个原始调试请求消息生成多个调试请求消息,包括:
所述调试适配器在所述多个原始调试请求消息中添加请求调试的子应用模块对应的调试会话标识,得到多个调试请求消息。
10.根据权利要求9所述的方法,其特征在于,所述方法还包括:
所述调试适配器创建全局调试会话,所述全局调试会话与所述多个调试会话对应;
所述调试适配器在所述多个原始调试请求消息中添加请求调试的子应用模块对应的调试会话标识,得到多个调试请求消息,包括:
所述调试适配器在所述多个原始调试请求消息中添加请求调试的子应用模块对应的调试会话标识以及全局调试会话标识,得到多个调试请求消息。
11.根据权利要求9或10所述的方法,其特征在于,所述调试适配器在所述多个原始调试请求消息中添加请求调试的子应用模块对应的调试会话标识,包括:
所述调试适配器删除所述多个原始调试请求消息的标准消息头;
所述调试适配器为所述多个原始调试请求消息添加更新的消息头,所述更新的消息头包括请求调试的子应用模块对应的调试会话标识。
12.根据权利要求8至11任一项所述的方法,其特征在于,所述方法还包括:
所述调试适配器接收多个调试响应消息,所述多个调试响应消息与所述多个调试请求消息一一对应。
13.根据权利要求12所述的方法,其特征在于,所述方法还包括:
所述调试适配器删除所述多个调试响应消息的消息头,所述调试响应消息的消息头包括调试会话标识;
所述调试适配器为所述多个调试响应消息添加标准消息头。
14.根据权利要求8至13任一项所述的方法,其特征在于,所述调试适配器发送所述多个调试请求消息之前,所述方法还包括:
所述调试适配器建立与路由子系统的长连接,所述路由子系统用于路由所述调试请求消息至请求调试的子应用模块的代理。
15.根据权利要求14所述的方法,其特征在于,所述方法还包括:
当所述长连接建立失败时,所述调试适配器丢弃已接收的调试请求消息。
16.根据权利要求8至15任一项所述的方法,其特征在于,所述方法还包括:
当所述多个调试会话关闭时,所述调试适配器断开与路由子系统的连接。
17.一种交互子系统,其特征在于,应用调试系统用于对应用的子应用模块进行代码调试,所述应用调试系统包括路由子系统和所述交互子系统,所述交互子系统包括:
通信单元,用于接收用户输入或选择的多个子应用模块的标识,其中,每个子应用模块包括的代码块用于实现所述应用的功能;
创建单元,用于创建多个调试会话,所述多个调试会话与所述多个子应用模块一一对应;
生成单元,用于根据所述多个调试会话生成多个调试请求消息,每个调试请求消息被所述路由子系统路由至请求调试的子应用模块的代理,以用于请求调试对应的子应用模块的代码块。
18.根据权利要求17所述的子系统,其特征在于,每个调试会话包括调试会话标识,所述生成单元具体用于:
根据多个子应用模块的标识生成多个原始调试请求消息;
在所述多个原始调试请求消息中添加请求调试的子应用模块对应的调试会话标识,得到多个调试请求消息。
19.根据权利要求18所述的子系统,其特征在于,所述创建单元还用于:
创建全局调试会话,所述全局调试会话与所述多个调试会话对应;
所述生成单元具体用于:
在所述多个原始调试请求消息中添加请求调试的子应用模块对应的调试会话标识以及全局调试会话标识,生成多个调试请求消息。
20.根据权利要求17至19任一项所述的子系统,其特征在于,所述通信单元还用于:
接收多个调试响应消息,所述多个调试响应消息与所述多个调试请求消息一一对应。
21.根据权利要求17至20任一项所述的子系统,其特征在于,所述子系统还包括:
处理单元,用于在向所述路由子系统发送所述多个调试请求消息之前,建立与所述路由子系统的长连接。
22.根据权利要求21所述的子系统,其特征在于,所述处理单元还用于:
当所述长连接建立失败时,丢弃已接收的调试请求消息。
23.根据权利要求17至22任一项所述的子系统,其特征在于,所述子系统还包括:
处理单元,用于当所述多个调试会话关闭时,断开与所述路由子系统的长连接。
24.一种调试请求消息的处理装置,其特征在于,所述装置包括:
通信单元,用于接收多个原始调试请求消息,每个原始调试请求消息用于请求调试应用的一个子应用模块,每个子应用模块包括的代码块用于实现所述应用的功能;
创建单元,用于创建多个调试会话,所述多个调试会话与请求调试的多个子应用模块一一对应;
生成单元,用于根据所述多个调试会话对应的调试会话标识和所述多个原始调试请求消息生成多个调试请求消息;
所述通信单元,还用于发送所述多个调试请求消息。
25.根据权利要求24所述的装置,其特征在于,所述生成单元具体用于:
在所述多个原始调试请求消息中添加请求调试的子应用模块对应的调试会话标识,得到多个调试请求消息。
26.根据权利要求25所述的装置,其特征在于,所述创建单元还用于:
创建全局调试会话,所述全局调试会话与所述多个调试会话对应;
所述生成单元具体用于:
在所述多个原始调试请求消息中添加请求调试的子应用模块对应的调试会话标识以及全局调试会话标识,得到多个调试请求消息。
27.根据权利要求25或26所述的装置,其特征在于,所述生成单元具体用于:
删除所述多个原始调试请求消息的标准消息头;
为所述多个原始调试请求消息添加更新的消息头,所述更新的消息头包括请求调试的子应用模块对应的调试会话标识。
28.根据权利要求24至27任一项所述的装置,其特征在于,所述通信单元还用于:
接收多个调试响应消息,所述多个调试响应消息与所述多个调试请求消息一一对应。
29.根据权利要求28所述的装置,其特征在于,所述生成单元具体用于:
删除所述多个调试响应消息的消息头,所述调试响应消息的消息头包括调试会话标识;
为所述多个调试响应消息添加标准消息头。
30.根据权利要求24至29任一项所述的装置,其特征在于,所述装置还包括:
处理单元,用于建立与路由子系统的长连接,所述路由子系统用于路由所述调试请求消息至请求调试的子应用模块的代理。
31.根据权利要求30所述的装置,其特征在于,所述处理单元还用于:
当所述长连接建立失败时,丢弃已接收的调试请求消息。
32.根据权利要求24至31任一项所述的装置,其特征在于,所述装置还包括:
处理单元,用于当所述多个调试会话关闭时,断开与路由子系统的连接。
33.一种设备,其特征在于,所述设备包括处理器和存储器;
所述处理器用于执行所述存储器中存储的指令,以使得所述设备执行如权利要求1至7或者8至16中任一项所述的方法。
34.一种计算机可读存储介质,其特征在于,包括指令,所述指令指示设备执行如权利要求1至7或者8至16中任一项所述的方法。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/CN2021/100195 WO2021239157A1 (zh) | 2020-05-26 | 2021-06-15 | 一种应用调试方法、装置、设备及介质 |
EP21813031.8A EP4148586A4 (en) | 2020-05-26 | 2021-06-15 | APPLICATION DEBUGGING METHOD AND APPARATUS, AND DEVICE AND MEDIUM |
US17/993,624 US20230087995A1 (en) | 2020-05-26 | 2022-11-23 | Application Debugging Method, Apparatus, Device, and Medium |
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010456122 | 2020-05-26 | ||
CN2020104561227 | 2020-05-26 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113722205A true CN113722205A (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 Before (3)
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 | 消息路由的方法、装置、系统、设备及介质 |
Country Status (4)
Country | Link |
---|---|
US (2) | US20230087995A1 (zh) |
EP (2) | EP4148585A4 (zh) |
CN (4) | CN113722204A (zh) |
WO (2) | WO2021238592A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115242771A (zh) * | 2022-09-19 | 2022-10-25 | 武汉海微科技有限公司 | 设备调试方法、装置、设备及存储介质 |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117435201A (zh) * | 2022-07-13 | 2024-01-23 | 华为云计算技术有限公司 | 分布式服务生成方法、系统、计算设备及存储介质 |
CN116185882A (zh) * | 2023-04-28 | 2023-05-30 | 深圳鸿芯微纳技术有限公司 | 软件调试方法、装置、设备及存储介质 |
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 | 北京京东尚科信息技术有限公司 | 一种实现系统间安全交互的方法和装置 |
US10990504B2 (en) * | 2018-01-08 | 2021-04-27 | Ozcode Ltd. | Time travel source code debugger incorporating future prediction |
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 WO PCT/CN2021/091752 patent/WO2021238592A1/zh unknown
- 2021-04-30 EP EP21812877.5A patent/EP4148585A4/en active Pending
- 2021-06-15 WO PCT/CN2021/100195 patent/WO2021239157A1/zh unknown
- 2021-06-15 EP EP21813031.8A patent/EP4148586A4/en active Pending
-
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 |
---|---|---|---|---|
CN115242771A (zh) * | 2022-09-19 | 2022-10-25 | 武汉海微科技有限公司 | 设备调试方法、装置、设备及存储介质 |
CN115242771B (zh) * | 2022-09-19 | 2023-01-31 | 武汉海微科技有限公司 | 设备调试方法、装置、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
US20230087995A1 (en) | 2023-03-23 |
CN113722204A (zh) | 2021-11-30 |
EP4148586A1 (en) | 2023-03-15 |
CN113726834A (zh) | 2021-11-30 |
EP4148586A4 (en) | 2024-01-24 |
WO2021238592A1 (zh) | 2021-12-02 |
EP4148585A1 (en) | 2023-03-15 |
WO2021239157A1 (zh) | 2021-12-02 |
EP4148585A4 (en) | 2023-10-04 |
CN113722116A (zh) | 2021-11-30 |
US20230092858A1 (en) | 2023-03-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
WO2021239157A1 (zh) | 一种应用调试方法、装置、设备及介质 | |
US7334162B1 (en) | Dynamic distribution of test execution | |
US6983400B2 (en) | Distributed test harness model | |
JP5298763B2 (ja) | 仮想システム制御プログラム、方法及び装置 | |
US20150058823A1 (en) | Remote debugging in a cloud computing environment | |
CN112165532A (zh) | 节点访问方法、装置、设备及计算机可读存储介质 | |
CN112333096A (zh) | 一种微服务流量调度方法及相关组件 | |
US10313282B1 (en) | Flexible middleware messaging system | |
KR100950212B1 (ko) | 이동 통신 애플리케이션들을 테스트하기 위한 소프트웨어 개발 시스템, 상기 소프트웨어 개발 시스템에서 소프트웨어 구성요소들간에 데이터를 전송하는 방법, 상기 소프트웨어 개발 시스템을 포함하는 데이터 처리 장치, 및 상기 데이터 처리 장치를 제어하는 컴퓨터 프로그램이 수록된 컴퓨터 판독가능 저장 매체 | |
CN111831567B (zh) | 应用的测试环境配置方法、装置、系统和介质 | |
CN108093036B (zh) | 一种获取资源的方法及装置 | |
CN111694639A (zh) | 进程容器地址的更新方法、装置和电子设备 | |
CN114338820A (zh) | 网络访问方法、装置、电子设备及存储介质 | |
CN113342419B (zh) | 一种推送系统加载方法、装置、电子设备及存储介质 | |
US7769828B2 (en) | System for provisioning time sharing option (TSO) and interactive productivity system facility (ISPF) services in a network environment | |
JP5610654B2 (ja) | 端末管理パッケージを提供する装置及び前記端末管理パッケージを受信する方法 | |
CN113238780A (zh) | 云服务器的升级方法、升级设备及云服务器 | |
CN113760278A (zh) | 一种页面管理方法和装置 | |
CN114726789A (zh) | 流量管理、配置流量管理策略的方法、装置、设备及介质 | |
WO2023083071A1 (zh) | 视图交互方法、装置、电子设备及计算机可读介质 | |
CN104570967A (zh) | 基于Android系统的远程控制方法及系统 | |
CN113656152B (zh) | 基于容器云环境的本地模拟方法、系统、介质和电子设备 | |
CN115981779A (zh) | 数据热更新方法和装置、计算机可读存储介质、电子设备 | |
CN116264538A (zh) | 数据处理方法、装置、设备及计算机存储介质 | |
CN110661852B (zh) | 云环境中的业务处理方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20220207 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. |
|
TA01 | Transfer of patent application right | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |