CN113722116A - 一种调试消息的传输方法、装置、设备及介质 - Google Patents
一种调试消息的传输方法、装置、设备及介质 Download PDFInfo
- Publication number
- CN113722116A CN113722116A CN202010837046.4A CN202010837046A CN113722116A CN 113722116 A CN113722116 A CN 113722116A CN 202010837046 A CN202010837046 A CN 202010837046A CN 113722116 A CN113722116 A CN 113722116A
- Authority
- CN
- China
- Prior art keywords
- debugging
- message
- application
- data stream
- debug
- 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)。
开发人员常需要对应用进行调试,应用的调试包括利用人工或者编译的方式检测出应用的程序代码中的错误,进而可以根据调试过程中发现的错误对程序代码进行修正。目前,业界对应用的调试通常是通过集成开发环境(integrated developmentenvironment,IDE)在开发环境下对应用的程序代码进行调试。
在调试过程中调试消息传输的效率较低,由此影响了调试效率。如何高效地传输调试消息成为了业界重点关注的问题。
发明内容
本申请提供了一种调试消息的传输方法,该方法通过将调试消息构造为数据流,通过管道文件传输数据流,提高了调试消息的传输效率,进而提高了调试效率。本申请还提供了上述方法对应的装置、设备、计算机可读存储介质以及计算机程序产品。
第一方面,本申请提供了一种调试消息的传输方法。该方法应用于应用调试系统,应用调试系统用于对应用的子应用模块进行代码调试。其中,应用的子应用模块是指通过计算机可执行的代码块实现一种或多种功能的功能模块。子应用模块可以是一个或者多个源代码文件。对于基于微服务架构开发的应用而言,子应用模块也可以是一个或多个微服务。子应用模块可以在生产环境中运行从而提供服务。
其中,生产环境中包括至少一个节点,该节点是指服务器、终端计算设备等具有计算能力的计算节点。应用的子应用模块可以部署在生产环境的至少一个节点,例如可以集中部署在一个节点,或者分布式地部署在不同节点。
每个子应用模块具有模块代理(子应用模块为微服务时,也称作微服务代理),每个节点具有节点代理(host agent),也称作主机代理。本申请实施例将模块代理称之为代理(agent)。
agent为与应用同时部署在生产环境的代码块。该代码块在运行时用于代理子应用模块与外部交互,以及对该子应用模块的调试。host agent为与应用同时部署在生产环境的代码块。host agent在运行时用于转发来自于节点上的子应用模块的消息或者向节点上的子应用模块转发消息。
具体地,host agent或agent获取第一消息批,该第一消息批中的每个调试消息为请求调试应用的第一子应用模块的调试请求消息或对第一子应用模块进行调试后的调试响应消息(host agent获取的第一消息批中的调试消息为调试请求消息,agent获取的第一消息批中的调试消息为调试响应消息),然后host agent或agent利用批量消息传输协议将所述第一消息批构造为第一调试数据流,将第一调试数据流写入第一调试管道文件,通过第一调试管道文件对第一调试数据流进行传输,例如将基于调试请求消息构造的第一调试数据流由host agent传输至agent,将基于调试响应消息构造的第一调试数据流由agent传输至host agent。
由于管道文件是建立在内存之上可以同时被两个进程(写进程和读进程)访问的文件,因此,通过管道文件传输批量的调试消息构造的调试数据流可以实现边写边读,提高了传输效率。而且调试数据流中至多保留一个消息的消息头,如此可以减少负载,进一步提高传输效率。此外,通过批量方式传输多个调试消息,可以提高吞吐量,进而提高资源利用率。
在一些可能的实现方式中,应用调试系统可以支持多个用户同时对应用的同一子应用模块或不同子应用模块进行调试。基于此,当每个调试消息为请求调试应用的第一子应用模块的调试请求消息时,每个调试请求消息中包括调试指令。不同调试指令来源于不同用户对所述第一子应用模块的调试选择。
具体地,不同用户选择对第一子应用模块进行调试,应用调试系统生成多个请求调试第一子应用模块的调试请求消息,每个调试请求消息中包括调试指令。由于这多个调试请求消息均是请求调试第一子应用模块,host agent可以将这多个调试请求消息构造为第一调试数据流,通过与第一子应用模块的agent之间的第一调试管道文件传输该第一调试数据流,从而提高传输效率以及资源利用率。
在一些可能的实现方式中,批量消息传输协议用于定义初始数据流的格式。初始数据流实际是一种数据流的模板,host agent或者agent可以基于该模板构造调试数据流等。具体地,初始数据流包括内容字段,host agent或者agent可以将第一消息批中的多个调试消息的内容写入初始数据流的内容字段,从而得到第一调试数据流。
其中,第一调试数据流包括多个调试消息的内容,通过传输第一调试数据流可以实现传输多个调试消息,如此可以提高并发率,从而提高资源利用率。
在一些可能的实现方式中,考虑到调试消息的规模可以不统一,初始数据流还可以包括规模字段。host agent或者agent可以将第一消息批中的多个调试消息的规模写入初始数据流的规模字段,以及将多个调试消息的内容写入内容字段,得到第一调试数据流。
如此,agent或host agent接收到第一调试数据流时,可以根据规模字段指示的消息规模从第一调试数据流中恢复多个调试消息,由此实现传输多个调试消息,提高了调试消息的传输效率以及资源利用率。
在一些可能的实现方式中,所述初始数据流还包括协议版本字段和头尺寸字段,所述协议版本字段用于指示所述数据流的协议版本,所述头尺寸字段用于确定基于所述协议版本的所述数据流中有效负载的起始地址。
如此,可以实现允许不同版本的批量消息传输协议存在于现网环境,具有较好的兼容性,能够满足实际业务的需求。
在一些可能的实现方式中,应用的每个子应用模块对应一个代理,该代理具体是模块代理,子应用模块为微服务时,也可以称之为微服务代理。为了便于描述,本申请实施例称之为agent。当每个调试消息为请求调试所述应用的第一子应用模块的调试请求消息时,所述调试请求消息的传输目的地为所述第一子应用模块的代理,即agent。
其中,子应用模块(如微服务)在运行时产生一个进程,子应用模块的agent在运行时实质上相当于寄宿在该进程中的独立线程。应用调试系统调试应用的子应用模块时,不会阻塞上述进程,直接通过寄宿在该进程的线程进行交互,如此可以实现在生产环境对子应用模块的调试。
在一些可能的实现方式中,第一子应用模块的代理中部署有与所述第一子应用模块的编程语言对应的语言调试模块。所述语言调试模块用于将所述调试消息转换为与所述编程语言对应的调试消息,进而根据与编程语言对应的调试消息实现对第一子应用模块的调试。
其中,不同子应用模块的代理中可以部署不同编程语言对应的语言调试模块,由此可以实现对异构应用的调试,满足业务需求。
在一些可能的实现方式中,host agent还可以利用所述批量消息传输协议将更新的语言调试模块的代码构造为第一部署数据流,然后将所述第一部署数据流写入第一部署管道文件,通过所述第一部署管道文件将所述第一部署数据流传输至所述第一子应用模块的代理。
如此可以实现第一子应用模块的agent中语言调试模块的更新,使得agent能够以更新后的语言调试模块启动对第一子应用模块的调试,提高调试性能。
在一些可能的实现方式中,所述应用被部署于生产环境,所述生产环境中包括至少一个节点,当每个调试消息为对所述第一子应用模块进行调试后的调试响应消息时,所述调试响应消息被传输至所述第一子应用模块所在节点的节点代理。
其中,第一子应用模块生成的调试响应消息会先发送至host agent,再通过agent发送至应用调试系统的至少一个交互模块(如浏览器、集成开发环境)。因此,通过agent和host agent之间的调试管道文件,传输上述调试响应消息形成的调试数据流可以提高传输效率。
在一些可能的实现方式中,host agent可以接收多个消息,对所述多个消息进行分类,获得所述第一消息批和第二消息批。其中,第一消息批中的每个调试消息为请求调试第一子应用模块的调试请求消息,第二消息批中的每个调试消息为请求调试第二子应用模块的调试请求消息。host agent还可以利用所述批量消息传输协议将所述第二消息批构造为第二调试数据流,然后将所述第二调试数据流写入第二调试管道文件,通过所述第二调试管道文件将所述第二调试数据流传输至所述第二子应用模块对应的代理。
其中,host agent分别通过第一调试管道文件和第二调试管道文件传输第一调试数据流和第二调试数据流,一方面可以通过管道文件传输批量的调试消息构造的调试数据流,实现边写边读,提高了传输效率,另一方面可以通过第一调试管道文件和第二调试管道文件并行传输针对第一子应用模块的调试数据流和针对第二子应用模块的调试数据流,进一步提高调试效率。
第二方面,本申请提供了一种调试消息的传输装置。该装置应用于应用调试系统,所述应用调试系统用于对应用的子应用模块进行代码调试。该装置可以是host agent或者host agent中的软件模块。在一些实施例中,该装置也可以是agent或者agent中的软件模块。该装置具体包括:
获取模块,用于获取第一消息批,所述第一消息批中的每个调试消息为请求调试所述应用的第一子应用模块的调试请求消息或对所述第一子应用模块进行调试后的调试响应消息;
处理模块,用于利用批量消息传输协议将所述第一消息批构造为第一调试数据流;
所述处理模块,还用于将所述第一调试数据流写入第一调试管道文件,通过所述第一调试管道文件对所述第一调试数据流进行传输。
在一些可能的实现方式中,当每个调试消息为请求调试所述应用的第一子应用模块的调试请求消息时,每个调试请求消息中包括调试指令,不同调试指令来源于不同用户对所述第一子应用模块的调试选择。
在一些可能的实现方式中,所述批量消息传输协议用于定义初始数据流的格式,所述初始数据流包括内容字段;
所述处理模块具体用于:
将所述第一消息批中的多个调试消息的内容写入所述初始数据流的内容字段,得到所述第一调试数据流。
在一些可能的实现方式中,所述初始数据流还包括规模字段;
所述处理模块具体用于:
将所述第一消息批中的多个调试消息的规模写入所述初始数据流的规模字段,以及将所述多个调试消息的内容写入所述内容字段,得到所述第一调试数据流。
在一些可能的实现方式中,所述初始数据流还包括协议版本字段和头尺寸字段,所述协议版本字段用于指示所述数据流的协议版本,所述头尺寸字段用于确定基于所述协议版本的所述数据流中有效负载的起始地址。
在一些可能的实现方式中,所述应用的每个子应用模块对应一个代理,当每个调试消息为请求调试所述应用的第一子应用模块的调试请求消息时,所述调试请求消息的传输目的地为所述第一子应用模块的代理。
在一些可能的实现方式中,所述第一子应用模块的代理中部署有与所述第一子应用模块的编程语言对应的语言调试模块,所述语言调试模块用于将所述调试消息转换为与所述编程语言对应的调试消息。
在一些可能的实现方式中,装置为host agent或者host agent中的软件模块时,所述处理模块还用于:
利用所述批量消息传输协议将更新的语言调试模块的代码构造为第一部署数据流;
将所述第一部署数据流写入第一部署管道文件,通过所述第一部署管道文件将所述第一部署数据流传输至所述第一子应用模块的代理。
在一些可能的实现方式中,所述应用被部署于生产环境,所述生产环境中包括至少一个节点,当每个调试消息为对所述第一子应用模块进行调试后的调试响应消息时,所述调试响应消息被传输至所述第一子应用模块所在节点的节点代理。
在一些可能的实现方式中,装置为host agent或host agent中的软件模块时,所述获取模块具体用于:
接收多个消息;
对所述多个消息进行分类,获得所述第一消息批和第二消息批,其中所述第二消息批中的每个调试消息为请求调试所述第二子应用模块的调试请求消息;
所述处理模块还用于:
利用所述批量消息传输协议将所述第二消息批构造为第二调试数据流;
将所述第二调试数据流写入第二调试管道文件,通过所述第二调试管道文件将所述第二调试数据流传输至所述第二子应用模块对应的代理。
第三方面,本申请提供一种计算设备,所述计算设备包括处理器和存储器。所述处理器、所述存储器进行相互的通信。所述处理器用于执行所述存储器中存储的指令,以使得计算设备执行如第一方面或第一方面的任一种实现方式中的方法。
第四方面,本申请提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序指令,当所述计算机程序指令由计算设备执行时,计算设备执行上述第一方面或第一方面的任一种实现方式中的方法。
第五方面,本申请提供了一种包含指令的计算机程序产品,当其在计算设备上运行时,使得计算设备执行上述第一方面或第一方面的任一种实现方式中的方法。
本申请在上述各方面提供的实现方式的基础上,还可以进行进一步组合以提供更多实现方式。
附图说明
为了更清楚地说明本申请实施例的技术方法,下面将对实施例中所需使用的附图作以简单地介绍。
图1为本申请实施例提供的一种应用调试系统调试应用的系统架构图;
图2为本申请实施例提供的一种应用调试系统中调试消息传输的示意图;
图3A为本申请实施例提供的一种代理和节点代理的部署示意图;
图3B为本申请实施例提供的一种代理和节点代理的部署示意图;
图3C为本申请实施例提供的一种代理和节点代理的部署示意图;
图4为本申请实施例提供的一种调试消息的传输方法的流程图;
图5为本申请实施例提供的一种通过管道文件传输数据流的示意图;
图6为本申请实施例提供的一种调试消息的传输装置的结构示意图;
图7为本申请实施例提供的一种计算设备的结构示意图。
具体实施方式
本申请实施例中的术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征。
首先对本申请实施例中所涉及到的一些技术术语进行介绍。
应用(application,APP),是针对用户的某种特殊应用目的所编写的计算机程序的集合,具体可以是单一的应用程序或者多个应用程序的集合形成的应用软件。例如,在办公领域,应用可以是单一的文本编辑应用,也可以是文本编辑应用、表格编辑应用和图形编辑应用组成的应用。
应用通常包括多个子应用模块。子应用模块是指通过计算机可执行的代码块实现一种或多种功能的功能模块,子应用模块可以是一个或者多个源代码文件。该子应用模块可以在生产环境中运行从而提供服务。其中,生产环境是指正式提供服务的环境。生产环境中包括至少一个节点,该节点是指服务器、终端计算设备等具有计算能力的计算节点。
对于功能繁多的复杂应用,开发人员可以采用微服务架构(micro servicesarchitecture,MSA)进行开发,以提高开发效率。其中,微服务架构是指将应用的功能模块拆分成独立的微服务。微服务是一个或者一组相对较小且独立的功能单元的集合。微服务之间通过接口调用实现数据交互。如此,可以实现应用的各个功能模块的解耦。当应用需要新增功能、删除功能或者修改功能时,开发人员增加、删除或者修改相应的微服务即可。子应用模块也可以是一个或多个微服务。微服务在生产环境中运行,从而提供相应的服务。
针对已部署在生产环境中的应用,如果出现运行异常等问题,通常还需要对应用进行调试。其中,调试是指通过各种手段如单步执行、设置断点、打印变量内容等手段,对应用的程序代码进行查错。
相关技术对已部署在生产环境中的应用的调试方法通常是将该应用的程序代码加载至集成开发环境(integrated development environment,IDE),通过IDE在开发环境下对应用的程序代码进行本地调试,在本地调试后,对确定的问题进行解决后再重新将应用部署上线。由于需要在开发环境下重现生产环境下应用运行所产生的异常,以及将应用的程序代码加载至IDE进行本地调试,并将调试完成的应用重现部署上线,极大地影响了应用的调试效率。
基于此,本申请提出了一种直接在生产环境中对应用进行调试的方法。该方法由应用调试系统执行。针对部署在生产环境中待调试的应用,应用调试系统接收用户输入或选择的多个子应用模块的标识,根据多个子应用模块的标识对多个子应用模块的代码块进行调试,然后向用户呈现调试结果。该方法支持支持用户一次选择多个待调试的子应用模块,对应用的多个子应用模块进行调试,提高了应用的调试效率。而且,用户可以直接在生产环境下调试,无需加载程序代码至IDE进行本地调试,也无需将调试完成的应用重新部署上线,进一步提高了调试效率。
其中,应用调试系统还支持多用户同时对应用的子应用模块进行调试。在调试过程中,应用调试系统常常需要传输多个用户对子应用模块进行调试产生的调试消息。应用调试系统采用逐条传输模式传输调试消息,传输效率低下,由此影响了应用调试效率。而且,逐条传输模式导致吞吐量大幅下降,资源利用率大幅降低。
有鉴于此,本申请提供了一种调试消息的传输方法。具体地,应用调试系统获取第一消息批,第一消息批中的每个调试消息为请求调试应用的第一子应用模块的调试请求消息或者对第一子应用模块进行调试的调试响应消息,然后应用调试系统利用批量消息传输协议第一消息批构造为第一调试数据流,将该第一调试数据流写入第一调试管道文件,通过第一调试管道文件对第一调试数据流进行传输。
管道文件(pipe)是一种实现进程间通信(inter-process communication,IPC)的文件。管道文件本质是一个伪文件,实际为内核缓冲区。管道文件由一个进程(具体为父进程)通过管道函数创建,存储于内存中,当进程终结时,管道文件也随之消失。管道文件可以由两个文件描述符引用。一个文件描述符表示读端,一个文件描述符表示写端。数据通常是从管道文件的写端流入,从管道文件的读端流出。
由于管道文件是建立在内存之上可以同时被两个进程(写进程和读进程)访问的文件,因此,通过管道文件传输批量的调试消息构造的调试数据流可以实现边写边读,提高了传输效率。而且调试数据流中至多保留一个消息的消息头,如此可以减少负载,进一步提高传输效率。此外,通过批量方式传输多个调试消息,可以提高吞吐量,进而提高资源利用率。
为了使得本申请的技术方案更加清楚、易于理解,下面结合附图对本申请实施例提供的应用调试方法的系统架构进行介绍。
如图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根据用户输入的或选择的多个子应用模块的标识,生成多个调试消息,具体是生成对多个子应用模块进行调试的调试请求消息。调试模块104向多个子应用模块所在节点的host agent发送调试请求消息,然后通过host agent向子应用模块的agent发送上述调试请求消息,子应用模块的agent启动对子应用模块的代码的调试,生成调试响应消息,向host agent发送上述调试响应消息,然后通过host agent向调试模块104发送该调试响应消息。
接下来,对host agent和agent之间传输调试消息的过程进行详细说明。
参见图2所示调试消息传输示意图,host agent可以接收多个调试请求消息,根据多个调试请求消息获取第一消息批,该第一消息批中的每个调试消息为请求调试应用的第一子应用模块的调试请求消息。然后host agent可以利用批量消息传输协议将第一消息批构造为第一调试数据流,将第一调试数据流写入第一调试管道文件,通过第一调试管道文件对该第一调试数据流进行传输,例如将该第一调试数据流传输至第一子应用模块的agent。
第一子应用模块的agent可以根据第一调试数据流获得调试请求消息,根据该调试请求消息启动对第一子应用模块的调试,生成调试响应消息。第一子应用模块的agent可以根据调试响应消息获得第一消息批,该第一消息批中的每个调试消息为对第一子应用模块进行调试的调试响应消息。agent可以利用批量消息传输协议将第一消息批构造为第一调试数据流,将第一调试数据流写入第一调试管道文件,通过第一调试管道文件对该第一调试数据流进行传输,例如将该第一调试数据流传输至第一子应用模块所在节点的hostagent。
上述第一调试数据流是一组有序的、具有起点和终点的数据序列。根据第一调试数据流的流动方向可以将第一调试数据流划分为进入流(incoming flow)和外出流(outgoing flow)。其中,进入流是指流入agent的数据流,外出流是指流出agent的数据流。
在图2的示例中,传输调试请求消息形成的调试数据流的管道文件与传输调试响应消息形成的调试数据流的管道文件可以是相同的,也可以是不同的。在一些实施例中,传输调试请求消息形成的调试数据流的管道文件可以是in.fifo.pipe,传输调试响应消息形成的调试数据流的管道文件可以是out.fifo.pipe。
图2以调试场景对本申请实施例的消息传输方法进行了介绍。本申请实施例的消息传输方法还可以应用于其他场景,例如性能监控场景。其中,性能监控是指对子应用模块的运行性能,如中央处理单元(central process unit,CPU)使用率、内存使用率等进行监控。具体地,host agent获取第一消息批,该第一消息批的每个消息为用于对第一子应用模块的性能进行监控的性能监控请求消息,host agent可以利用批量消息传输协议将第一消息批中的多个性能监控请求消息构造为第一监控数据流,然后将第一监控数据流写入第一监控管道文件,通过第一监控管道文件对第一监控数据流进行传输。
对应地,第一子应用模块的agent接收到第一监控数据流,可以获得性能监控请求消息。第一子应用模块的agent可以根据多个性能监控请求消息进行性能监控,生成多个性能监控响应消息。这多个性能监控响应消息可以形成一个第一数据批。第一子应用模块的agent可以利用批量消息传输协议将第一消息批中的多个性能监控响应消息构造成第一监控数据流,然后将第一监控数据流写入第一监控管道文件,通过第一监控管道文件对第一监控数据流进行传输如此实现批量传输多个性能监控响应消息。
在图1以及图2所示实施例中,应用调试系统100的交互模块102可以是提供应用调试功能的IDE,该IDE不仅能够用于编辑应用200的程序代码,对开发过程中的程序代码进行调试,还能够对远程已上线的应用200进行调试。交互模块102也可以是其他能够提供对已上线的应用200进行调试的功能的交互模块,例如加载有用于调试应用200的用户界面的浏览器或者专用于应用调试的交互模块。应用调试系统100的调试模块104为调试器(debugger)。为了便于描述,后文以交互模块102为IDE,调试模块104为debugger进行示例说明。
host agent和agent与应用200的子应用模块同时部署在生产环境中,具体是同时部署在数据中心300中。该数据中心300可以是自有数据中心,也可以是第三方数据中心。此外,数据中心300可以是本地数据中心,本地数据中心是指处于用户直接控制之下的数据中心,数据中心300也可以是云化数据中心。自有的云化数据中心具体是私有云对应的数据中心,第三方的云化数据中心具体是公有云对应的数据中心。
host agent、agent与应用调试系统100可以部署在相同数据中心,也可以部署在不同数据中心。下面结合附图对host agent、agent的部署方式进行详细说明。
如图3A所示,应用调试系统100部署在一个云化数据中心(具体可以是云计算集群),host agent、agent部署在另一个云化数据中心。部署host agent、agent的云化数据中心可以是公有云对应的数据中心,例如云服务提供商提供的数据中心,也可以是私有云对应的数据中心,例如用户自行搭建的数据中心。
如图3B所示,应用调试系统100、host agent和agent也可以部署在同一个云化数据中心。其中,该云化数据中心可以是云服务提供商提供的第三方数据中心,也可以是私有数据中心。
如图3C所示,应用调试系统100可以部署在一个云化数据中心,host agent和agent可以部署在本地数据中心。用户可以通过应用调试系统100实现远程地对应用200进行调试,具体是对应用200进行云调试。
图3A至图3C仅仅是对应用调试系统100以及host agent、agent的部署方式进行示例说明,在本申请实施例其他可能的实现方式中,应用调试系统100的不同模块还可以分别部署在不同环境,例如分别部署在不同的云化数据中心,或者交互模块102部署在终端计算设备,调试模块104部署在云化数据中心。
为了使得本申请的技术方案更加清楚、易于理解,下面结合附图对本申请实施例提供的调试消息的传输方法进行详细介绍。
参见图4所示的调试消息的传输方法的流程图,所述方法包括:
S402:host agent或者agent获取第一消息批。
所述第一消息批包括多个消息,例如包括多个调试消息。第一消息批中的多个消息具有相同的接收方。例如,云调试场景中,多个调试消息(具体为调试请求消息)的接收方是第一子应用模块的agent,因此,第一消息批中的每个调试消息可以是请求调试第一子应用模块的调试请求消息。
每个调试请求消息中包括调试指令,该调试指令可以来源于不同用户对第一子应用模块的调试选择。应用调试系统100(具体是交互模块102)根据不同用户对第一子应用模块的调试选择,分别生成请求调试第一子应用模块的调试请求消息,host agent接收应用交互系统100(具体是调试模块104)发送的调试请求消息,从而获得第一消息批。
第一子应用模块的agent接收到多个请求调试第一子应用模块的调试请求消息时,具体是多用户请求对第一子应用模块进行调试的调试请求消息时,可以启动对第一子应用模块的代码进行调试,生成多个调试响应消息。第一子应用模块的agent可以获取第一消息批,该第一消息批中的每个调试消息为对第一子应用模块进行调试的调试响应消息。
host agent或agent获取的调试消息可以存储在队列中。例如,调试请求消息存储在主题(topic)为请求(request)的队列中。调试请求消息中通常携带有子应用模块的标识。例如,子应用模块为微服务时,调试请求消息携带微服务所属资源的资源标识(resource id)。
host agent还可以按照请求调试的子应用模块对调试请求消息分类,得到请求调试第一子应用模块的调试请求消息和请求调试第二子应用模块的调试请求消息。例如,host agent从topic为request的队列中按照resource id对调试请求消息分类。如此,hostagent可以获取第一消息批和第二消息批。该第二消息批中的每个调试消息为请求调试所述第二子应用模块的调试请求消息。
在一些可能的实现方式中,agent可以按照调试的子应用模块对调试响应消息分类,得到对第一子应用模块进行调试的调试响应消息和对第二子应用模块进行调试的调试响应消息。如此,agent可以获取第一消息批和第二消息批。其中,第二消息批中的每个调试消息为对第二子应用模块进行调试的调试响应消息。
S404:host agent或agent利用批量消息传输协议将第一消息批构造为第一调试数据流。
批量消息传输协议用于定义初始数据流的格式。初始数据流包括内容字段。hostagent或agent将第一消息批中的多个调试消息的内容写入初始数据流的内容字段,可以得到第一调试数据流。调试消息的内容可以是字节形式,也可以是字符形式,基于内容形式不同,第一调试数据流可以是不同的。host agent和agent可以将第一消息批中的多个调试消息构造为字节流或者字符流。
可选地,调试消息的规模(size)可以是不统一的,为此,初始数据流还可以包括规模字段。规模字段可以记作message size,用于表征消息的规模或者大小。message size通常可以采用整型(即整数类型,integer,简称为int)进行表示,例如通过32位整型进行表示。
需要说明,初始数据流可以包括至少一个规模字段,用于指示至少一个消息的大小。当初始数据流为基于两个消息构造的数据流时,初始数据流可以包括至少一个规模字段,用于指示至少一个消息的大小。以此类推,当初始数据流为基于N(N大于2)个消息构造的数据流时,初始数据流可以包括至少N-1个规模字段,用于指示至少N-1个消息的大小。在一些实现方式中,初始数据流可以包括N个规模字段,用于指示N个消息的大小。例如,hostagent或agent可以在每个内容字段前面添加一个规模字段以指示该消息的大小。
内容字段和规模字段一般均为消息体中的字段。在一些实现方式中,初始数据流还可以包括消息头中的字段。例如,初始数据流中还可以包括类型(type)字段。在云调试场景中,所述类型字段可以用于指示数据流为调试请求流或者调试响应流。其中,由调试请求消息形成的调试数据流可以称为调试请求流,由调试响应消息形成的调试数据流可以称为调试响应流。
进一步地,根据调试请求消息中封装的调试指令不同,调试请求流还可以进一步细分为调试适配请求流和命令流。当调试请求消息封装的调试指令为启动调试等命令时,基于该调试请求消息构造的调试数据流为命令流(command flow)。当调试请求消息封装的调试指令为设置断点的指令、查看栈信息的指令、显示某个变量的指令、跟踪某个变量的指令或者单步执行的指令,则基于该调试请求消息构造的调试数据流为调试适配请求流,也称作调试适配协议(debug adapter protocol,DAP)流。
对应地,agent接收到命令流时,可以根据命令流中的启动调试等命令,生成命令响应(command ack)消息。对子应用模块进行调试的调试响应消息包括上述命令响应消息。agent根据多个命令响应消息可以生成命令响应流(command ack flow)。agent接收到调试适配请求流时,可以根据调试适配请求流中的设置断点的指令、查看栈信息的指令、显示某个变量的指令、跟踪某个变量的指令或者单步执行的指令,对子应用模块进行调试,生成针对上述指令的调试适配响应消息。对子应用模块进行调试的调试响应消息包括上述调试适配响应消息,基于该调试适配响应消息可以生成调试适配响应流,也称作DAP返回流。
基于此,初始数据流中的类型字段也可以用于指示数据流为命令流、DAP流或者命令响应流、DAP返回流。
可选地,host agent或者agent可以采用不同版本的批量消息传输协议传输消息,初始数据流还可以包括协议版本(version)字段。version通常可以通过整型进行表示,例如32位int。进一步地,本申请实施例允许不同版本的批量消息传输协议存在于现网环境,为此,初始数据流还可以包括头尺寸(header size)字段。header size是指除了headersize、version这些字段之外的,header部分的总长度。header size通常可以通过整型进行表示,例如32位int。
可选地,header部分包括起始码(start code)时,header size具体是指除了start code、header size、version之外的,header部分的总长度。start code用于指示消息批状态,例如,start code取值为-1时,一个新消息批(message batch)即将写入管道文件(pipe)。
其中,header size主要用于计算有效负载(payload)的起始地址。具体地,hostagent使用不同版本的批量消息传输协议向agent传输调试消息,agent可以根据headersize来计算有效负载的起始地址,进而得到传输的消息批。
可选地,初始数据流还可以包括上下文(context)字段、上下文规模(contextsize)字段以及时间戳(timestamp)字段中的任意一种或多种。其中,context字段用于指示当前消息批的上下文,context字段的字段值可以为上下文的标识,其可以通过一段字符串(string)进行表征。context size字段用于指示上下文的规模,其字段值可以为整型,例如32位int。timestamp用于指示消息批的时间戳,其字段值可以为整型,例如64位long。
为了便于理解,本申请还提供了第一消息批以及根据第一消息批构造的第一调试数据流的示例。
在该示例中,第一消息批包括2条调试消息,具体为message1和message2。批量消息传输协议用于定义初始数据流的格式。参见图5,初始数据流包括2个内容字段和2个规模字段。其中,内容字段和规模字段可以为初始数据流中消息体包括的字段。初始数据流还包括类型字段、上下文规模字段、上下文字段、时间戳字段以及起始码字段、头尺寸字段、协议版本字段。其中,类型字段、上下文规模字段、上下文字段、时间戳字段以及起始码字段、头尺寸字段、协议版本字段可以为初始数据流中消息头包括的字段。
在图5的示例中,host agent将消息message1和message2的内容分别写入对应的内容字段,将message1和message2的规模分别写入对应的规模字段。其中,内容字段和规模字段的字段值如下所示:
message1 content=“messageA”;
message2 content=“messageB”;
message1 size=“8”;
message2 size=“8”;
此外,host agent还将消息的类型(数据流的类型)写入对应的类型字段、上下文的规模写入上下文规模字段、上下文的标识写入上下文字段以及传输时间写入时间戳字段。这些字段的字段值如下所示:
message type=“1”;
context size=“8”;
context=“contextA”;
timestamp=“123456789”;
其中,message type取值为1表征调试消息为调试请求消息(数据流为调试请求流)。
此外,host agent还将协议版本写入协议版本字段,将起始码的值写入起始码字段,以及将头尺寸的值写入头尺寸字段。其中,body部分也即有效负载(payload)部分包括内容字段和规模字段,header部分包括内容字段和规模字段之外的字段。其中,header部分除起始码字段、协议版本字段、头尺寸字段之外,还包括类型字段、上下文规模字段、上下文字段以及时间戳字段。类型字段和上下文尺寸字段各占用4字节,上下文字段和时间戳字段各占用8字节,则头尺寸的值为4+4+8+8=24。
需要说明的是,当host agent或agent还获取第二消息批时,host agent或agent还可以利用批量消息传输协议将第二消息批构造为第二调试数据流。其中,host agent或agent构造第二调试数据流的具体实现可以参见构建第一调试数据流的具体实现,在此不再赘述。
S406:host agent或agent将所述第一调试数据流写入第一调试管道文件,通过第一调试管道文件传输第一调试数据流。
host agent可以预先创建管道文件,例如通过管道函数创建管道文件。然后hostagent将第一调试数据流(例如命令流或者DAP流)写入第一调试管道文件。对应地,agent可以从第一调试管道文件中读取第一调试数据流。如此,实现通过第一调试管道文件传输上述第一调试数据流。
在一些实现方式中,agent将第一调试数据流(例如命令响应流或者DAP返回流)写入第一调试管道文件。对应地,host agent可以从第一调试管道文件中读取第一调试数据流。如此,实现通过第一调试管道文件传输上述第一调试数据流。
当host agent或agent还获取第二消息批,根据第二消息批构造第二调试数据流时,host agent还可以将第二调试数据流(例如命令流或者DAP流)写入第二调试管道文件。对应地,agent可以从第二调试管道文件中读取第二调试数据流。如此,实现通过第二调试管道文件传输上述第二调试数据流。
进一步地,agent可以将第二调试数据流(例如命令响应流或者DAP返回流)写入第二调试管道文件。对应地,host agent可以从第二调试管道文件中读取第二调试数据流。如此,实现通过第二调试管道文件传输上述第二调试数据流。
一个节点上可以部署有多个子应用模块,host agent可以针对每个子应用模块分别创建对应的调试管道文件。考虑到调试数据流包括命令流/命令响应流以及DAP流/DAP返回流,host agent可以针对不同调试数据流分别创建不同的调试管道文件。例如,hostagent可以创建dap_fifo.pipe和command_fifo.pipe等管道文件,host agent可以将DAP流写入dap_fifo.pipe,将命令流写入command_fifo.pipe,如此可以隔离不同类型的数据流。
基于上述内容描述,本申请实施例提供了一种调试消息的传输方法。在该方法中,host agent或者agent获取第一消息批,第一消息批中的每个调试消息为请求调试应用的第一子应用模块的调试请求消息或者对第一子应用模块进行调试的调试响应消息,然后host agent或者agent利用批量消息传输协议第一消息批构造为第一调试数据流,将该第一调试数据流写入第一调试管道文件,通过第一调试管道文件对第一调试数据流进行传输。该方法支持通过管道文件传输批量的调试消息构造的调试数据流,可以实现边写边读,提高了传输效率。而且调试数据流中至多保留一个消息的消息头,如此可以减少负载,进一步提高传输效率。此外,通过批量方式传输多个调试消息,可以提高吞吐量,进而提高资源利用率。
其中,host agent向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 distributedfile system,HDFS)中。
应用调试系统100可以接收来自于agent的语言调试模块部署请求,然后响应于该语言调试模块部署请求,获取该agent请求的语言调试模块的代码,向agent发送该语言调试模块的代码,以在agent中部署相应的语言调试模块。
其中,语言调试模块的代码可以被发送至host agent,host agent可以利用批量消息传输协议将语言调试模块的代码构造为第一部署数据流,将第一部署数据流写入第一部署管道文件,通过第一部署管道文件对第一部署数据流进行传输。第一子应用模块的agent从第一部署管道文件读取第一部署数据流,根据第一部署数据流在agent中部署对应的语言调试模块,以便基于该语言调试模块对调试消息进行转换。
当语言调试模块存在新版本时,host agent还可以根据新版本的语言调试模块的代码构造第一调试数据流,将第一部署数据流写入第一部署管道文件,通过第一部署管道文件对第一部署数据流进行传输。第一子应用模块的agent从第一部署管道文件读取第一部署数据流,根据第一部署数据流中新版本的语言调试模块的代码更新语言调试模块。
在一些可能的实现方式中,应用调试系统100还可以通过用户界面向用户呈现应用200的子应用模块列表,或者通过用户界面向用户呈现应用200的子应用模块的拓扑图,以便用户根据子应用模块列表或者子应用模块的拓扑图选择多个子应用模块进行调试。
其中,应用调试系统100呈现的子应用模块列表或者子应用模块的拓扑图是根据应用200的结构信息生成。结构信息包括应用的标识、子应用模块(例如微服务)的标识、子应用模块(例如微服务)所属资源的标识中的至少一种。当应用200的至少一个子应用模块包括多个副本时,子应用模块所属资源的标识可以是子应用模块的各个副本所属资源的标识。该资源可以是物理机(physical machine)或者部署在物理机上的虚拟机(virtualmachine)、容器(container)等。
应用200的子应用模块启动后,该子应用模块的agent也随之启动。agent驻留在子应用模块的进程中,其生存期与子应用模块的进程相同。当子应用模块仍然可用时,agent可以向应用调试系统100发送发现消息。发现消息可以携带应用的标识、子应用模块的标识和子应用模块所属资源的标识。agent可以固定频率(例如500秒/次)发送发现消息,如此产生大量发现消息,agent可以利用批量消息传输协议将发现消息构造为结构数据流,将结构数据流写入结构管道文件(如第一结构管道文件),通过结构管道文件传输结构数据流。host agent还可以将结构数据流中的发现消息发送至队列中,例如发送至topic为inventory的队列中。调试模块104可以从队列中取出发现消息,从中获得结构信息,存储在缓存如Redis cache中。
进一步地,调试模块104还可以在获得资源列表时,向每个资源发送探索(ping)消息。当在预设时间内未接收到反馈消息,则将对应的资源从资源列表中删除。然后调试模块104将删除未反馈资源的资源列表发送至交互模块102。
在性能监控场景中,host agent可以创建监控管道文件,例如针对第一子应用模块创建第一监控管道文件。多个用户触发对第一子应用模块的性能监控操作,应用调试系统100生成多个用于请求监控第一子应用模块的性能的性能监控请求消息,host agent可以利用批量消息传输协议将多个性能监控请求消息构造为第一监控数据流。host agent可以将第一监控数据流写入第一监控管道文件,通过第一监控管道文件传输第一监控数据流。
第一子应用模块的agent从第一监控管道文件中读取第一监控数据流,获得多个性能监控请求消息。第一子应用模块的agent根据多个性能监控请求消息,启动对第一子应用模块的性能监控,生成多个性能监控响应消息。其中,性能监控响应消息中携带有监控指标值,如CPU使用率、内存使用率等。第一子应用模块的agent利用批量消息传输协议将多个性能监控响应消息构造为第一监控数据流,将该第一监控数据流写入第一监控管道文件,通过第一监控管道文件传输第一监控数据流,从而实现性能监控。
需要说明的是,上述调试管道文件、部署管道文件、结构管道文件以及监控管道文件可以是相同的管道文件,也可以是不同的管道文件。当调试调试管道文件、部署管道文件、结构管道文件以及监控管道文件为不同管道文件时,可以实现不同类型消息的隔离。
上文结合图1至图5对本申请实施例提供的调试消息的传输方法进行了详细介绍,下面将结合附图对本申请实施例提供的装置、设备进行介绍。
参见6所示的调试消息的传输装置的结构示意图,该装置600应用于应用调试系统,所述应用调试系统用于对应用的子应用模块进行代码调试。该装置600可以是hostagent或者host agent中的软件模块。在一些实施例中,该装置600也可以是agent或者agent中的软件模块。该装置600具体包括:
获取模块602,用于获取第一消息批,所述第一消息批中的每个调试消息为请求调试所述应用的第一子应用模块的调试请求消息或对所述第一子应用模块进行调试后的调试响应消息;
处理模块604,用于利用批量消息传输协议将所述第一消息批构造为第一调试数据流;
所述处理模块604,还用于将所述第一调试数据流写入第一调试管道文件,通过所述第一调试管道文件对所述第一调试数据流进行传输。
在一些可能的实现方式中,当每个调试消息为请求调试所述应用的第一子应用模块的调试请求消息时,每个调试请求消息中包括调试指令,不同调试指令来源于不同用户对所述第一子应用模块的调试选择。
在一些可能的实现方式中,所述批量消息传输协议用于定义初始数据流的格式,所述初始数据流包括内容字段;
所述处理模块604具体用于:
将所述第一消息批中的多个调试消息的内容写入所述初始数据流的内容字段,得到所述第一调试数据流。
在一些可能的实现方式中,所述初始数据流还包括规模字段;
所述处理模块604具体用于:
将所述第一消息批中的多个调试消息的规模写入所述初始数据流的规模字段,以及将所述多个调试消息的内容写入所述内容字段,得到所述第一调试数据流。
在一些可能的实现方式中,所述初始数据流还包括协议版本字段和头尺寸字段,所述协议版本字段用于指示所述数据流的协议版本,所述头尺寸字段用于确定基于所述协议版本的所述数据流中有效负载的起始地址。
在一些可能的实现方式中,所述应用的每个子应用模块对应一个代理,当每个调试消息为请求调试所述应用的第一子应用模块的调试请求消息时,所述调试请求消息的传输目的地为所述第一子应用模块的代理。
在一些可能的实现方式中,所述第一子应用模块的代理中部署有与所述第一子应用模块的编程语言对应的语言调试模块,所述语言调试模块用于将所述调试消息转换为与所述编程语言对应的调试消息。
在一些可能的实现方式中,装置600为host agent或host agent中的软件模块时,所述处理模块604还用于:
利用所述批量消息传输协议将更新的语言调试模块的代码构造为第一部署数据流;
将所述第一部署数据流写入第一部署管道文件,通过所述第一部署管道文件将所述第一部署数据流传输至所述第一子应用模块的代理。
在一些可能的实现方式中,所述应用被部署于生产环境,所述生产环境中包括至少一个节点,当每个调试消息为对所述第一子应用模块进行调试后的调试响应消息时,所述调试响应消息被传输至所述第一子应用模块所在节点的节点代理。
在一些可能的实现方式中,装置600为host agent或host agent中的软件模块时,所述获取模块602具体用于:
接收多个消息;
对所述多个消息进行分类,获得所述第一消息批和第二消息批,其中所述第二消息批中的每个调试消息为请求调试所述第二子应用模块的调试请求消息;
所述处理模块604还用于:
利用所述批量消息传输协议将所述第二消息批构造为第二调试数据流;
将所述第二调试数据流写入第二调试管道文件,通过所述第二调试管道文件将所述第二调试数据流传输至所述第二子应用模块对应的代理。
根据本申请实施例的调试消息的传输装置600可对应于执行本申请实施例中描述的方法,并且调试消息的传输装置600的各个模块/单元的上述和其它操作和/或功能分别为了实现图4所示实施例中的各个方法的相应流程,为了简洁,在此不再赘述。
本申请实施例还提供了一种计算设备700。该计算设备700可以是笔记本电脑、台式机等终端计算设备,也可以是云环境中的云计算设备(例如中心服务器),或者是边缘环境中的边缘计算设备(例如边缘服务器),或者是上述设备的组合。该计算设备700具体用于实现如图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用于与外部通信。例如,获取第一消息批,获取第二消息批,或者获取更新的语言调试模块的代码等等。
存储器704可以包括易失性存储器(volatile memory),例如随机存取存储器(random access memory,RAM)。存储器704还可以包括非易失性存储器(non-volatilememory),例如只读存储器(read-only memory,ROM),快闪存储器,机械硬盘(hard diskdrive,HDD)或固态硬盘(solid state drive,SSD)。
存储器704中存储有可执行代码,处理器702执行该可执行代码以执行前述调试消息的传输方法。具体地,在实现图6所示实施例的情况下,且图6实施例中所描述的调试消息的传输装置600的各模块为通过软件实现的情况下,执行图6中各模块功能所需的软件或程序代码存储在存储器704中。处理器702执行存储器704中存储的程序代码,以执行图4所示实施例中的调试消息的传输方法。
本申请实施例还提供了一种计算机可读存储介质。所述计算机可读存储介质可以是计算设备能够存储的任何可用介质或者是包含一个或多个可用介质的数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘)等。该计算机可读存储介质包括指令,所述指令指示计算设备执行上述应用于调试消息的传输装置600的调试消息的传输方法。
本申请实施例还提供了一种计算机程序产品。所述计算机程序产品包括一个或多个计算机指令。在计算设备上加载和执行所述计算机指令时,全部或部分地产生按照本申请实施例所述的流程或功能。
所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机或数据中心进行传输。
所述计算机程序产品可以为一个软件安装包,在需要使用前述应用调试方法的任一方法的情况下,可以下载该计算机程序产品并在计算设备上执行该计算机程序产品。
上述各个附图对应的流程或结构的描述各有侧重,某个流程或结构中没有详述的部分,可以参见其他流程或结构的相关描述。
Claims (22)
1.一种调试消息的传输方法,其特征在于,所述方法应用于应用调试系统,所述应用调试系统用于对应用的子应用模块进行代码调试,包括:
获取第一消息批,所述第一消息批中的每个调试消息为请求调试所述应用的第一子应用模块的调试请求消息或对所述第一子应用模块进行调试后的调试响应消息;
利用批量消息传输协议将所述第一消息批构造为第一调试数据流;
将所述第一调试数据流写入第一调试管道文件,通过所述第一调试管道文件对所述第一调试数据流进行传输。
2.根据权利要求1所述的方法,其特征在于,当每个调试消息为请求调试所述应用的第一子应用模块的调试请求消息时,每个调试请求消息中包括调试指令,不同调试指令来源于不同用户对所述第一子应用模块的调试选择。
3.根据权利要求1或2所述的方法,其特征在于,所述批量消息传输协议用于定义初始数据流的格式,所述初始数据流包括内容字段,所述利用批量消息传输协议将所述第一消息批构造为第一调试数据流,包括:
将所述第一消息批中的多个调试消息的内容写入所述初始数据流的内容字段,得到所述第一调试数据流。
4.根据权利要求3所述的方法,其特征在于,所述初始数据流还包括规模字段,所述利用批量消息传输协议将所述第一消息批构造为第一调试数据流,包括:
将所述第一消息批中的多个调试消息的规模写入所述初始数据流的规模字段,以及将所述多个调试消息的内容写入所述内容字段,得到所述第一调试数据流。
5.根据权利要求3或4所述的方法,其特征在于,所述初始数据流还包括协议版本字段和头尺寸字段,所述协议版本字段用于指示所述数据流的协议版本,所述头尺寸字段用于确定基于所述协议版本的所述数据流中有效负载的起始地址。
6.根据权利要求1至5任一项所述的方法,其特征在于,所述应用的每个子应用模块对应一个代理,当每个调试消息为请求调试所述应用的第一子应用模块的调试请求消息时,所述调试请求消息的传输目的地为所述第一子应用模块的代理。
7.根据权利要求6所述的方法,其特征在于,所述第一子应用模块的代理中部署有与所述第一子应用模块的编程语言对应的语言调试模块,所述语言调试模块用于将所述调试消息转换为与所述编程语言对应的调试消息。
8.根据权利要求7所述的方法,其特征在于,所述方法还包括:
利用所述批量消息传输协议将更新的语言调试模块的代码构造为第一部署数据流;
将所述第一部署数据流写入第一部署管道文件,通过所述第一部署管道文件将所述第一部署数据流传输至所述第一子应用模块的代理。
9.根据权利要求6至8任一项所述的方法,其特征在于,所述应用被部署于生产环境,所述生产环境中包括至少一个节点,当每个调试消息为对所述第一子应用模块进行调试后的调试响应消息时,所述调试响应消息被传输至所述第一子应用模块所在节点的节点代理。
10.根据权利要求1至9任一项所述的方法,其特征在于,所述方法还包括:
接收多个消息;对所述多个消息进行分类,获得所述第一消息批和第二消息批,其中所述第二消息批中的每个调试消息为请求调试所述第二子应用模块的调试请求消息;
利用所述批量消息传输协议将所述第二消息批构造为第二调试数据流;
将所述第二调试数据流写入第二调试管道文件,通过所述第二调试管道文件将所述第二调试数据流传输至所述第二子应用模块对应的代理。
11.一种调试消息的传输装置,其特征在于,所述装置应用于应用调试系统,所述应用调试系统用于对应用的子应用模块进行代码调试,所述装置包括:
获取模块,用于获取第一消息批,所述第一消息批中的每个调试消息为请求调试所述应用的第一子应用模块的调试请求消息或对所述第一子应用模块进行调试后的调试响应消息;
处理模块,用于利用批量消息传输协议将所述第一消息批构造为第一调试数据流;
所述处理模块,还用于将所述第一调试数据流写入第一调试管道文件,通过所述第一调试管道文件对所述第一调试数据流进行传输。
12.根据权利要求11所述的装置,其特征在于,当每个调试消息为请求调试所述应用的第一子应用模块的调试请求消息时,每个调试请求消息中包括调试指令,不同调试指令来源于不同用户对所述第一子应用模块的调试选择。
13.根据权利要求11或12所述的装置,其特征在于,所述批量消息传输协议用于定义初始数据流的格式,所述初始数据流包括内容字段;
所述处理模块具体用于:
将所述第一消息批中的多个调试消息的内容写入所述初始数据流的内容字段,得到所述第一调试数据流。
14.根据权利要求13所述的装置,其特征在于,所述初始数据流还包括规模字段;
所述处理模块具体用于:
将所述第一消息批中的多个调试消息的规模写入所述初始数据流的规模字段,以及将所述多个调试消息的内容写入所述内容字段,得到所述第一调试数据流。
15.根据权利要求13或14所述的装置,其特征在于,所述初始数据流还包括协议版本字段和头尺寸字段,所述协议版本字段用于指示所述数据流的协议版本,所述头尺寸字段用于确定基于所述协议版本的所述数据流中有效负载的起始地址。
16.根据权利要求11至15任一项所述的装置,其特征在于,所述应用的每个子应用模块对应一个代理,当每个调试消息为请求调试所述应用的第一子应用模块的调试请求消息时,所述调试请求消息的传输目的地为所述第一子应用模块的代理。
17.根据权利要求16所述的装置,其特征在于,所述第一子应用模块的代理中部署有与所述第一子应用模块的编程语言对应的语言调试模块,所述语言调试模块用于将所述调试消息转换为与所述编程语言对应的调试消息。
18.根据权利要求17所述的装置,其特征在于,所述处理模块还用于:
利用所述批量消息传输协议将更新的语言调试模块的代码构造为第一部署数据流;
将所述第一部署数据流写入第一部署管道文件,通过所述第一部署管道文件将所述第一部署数据流传输至所述第一子应用模块的代理。
19.根据权利要求16至18任一项所述的装置,其特征在于,所述应用被部署于生产环境,所述生产环境中包括至少一个节点,当每个调试消息为对所述第一子应用模块进行调试后的调试响应消息时,所述调试响应消息被传输至所述第一子应用模块所在节点的节点代理。
20.根据权利要求11至19任一项所述的装置,其特征在于,所述获取模块具体用于:
接收多个消息;
对所述多个消息进行分类,获得所述第一消息批和第二消息批,其中所述第二消息批中的每个调试消息为请求调试所述第二子应用模块的调试请求消息;
所述处理模块还用于:
利用所述批量消息传输协议将所述第二消息批构造为第二调试数据流;
将所述第二调试数据流写入第二调试管道文件,通过所述第二调试管道文件将所述第二调试数据流传输至所述第二子应用模块对应的代理。
21.一种计算设备,其特征在于,所述计算设备包括处理器和存储器;
所述处理器用于执行所述存储器中存储的指令,以使得所述计算设备执行如权利要求1至10中任一项所述的方法。
22.一种计算机可读存储介质,其特征在于,包括计算机程序指令,当所述计算机程序指令由计算设备执行时,所述计算设备执行如权利要求1至10中任一项所述的方法。
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 |
---|---|
CN113722116A true CN113722116A (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 (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010819208.1A Pending CN113722204A (zh) | 2020-05-26 | 2020-08-14 | 一种应用调试方法、系统、设备及介质 |
Family Applications After (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
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) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117435201A (zh) * | 2022-07-13 | 2024-01-23 | 华为云计算技术有限公司 | 分布式服务生成方法、系统、计算设备及存储介质 |
CN115242771B (zh) * | 2022-09-19 | 2023-01-31 | 武汉海微科技有限公司 | 设备调试方法、装置、设备及存储介质 |
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
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 |
CN113722205A (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 |
US20230092858A1 (en) | 2023-03-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113722116A (zh) | 一种调试消息的传输方法、装置、设备及介质 | |
KR20180019674A (ko) | 컨테이너들에서 고립된 애플리케이션들의 모니터링 | |
CN111740948B (zh) | 数据包发布方法、动态更新方法、装置、设备及介质 | |
US10162727B2 (en) | Activity tracing diagnostic systems and methods | |
US10621124B2 (en) | Method, device and computer program product for enabling SR-IOV functions in endpoint device | |
JP2011118587A (ja) | 複数サーバによる連携サービス実行システム | |
WO2022199283A1 (zh) | 用于确定调用栈栈帧的对象的方法、装置、设备和介质 | |
WO2019029451A1 (zh) | 发布移动应用的方法和电子设备 | |
CN108804100B (zh) | 创建界面元素的方法、装置、存储介质及移动终端 | |
WO2022199284A1 (zh) | 调用栈回溯方法、装置、设备和介质 | |
CN110990081A (zh) | 微服务注册、发现方法及装置、存储介质及电子设备 | |
CN113050984A (zh) | 资源调取方法、装置、电子设备及存储介质 | |
CN111385255B (zh) | 一种异步调用实现方法、装置、服务器及服务器集群 | |
US10353700B1 (en) | Code base sharing between standalone and web-based versions of an application via an emulated network communication channel | |
JP5962493B2 (ja) | プログラム、情報処理装置およびオブジェクト送信方法 | |
JP2005228183A (ja) | プログラム実行方法、および、プログラム実行のための計算機システム | |
WO2023083071A1 (zh) | 视图交互方法、装置、电子设备及计算机可读介质 | |
CN108496157B (zh) | 使用扩展接口提供运行时跟踪的系统和方法 | |
US20110321043A1 (en) | System, Method and Program Product for Native Interface Optimization of Read-Only Arrays | |
CN106484375B (zh) | 一种指令块加载方法、软交换设备及系统 | |
CN114666322A (zh) | 断点续传方法、装置和电子设备 | |
CN110661852A (zh) | 云环境中的业务处理方法及装置 | |
CN114900485B (zh) | 访问网络文件存储的方法、电子设备及系统 | |
CN112988592B (zh) | 代码检测方法、装置、设备和存储介质 | |
CN113505036B (zh) | 一种应用监控方法、客户端和服务器 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20220218 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 |