CN111367796B - 应用程序调试方法及装置 - Google Patents
应用程序调试方法及装置 Download PDFInfo
- Publication number
- CN111367796B CN111367796B CN202010119893.7A CN202010119893A CN111367796B CN 111367796 B CN111367796 B CN 111367796B CN 202010119893 A CN202010119893 A CN 202010119893A CN 111367796 B CN111367796 B CN 111367796B
- Authority
- CN
- China
- Prior art keywords
- source code
- product
- running
- application program
- debugging
- 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.)
- Active
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/3604—Software analysis for verifying properties of programs
- G06F11/3608—Software analysis for verifying properties of programs using formal methods, e.g. model checking, abstract interpretation
-
- 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
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/366—Software debugging using diagnostics
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Debugging And Monitoring (AREA)
- Stored Programmes (AREA)
Abstract
本发明提供了应用程序调试方法及装置。在服务端运行一应用的应用程序,其运行依赖于至少一制品,制品的构建依赖于至少一源代码文件;若运行一制品的一行指令时异常,根据构建该制品时生成的第一调试信息以生成各第二调试信息,异常行指令的运行依赖于各第二调试信息所指向的源代码;对外提供分别包括各第二调试信息的各超链接;根据外部所请求打开的超链接的第二调试信息,加载在运行应用程序时所使用的源代码文件集合并定位到其中的特定源代码文件的特定行源代码,该第二调试信息指向该特定行源代码;在定位处设置断点,重新运行应用程序,以在运行至断点处运行中断时对外提供中断通知。本方案能够在服务端运行的应用程序发生异常时实现调试。
Description
技术领域
本发明涉及计算机技术领域,特别涉及应用程序调试方法及装置。
背景技术
DevOps(过程、方法与***的统称,是Development和Operations的组合词)和容器化技术允许应用快速部署。应用或称应用服务,其应用程序可在Web端或服务端运行。其中,在Web端通常运行解释型程序,例如JavaScript,在服务端通常运行编译型程序,例如Java、.Net。
基于现代浏览器提供的实时调试功能,Web端运行的应用程序发生异常时,开发人员可以从异常发生时的程序调用堆栈入口,直接定位导致异常的程序代码,并就地启动调试。
考虑到应用程序在运行时难免发生异常,故有必要提供一种服务端应用程序调试方式,以在服务端运行的应用程序发生异常时实现调试。
发明内容
本发明提供了应用程序调试方法及装置,能够在服务端运行的应用程序发生异常时实现调试。
为了达到上述目的,本发明是通过如下技术方案实现的:
第一方面,本发明提供了应用程序调试方法,包括:
在服务端运行一应用的应用程序,其中,所述应用程序的运行依赖于至少一个制品,每一个所述制品的构建均依赖于至少一个源代码文件;
若运行第一制品的目标行指令时发生异常,获取在构建所述第一制品时所生成的第一调试信息,其中,所述第一制品为所述至少一个制品中的任一制品,所述目标行指令为所述第一制品的任一行指令;
根据所述第一调试信息生成对应于所述目标行指令的至少一个第二调试信息,其中,不同第二调试信息指向的源代码不同,所述目标行指令的运行依赖于每一个所述第二调试信息所指向的源代码;
生成分别包括有所述至少一个第二调试信息的至少一个超链接,并对外提供所述至少一个超链接;当外部请求打开所述至少一个超链接中的任一第一超链接时,根据所述第一超链接包括的第二调试信息,加载在运行所述应用程序时所使用的第一源代码文件集合,并定位到所述第一源代码文件集合中的特定源代码文件的特定行源代码,其中,所述第一超链接包括的第二调试信息指向所述特定行源代码;
在所述特定行源代码处设置断点,并在所述服务端重新运行所述应用程序,使得运行至所述断点处时运行中断,并在运行中断时对外提供中断通知。
进一步地,任一所述制品的制品版本号均包括:该制品的制品标识、在运行特定应用程序时所使用的源代码文件集合的文件集版本号,其中,该特定应用程序的运行依赖于该制品,不同制品版本号包括的制品标识和/或文件集版本号不同;
任一所述源代码文件的文件版本号均包括:该源代码文件的文件标识和该源代码文件的版本标识,其中,不同文件版本号包括的文件标识和/或版本标识不同;
所述第一调试信息包括:所述第一制品的制品版本号、所述第一制品中的每一行指令所对应的文件标识和行号。
进一步地,所述根据所述第一调试信息生成对应于所述目标行指令的至少一个第二调试信息,包括:
确定所述第一调试信息包括的所述第一制品的制品版本号;
确定所述第一调试信息中的、所述目标行指令所对应的目标文件标识和目标行号;
生成包括所述第一制品的制品版本号、所述目标文件标识、所述目标行号的第二调试信息;
根据所述第一制品的制品版本号中的文件集版本号,确定在运行所述应用程序时所使用的第一源代码文件集合;
确定所述第一源代码文件集合中的目标源代码文件的目标行源代码,其中,所述目标源代码文件的文件标识为所述目标文件标识,所述目标行源代码的行号为所述目标行号;
确定所述第一源代码文件集合中的每一个目的行源代码,其中,在运行所述目标行源代码时直接或间接依赖于各个所述目的行源代码;
所述目的行源代码的个数不为零时,针对每一个所述目的行源代码,均执行:确定所述第一源代码文件集合中的、包括该目的行源代码的目的源代码文件的目的文件标识,确定该目的行源代码在该目的源代码文件中的目的行号;生成包括所述第一制品的制品版本号、所述目的文件标识、所述目的行号的第二调试信息。
进一步地,所述根据所述第一超链接包括的第二调试信息,加载在运行所述应用程序时所使用的第一源代码文件集合,并定位到所述第一源代码文件集合中的特定源代码文件的特定行源代码,包括:
获取所述第一超链接包括的第二调试信息;
根据该第二调试信息包括的制品版本号中的文件集版本号,加载在运行所述应用程序时所使用的第一源代码文件集合;
根据该第二调试信息中的文件标识和行号,定位到所述第一源代码文件集合中的特定源代码文件的特定行源代码,其中,所述特定源代码文件的文件标识为该第二调试信息中的文件标识,所述特定行源代码的行号为该第二调试信息中的行号。
进一步地,每一个所述超链接均指向预设的调试功能;
所述在服务端运行一应用的应用程序,包括:在服务端的第一进程中运行一应用的应用程序;
所述在所述服务端重新运行所述应用程序,包括:在所述第一进程中重新运行所述应用程序;
该方法进一步包括:启动所述调试功能以运行调试进程,利用所述调试进程监控已重新运行所述应用程序的所述第一进程;
所述在运行中断时对外提供中断通知,包括:在所述调试进程监控到所述第一进程运行中断时,利用所述调试功能对外提供中断通知。
进一步地,所述对外提供所述至少一个超链接,包括:通过运行在Web浏览器上的集成开发环境,对外提供所述至少一个超链接;
所述在运行中断时对外提供中断通知,包括:在运行中断时通过所述集成开发环境对外提供中断通知;
所述根据所述第一超链接包括的第二调试信息,加载在运行所述应用程序时所使用的第一源代码文件集合,包括:
根据所述第一超链接包括的第二调试信息,追溯到在运行所述应用程序时所使用的第一源代码文件集合的文件集版本号;
启动所述集成开发环境加载具有该文件集版本号的所述第一源代码文件集合。
进一步地,所述中断通知包括:所述应用程序运行中断时的运行位置、调用堆栈、内存报告中的任意一个或多个。
第二方面,本发明提供了用于执行上述第一方面中任一所述应用程序调试方法的应用程序调试装置,包括:
运行单元、处理单元、交互单元;
其中,所述运行单元,用于在服务端运行一应用的应用程序,其中,所述应用程序的运行依赖于至少一个制品,每一个所述制品的构建均依赖于至少一个源代码文件;
所述处理单元,用于执行下述操作:
若运行第一制品的目标行指令时发生异常,获取在构建所述第一制品时所生成的第一调试信息,其中,所述第一制品为所述至少一个制品中的任一制品,所述目标行指令为所述第一制品的任一行指令;
根据所述第一调试信息生成对应于所述目标行指令的至少一个第二调试信息,其中,不同第二调试信息指向的源代码不同,所述目标行指令的运行依赖于每一个所述第二调试信息所指向的源代码;生成分别包括有所述至少一个第二调试信息的至少一个超链接,并触发所述交互单元以对外提供所述至少一个超链接;当外部请求打开所述至少一个超链接中的任一第一超链接时,根据所述第一超链接包括的第二调试信息,加载在运行所述应用程序时所使用的第一源代码文件集合,并定位到所述第一源代码文件集合中的特定源代码文件的特定行源代码,其中,所述第一超链接包括的第二调试信息指向所述特定行源代码;在所述特定行源代码处设置断点,并触发所述运行单元以在所述服务端重新运行所述应用程序,使得运行至所述断点处时运行中断,并在运行中断时触发所述交互单元以对外提供中断通知。
第三方面,本发明提供了应用程序调试装置,包括:至少一个存储器和至少一个处理器;
所述至少一个存储器,用于存储机器可读程序;
所述至少一个处理器,用于调用所述机器可读程序,执行上述第一方面中任一所述的方法。
第四方面,本发明提供了计算机可读介质,所述计算机可读介质上存储有计算机指令,所述计算机指令在被处理器执行时,使所述处理器执行上述第一方面中任一所述的方法。
本发明提供了应用程序调试方法及装置。在服务端运行一应用的应用程序,其运行依赖于至少一制品,制品的构建依赖于至少一源代码文件;若运行一制品的一行指令时异常,根据构建该制品时生成的第一调试信息以生成各第二调试信息,异常行指令的运行依赖于各第二调试信息所指向的源代码;对外提供分别包括各第二调试信息的各超链接;根据外部所请求打开的超链接的第二调试信息,加载在运行应用程序时所使用的源代码文件集合并定位到其中的特定源代码文件的特定行源代码,该第二调试信息指向该特定行源代码;在定位处设置断点,重新运行应用程序,以在运行至断点处运行中断时对外提供中断通知。本发明能够在服务端运行的应用程序发生异常时实现调试。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明一实施例提供的一种应用程序调试方法的流程图;
图2是本发明一实施例提供的一种应用的应用结构的示意图;
图3是本发明一实施例提供的一种应用程序调试***的示意图;
图4是本发明一实施例提供的一种应用程序调试装置的示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例,基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
如图1所示,本发明实施例提供了一种应用程序调试方法,可以包括以下步骤:
步骤101:在服务端运行一应用的应用程序,其中,所述应用程序的运行依赖于至少一个制品,每一个所述制品的构建均依赖于至少一个源代码文件。
步骤102:若运行第一制品的目标行指令时发生异常,获取在构建所述第一制品时所生成的第一调试信息,其中,所述第一制品为所述至少一个制品中的任一制品,所述目标行指令为所述第一制品的任一行指令。
步骤103:根据所述第一调试信息生成对应于所述目标行指令的至少一个第二调试信息,其中,不同第二调试信息指向的源代码不同,所述目标行指令的运行依赖于每一个所述第二调试信息所指向的源代码。
步骤104:生成分别包括有所述至少一个第二调试信息的至少一个超链接,并对外提供所述至少一个超链接;当外部请求打开所述至少一个超链接中的任一第一超链接时,根据所述第一超链接包括的第二调试信息,加载在运行所述应用程序时所使用的第一源代码文件集合,并定位到所述第一源代码文件集合中的特定源代码文件的特定行源代码,其中,所述第一超链接包括的第二调试信息指向所述特定行源代码。
步骤105:在所述特定行源代码处设置断点,并在所述服务端重新运行所述应用程序,使得运行至所述断点处时运行中断,并在运行中断时对外提供中断通知。
本发明实施例提供了应用程序调试方法,该方法包括:在服务端运行一应用的应用程序,其运行依赖于至少一制品,制品的构建依赖于至少一源代码文件;若运行一制品的一行指令时异常,根据构建该制品时生成的第一调试信息以生成各第二调试信息,异常行指令的运行依赖于各第二调试信息所指向的源代码;对外提供分别包括各第二调试信息的各超链接;根据外部所请求打开的超链接的第二调试信息,加载在运行应用程序时所使用的源代码文件集合并定位到其中的特定源代码文件的特定行源代码,该第二调试信息指向该特定行源代码;在定位处设置断点,重新运行应用程序,以在运行至断点处运行中断时对外提供中断通知。本发明实施例能够在服务端运行的应用程序发生异常时实现调试。
请参考图2所示的应用的应用结构,可知应用生命周期所涉及到的组成要素有元素、任务和源代码文件。其中,元素有应用、镜像、制品,对应地,任务有服务编排任务、镜像构建任务、制品构建任务。基于应用结构,可以由若干源代码文件构建相应制品,由若干制品构建相应镜像,由若干镜像构建应用。
需要说明的是,针对任一元素来说,应用结构中的元素是对元素的声明,而生成的元素是实在的产物。不同次生成同一元素所基于的源代码文件的文件内容不同时,生成的产物均为该元素的元素产物,但这些元素产物分别对应于不同的版本。本发明实施例中,运行的制品即可为构建出的任一制品产物。
为便于技术描述,下述的制品可以理解为制品产物,下述的应用可以理解为应用产物。
由源代码文件构建出的制品为可执行文件,运行应用的应用程序时,会运行各个相关制品,即会运行制品的每一行计算机指令。如此,为便于异常信息的追溯定位,在构建制品时可生成其第一调试信息,该第一调试信息中可记录制品与相应源代码文件间的映射关系。比如,该第一调试信息可以包括制品中的指令与源代码文件中的源代码的映射关系。
当运行任一制品的任一行指令时发生异常,即可根据该制品的第一调试信息中的映射关系,找到该异常行指令所直接指向的源代码。
此外,由于一行源代码的执行还可依赖于另一源代码,该另一源代码的执行又可依赖于再一源代码,如此循环,故可根据该异常行指令所直接指向的源代码,进而找到该异常行指令所间接指向的每一个源代码。通常情况下,找到的这些源代码分别位于不同的源代码文件中。
基于上述内容可知,该异常行指令的运行依赖于找到的每一个源代码,基于找到的这些源代码,即可生成各自对应的第二调试信息。
举例来说,异常行指令可映射到源代码1,源代码1的执行依赖于源代码2,源代码2的执行依赖于源代码3,源代码3的执行不依赖于其他源代码,则根据第一调试信息可生成3个第二调试信息,这3个第二调试信息分别指向源代码1、源代码2和源代码3。
由于异常行指令的异常运行,可以是该异常行指令所指向的任一源代码出现错误而导致的,故可将这些源代码的标识信息提供给开发人员,以便其可按需确定针对哪一源代码进行调试。
因此,基于上述内容,可生成3个超链接,这3个超链接分别包含这3个第二调试信息,每一个超链接包含一个第二调试信息。然后,即可将包含这3个超链接的异常信息提供给外部,以便开发人员查看各个第二调试信息。
开发人员根据各个超链接中的第二调试信息所指向的源代码,可通过点击任一超链接,以请求针对该超链接中的第二调试信息所指向的源代码进行调试。
本发明实施例中,服务端的***可提供调试入口,故应用程序运行异常时,开发人员仅需操作鼠标点击某个调试入口,***即可自动开始调试,开发者的操作简单。
假设开发人员点击的是指向源代码1的超链接,则可根据该超链接中的第二调试信息,加载运行应用程序时所使用的源代码文件集合。当然,该源代码文件集合中,应包括有源代码1所在的源代码文件,进而定位到源代码1,从而可以在源代码1处设置断点。
由于已设置断点,则重新运行应用程序时,将会在运行至断点处时中断,并对外提供中断通知,以便开发人员检查问题。比如,开发人员可以查看运行中断时的内存报告、调用堆栈等,还可按需发送调试指令,从而完成应用程序调试操作。
综上所述,本发明实施例提供的这一应用程序调试方法,能够在服务端运行的应用程序发生异常时自动化地启动调试过程,以实现应用程序调试,人为操作简单,基本实现了应用程序调试的自动化执行,节省了开发人员的工作,提高了应用程序调试效率。
上面提到,不同次生成同一元素所基于的源代码文件不完全相同时,生成的元素产物分别对应于不同的版本。
因此,在本发明一个实施例中,任一所述制品的制品版本号均包括:该制品的制品标识、在运行特定应用程序时所使用的源代码文件集合的文件集版本号,其中,该特定应用程序的运行依赖于该制品,不同制品版本号包括的制品标识和/或文件集版本号不同;
任一所述源代码文件的文件版本号均包括:该源代码文件的文件标识和该源代码文件的版本标识,其中,不同文件版本号包括的文件标识和/或版本标识不同;
所述第一调试信息包括:所述第一制品的制品版本号、所述第一制品中的每一行指令所对应的文件标识和行号。
举例来说,根据应用Y1的应用结构,可知应用Y1的应用程序的运行依赖于制品Z1和制品Z2,制品Z1的构建依赖于源代码文件A和源代码文件B,制品Z2的构建依赖于源代码文件C和源代码文件D。
请参考下述表1,当存在各个源代码文件的最初版本,相应文件版本号分别为A-1、B-1、C-1、D-1时,可生成文件集版本号为V1的源代码文件集V1,源代码文件集V1包括源代码文件A-1、源代码文件B-1、源代码文件C-1、源代码文件D-1。
根据源代码文件集V1和应用Y1的应用结构,可以构建制品Z1-1和制品Z2-1,进而生成应用Y1-1。在服务端运行应用Y1-1的应用程序时,是基于源代码文件集V1来实现的,并依赖于制品Z1-1和制品Z2-1。
以源代码文件B-1为例,B-1为其文件版本号,B为文件标识,后缀1为版本标识。以制品Z1-1为例,Z1-1为其制品版本号,Z1为制品标识,后缀1为文件集版本号(对应于V1)。
假设根据源代码文件A-1和源代码文件B-1构建制品Z1-1时,源代码文件A-1中的第10行对应于制品Z1-1中的第x行计算机指令,则制品Z1-1的第一调试信息中,该第x行指令对应的文件标识为A,对应的行号为10。
表1
文件集版本号 | 文件版本号 | 制品版本号 | 应用版本号 |
V1 | A-1、B-1、C-1、D-1 | Z1-1、Z2-1 | Y1-1 |
V2 | A-1、B-2、C-1、D-1 | Z1-2、Z2-2 | Y1-2 |
若开发人员在一次源代码修改过程中,仅修改了源代码文件B,并提供了源代码文件B-2,请参考上述表1,可生成文件集版本号为V2的源代码文件集V2,源代码文件集V2包括源代码文件A-1、源代码文件B-2、源代码文件C-1、源代码文件D-1。
根据源代码文件集V2和应用Y1的应用结构,可以构建制品Z1-2。此外,由于未修改源代码文件C和源代码文件D,故可无需重复构建制品2,仍使用上一次构建出的制品Z2-1,并记录制品Z2-2=制品Z2-1,进而生成应用Y1-2。在服务端运行应用Y1-2的应用程序时,是基于源代码文件集V2来实现的,并依赖于制品Z1-2和制品Z2-2。
以源代码文件B-2为例,B-2为其文件版本号,B为文件标识,后缀2为版本标识。以制品Z1-2为例,Z1-2为其制品版本号,Z1为制品标识,后缀2为文件集版本号(对应于V2)。
基于上述内容,在本发明一个实施例中,为了说明一种根据第一调试信息生成各个第二调试信息的可能实现方式,所以,上述步骤103中,所述根据所述第一调试信息生成对应于所述目标行指令的至少一个第二调试信息,包括:
确定所述第一调试信息包括的所述第一制品的制品版本号;确定所述第一调试信息中的、所述目标行指令所对应的目标文件标识和目标行号;生成包括所述第一制品的制品版本号、所述目标文件标识、所述目标行号的第二调试信息;根据所述第一制品的制品版本号中的文件集版本号,确定在运行所述应用程序时所使用的第一源代码文件集合;确定所述第一源代码文件集合中的目标源代码文件的目标行源代码,其中,所述目标源代码文件的文件标识为所述目标文件标识,所述目标行源代码的行号为所述目标行号;确定所述第一源代码文件集合中的每一个目的行源代码,其中,在运行所述目标行源代码时直接或间接依赖于各个所述目的行源代码;所述目的行源代码的个数不为零时,针对每一个所述目的行源代码,均执行:确定所述第一源代码文件集合中的、包括该目的行源代码的目的源代码文件的目的文件标识,确定该目的行源代码在该目的源代码文件中的目的行号;生成包括所述第一制品的制品版本号、所述目的文件标识、所述目的行号的第二调试信息。
举例来说,假设运行上述制品Z1-1的第x行指令时发生异常,则可获取制品Z1-1的第一调试信息,并确定该第一调试信息中,该第x行指令对应的文件标识A和行号10。如此,可生成包括Z1-1、A、10的第二调试信息。该第二调试信息指向源代码文件A-1的第10行源代码。之后,根据Z1-1,可确定出运行应用Y1的应用程序时所使用的源代码文件集合V1。
假设源代码文件A-1的第10行源代码的运行,还依赖于源代码文件集合V1中的源代码文件C-1的第5行源代码,且源代码文件C-1的第5行源代码的运行不依赖于源代码文件集合V1中的其他源代码,则可生成包括Z1-1、C、5的第二调试信息。
如此,可生成两个超链接,一个超链接可向开发人员展示调试信息:Z1-1、A、10,另一超链接可向开发人员展示调试信息:Z1-1、C、5。
基于上述内容,在本发明一个实施例中,为了说明一种定位特定行源代码的可能实现方式,所以,上述步骤104中,所述根据所述第一超链接包括的第二调试信息,加载在运行所述应用程序时所使用的第一源代码文件集合,并定位到所述第一源代码文件集合中的特定源代码文件的特定行源代码,包括:
获取所述第一超链接包括的第二调试信息;根据该第二调试信息包括的制品版本号中的文件集版本号,加载在运行所述应用程序时所使用的第一源代码文件集合;根据该第二调试信息中的文件标识和行号,定位到所述第一源代码文件集合中的特定源代码文件的特定行源代码,其中,所述特定源代码文件的文件标识为该第二调试信息中的文件标识,所述特定行源代码的行号为该第二调试信息中的行号。
举例来说,假设开发人员点击的是上述展示有调试信息:Z1-1、A、10的超链接,则根据Z1-1中的文件集版本号,可以加载到源代码文件集V1,源代码文件集V1包括源代码文件A-1、源代码文件B-1、源代码文件C-1、源代码文件D-1,进而根据A和10,可以定位到源代码文件A-1的第10行。
本发明一个实施例中,可以存在如图3所示的应用程序调试***,该***可以包括应用配置、集成和部署***,以及包括集成开发环境、运行环境、调试服务、版本控制***、制品库、镜像库等部件或功能。
其中,集成开发环境可用于加载源代码文件集、修改源代码文件等;
应用配置、集成和部署***可用于根据源代码文件生成制品,并部署应用到运行环境;
运行环境可分为开发环境、测试环境、生产环境,运行环境可用于启动服务器进程、加载并运行制品、对外提供服务等。
调试服务可用于负责启动调试进程,调度应用配置、集成和部署***,分别与集成开发环境、运行环境进行通信等;
调试服务可用于运行调试进程,对运行应用程序的目标进程进行监控;
版本控制***可用于源代码文件、源代码文件集、制品、应用等的版本控制;
文件服务器可用于存储源代码文件等。
本发明实施例中,运行环境所运行的应用可以由应用配置、集成和部署***产生,该***可负责将源代码文件组织为源代码工程,再由源代码工程生成制品,再由制品构建镜像,并部署到运行环境,成为可对外提供服务的应用。对于部署到运行环境的应用,***记录所使用的制品版本号,记录生成制品时制品指令与源代码间的映射关系。根据制品版本号、映射关系,该***可以追溯并定位到异常制品所对应的源代码,进而实现应用程序的调试。
基于上述内容,在本发明一个实施例中,请结合图3,每一个所述超链接均指向预设的调试功能;
所述在服务端运行一应用的应用程序,包括:在服务端的第一进程中运行一应用的应用程序;
所述在所述服务端重新运行所述应用程序,包括:在所述第一进程中重新运行所述应用程序;
该方法进一步包括:启动所述调试功能以运行调试进程,利用所述调试进程监控已重新运行所述应用程序的所述第一进程;
所述在运行中断时对外提供中断通知,包括:在所述调试进程监控到所述第一进程运行中断时,利用所述调试功能对外提供中断通知。
基于上述内容,在本发明一个实施例中,请结合图3,所述对外提供所述至少一个超链接,包括:通过运行在Web浏览器上的集成开发环境,对外提供所述至少一个超链接;
所述在运行中断时对外提供中断通知,包括:在运行中断时通过所述集成开发环境对外提供中断通知;
所述根据所述第一超链接包括的第二调试信息,加载在运行所述应用程序时所使用的第一源代码文件集合,包括:根据所述第一超链接包括的第二调试信息,追溯到在运行所述应用程序时所使用的第一源代码文件集合的文件集版本号;启动所述集成开发环境加载具有该文件集版本号的所述第一源代码文件集合。
本发明实施例中,服务端可将异常信息发送至客户端浏览器,并提供超链接,开发人员点击后,服务端的***将启动自动化的调试步骤。
在本发明一个实施例中,所述中断通知包括:所述应用程序运行中断时的运行位置、调用堆栈、内存报告中的任意一个或多个。
本发明实施例中,开发人员可通过浏览器访问集成开发环境,以获得调试相关信息,包括运行位置、调用堆栈和内存报告等,并可向调试进程发送调试指令。
如图4所示,本发明实施例提供了一种用于执行上述任一所述应用程序调试方法的应用程序调试装置,可以包括:运行单元401、处理单元402、交互单元403;
其中,所述运行单元401,用于在服务端运行一应用的应用程序,其中,所述应用程序的运行依赖于至少一个制品,每一个所述制品的构建均依赖于至少一个源代码文件;
所述处理单元402,用于执行下述操作:
若运行第一制品的目标行指令时发生异常,获取在构建所述第一制品时所生成的第一调试信息,其中,所述第一制品为所述至少一个制品中的任一制品,所述目标行指令为所述第一制品的任一行指令;
根据所述第一调试信息生成对应于所述目标行指令的至少一个第二调试信息,其中,不同第二调试信息指向的源代码不同,所述目标行指令的运行依赖于每一个所述第二调试信息所指向的源代码;生成分别包括有所述至少一个第二调试信息的至少一个超链接,并触发所述交互单元403以对外提供所述至少一个超链接;当外部请求打开所述至少一个超链接中的任一第一超链接时,根据所述第一超链接包括的第二调试信息,加载在运行所述应用程序时所使用的第一源代码文件集合,并定位到所述第一源代码文件集合中的特定源代码文件的特定行源代码,其中,所述第一超链接包括的第二调试信息指向所述特定行源代码;在所述特定行源代码处设置断点,并触发所述运行单元401以在所述服务端重新运行所述应用程序,使得运行至所述断点处时运行中断,并在运行中断时触发所述交互单元403以对外提供中断通知。
上述装置内的各单元之间的信息交互、执行过程等内容,由于与本发明方法实施例基于同一构思,具体内容可参见本发明方法实施例中的叙述,此处不再赘述。
本发明实施例还提供了一种计算机可读介质,存储用于使一计算机执行如本文所述的应用程序调试方法的指令。具体地,可以提供配有存储介质的***或者装置,在该存储介质上存储着实现上述实施例中任一实施例的功能的软件程序代码,且使该***或者装置的计算机(或CPU或MPU)读出并执行存储在存储介质中的程序代码。
在这种情况下,从存储介质读取的程序代码本身可实现上述实施例中任何一项实施例的功能,因此程序代码和存储程序代码的存储介质构成了本发明的一部分。
用于提供程序代码的存储介质实施例包括软盘、硬盘、磁光盘、光盘(如CD-ROM、CD-R、CD-RW、DVD-ROM、DVD-RAM、DVD-RW、DVD+RW)、磁带、非易失性存储卡和ROM。可选择地,可以由通信网络从服务器计算机上下载程序代码。
此外,应该清楚的是,不仅可以通过执行计算机所读出的程序代码,而且可以通过基于程序代码的指令使计算机上操作的操作***等来完成部分或者全部的实际操作,从而实现上述实施例中任意一项实施例的功能。
此外,可以理解的是,将由存储介质读出的程序代码写到***计算机内的扩展板中所设置的存储器中或者写到与计算机相连接的扩展单元中设置的存储器中,随后基于程序代码的指令使安装在扩展板或者扩展单元上的CPU等来执行部分和全部实际操作,从而实现上述实施例中任一实施例的功能。
综上所述,本发明的实施例具有至少如下有益效果:
1、本发明实施例中,在服务端运行一应用的应用程序,其运行依赖于至少一制品,制品的构建依赖于至少一源代码文件;若运行一制品的一行指令时异常,根据构建该制品时生成的第一调试信息以生成各第二调试信息,异常行指令的运行依赖于各第二调试信息所指向的源代码;对外提供分别包括各第二调试信息的各超链接;根据外部所请求打开的超链接的第二调试信息,加载在运行应用程序时所使用的源代码文件集合并定位到其中的特定源代码文件的特定行源代码,该第二调试信息指向该特定行源代码;在定位处设置断点,重新运行应用程序,以在运行至断点处运行中断时对外提供中断通知。本发明实施例能够在服务端运行的应用程序发生异常时实现调试。
2、本发明实施例提供的这一应用程序调试方法,能够在服务端运行的应用程序发生异常时自动化地启动调试过程,以实现应用程序调试,人为操作简单,基本实现了应用程序调试的自动化执行,节省了开发人员的工作,提高了应用程序调试效率。
需要说明的是,上述各流程和各***结构图中不是所有的步骤和模块都是必须的,可以根据实际的需要忽略某些步骤或模块。各步骤的执行顺序不是固定的,可以根据需要进行调整。上述各实施例中描述的***结构可以是物理结构,也可以是逻辑结构,即,有些模块可能由同一物理实体实现,或者,有些模块可能分由多个物理实体实现,或者,可以由多个独立设备中的某些部件共同实现。
以上各实施例中,硬件单元可以通过机械方式或电气方式实现。例如,一个硬件单元可以包括永久性专用的电路或逻辑(如专门的处理器,FPGA或ASIC)来完成相应操作。硬件单元还可以包括可编程逻辑或电路(如通用处理器或其它可编程处理器),可以由软件进行临时的设置以完成相应操作。具体的实现方式(机械方式、或专用的永久性电路、或者临时设置的电路)可以基于成本和时间上的考虑来确定。
需要说明的是,在本文中,诸如第一和第二之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同因素。
上文通过附图和优选实施例对本发明进行了详细展示和说明,然而本发明不限于这些已揭示的实施例,基与上述多个实施例本领域技术人员可以知晓,可以组合上述不同实施例中的代码审核手段得到本发明更多的实施例,这些实施例也在本发明的保护范围之内。
Claims (8)
1.应用程序调试方法,其特征在于,包括:
在服务端运行一应用的应用程序,其中,所述应用程序的运行依赖于至少一个制品,每一个所述制品的构建均依赖于至少一个源代码文件;
若运行第一制品的目标行指令时发生异常,获取在构建所述第一制品时所生成的第一调试信息,其中,所述第一制品为所述至少一个制品中的任一制品,所述目标行指令为所述第一制品的任一行指令;
根据所述第一调试信息生成对应于所述目标行指令的至少一个第二调试信息,其中,不同第二调试信息指向的源代码不同,所述目标行指令的运行依赖于每一个所述第二调试信息所指向的源代码;
生成分别包括有所述至少一个第二调试信息的至少一个超链接,并对外提供所述至少一个超链接;当外部请求打开所述至少一个超链接中的任一第一超链接时,根据所述第一超链接包括的第二调试信息,加载在运行所述应用程序时所使用的第一源代码文件集合,并定位到所述第一源代码文件集合中的特定源代码文件的特定行源代码,其中,所述第一超链接包括的第二调试信息指向所述特定行源代码;
在所述特定行源代码处设置断点,并在所述服务端重新运行所述应用程序,使得运行至所述断点处时运行中断,并在运行中断时对外提供中断通知;
任一所述制品的制品版本号均包括:该制品的制品标识、在运行特定应用程序时所使用的源代码文件集合的文件集版本号,其中,该特定应用程序的运行依赖于该制品,不同制品版本号包括的制品标识和/或文件集版本号不同;
任一所述源代码文件的文件版本号均包括:该源代码文件的文件标识和该源代码文件的版本标识,其中,不同文件版本号包括的文件标识和/或版本标识不同;
所述第一调试信息包括:所述第一制品的制品版本号、所述第一制品中的每一行指令所对应的文件标识和行号;
所述根据所述第一调试信息生成对应于所述目标行指令的至少一个第二调试信息,包括:
确定所述第一调试信息包括的所述第一制品的制品版本号;
确定所述第一调试信息中的、所述目标行指令所对应的目标文件标识和目标行号;
生成包括所述第一制品的制品版本号、所述目标文件标识、所述目标行号的第二调试信息;
根据所述第一制品的制品版本号中的文件集版本号,确定在运行所述应用程序时所使用的第一源代码文件集合;
确定所述第一源代码文件集合中的目标源代码文件的目标行源代码,其中,所述目标源代码文件的文件标识为所述目标文件标识,所述目标行源代码的行号为所述目标行号;
确定所述第一源代码文件集合中的每一个目的行源代码,其中,在运行所述目标行源代码时直接或间接依赖于各个所述目的行源代码;
所述目的行源代码的个数不为零时,针对每一个所述目的行源代码,均执行:确定所述第一源代码文件集合中的、包括该目的行源代码的目的源代码文件的目的文件标识,确定该目的行源代码在该目的源代码文件中的目的行号;生成包括所述第一制品的制品版本号、所述目的文件标识、所述目的行号的第二调试信息。
2.根据权利要求1所述的方法,其特征在于,
所述根据所述第一超链接包括的第二调试信息,加载在运行所述应用程序时所使用的第一源代码文件集合,并定位到所述第一源代码文件集合中的特定源代码文件的特定行源代码,包括:
获取所述第一超链接包括的第二调试信息;
根据该第二调试信息包括的制品版本号中的文件集版本号,加载在运行所述应用程序时所使用的第一源代码文件集合;
根据该第二调试信息中的文件标识和行号,定位到所述第一源代码文件集合中的特定源代码文件的特定行源代码,其中,所述特定源代码文件的文件标识为该第二调试信息中的文件标识,所述特定行源代码的行号为该第二调试信息中的行号。
3.根据权利要求1所述的方法,其特征在于,
每一个所述超链接均指向预设的调试功能;
所述在服务端运行一应用的应用程序,包括:在服务端的第一进程中运行一应用的应用程序;
所述在所述服务端重新运行所述应用程序,包括:在所述第一进程中重新运行所述应用程序;
该方法进一步包括:启动所述调试功能以运行调试进程,利用所述调试进程监控已重新运行所述应用程序的所述第一进程;
所述在运行中断时对外提供中断通知,包括:在所述调试进程监控到所述第一进程运行中断时,利用所述调试功能对外提供中断通知。
4.根据权利要求1所述的方法,其特征在于,
所述对外提供所述至少一个超链接,包括:通过运行在Web浏览器上的集成开发环境,对外提供所述至少一个超链接;
所述在运行中断时对外提供中断通知,包括:在运行中断时通过所述集成开发环境对外提供中断通知;
所述根据所述第一超链接包括的第二调试信息,加载在运行所述应用程序时所使用的第一源代码文件集合,包括:
根据所述第一超链接包括的第二调试信息,追溯到在运行所述应用程序时所使用的第一源代码文件集合的文件集版本号;
启动所述集成开发环境加载具有该文件集版本号的所述第一源代码文件集合。
5.根据权利要求1至4中任一所述的方法,其特征在于,
所述中断通知包括:所述应用程序运行中断时的运行位置、调用堆栈、内存报告中的任意一个或多个。
6.用于执行如权利要求1至5中任一所述应用程序调试方法的应用程序调试装置,其特征在于,包括:
运行单元、处理单元、交互单元;
其中,所述运行单元,用于在服务端运行一应用的应用程序,其中,所述应用程序的运行依赖于至少一个制品,每一个所述制品的构建均依赖于至少一个源代码文件;
所述处理单元,用于执行下述操作:
若运行第一制品的目标行指令时发生异常,获取在构建所述第一制品时所生成的第一调试信息,其中,所述第一制品为所述至少一个制品中的任一制品,所述目标行指令为所述第一制品的任一行指令;
根据所述第一调试信息生成对应于所述目标行指令的至少一个第二调试信息,其中,不同第二调试信息指向的源代码不同,所述目标行指令的运行依赖于每一个所述第二调试信息所指向的源代码;生成分别包括有所述至少一个第二调试信息的至少一个超链接,并触发所述交互单元以对外提供所述至少一个超链接;当外部请求打开所述至少一个超链接中的任一第一超链接时,根据所述第一超链接包括的第二调试信息,加载在运行所述应用程序时所使用的第一源代码文件集合,并定位到所述第一源代码文件集合中的特定源代码文件的特定行源代码,其中,所述第一超链接包括的第二调试信息指向所述特定行源代码;在所述特定行源代码处设置断点,并触发所述运行单元以在所述服务端重新运行所述应用程序,使得运行至所述断点处时运行中断,并在运行中断时触发所述交互单元以对外提供中断通知。
7.应用程序调试装置,其特征在于,包括:至少一个存储器和至少一个处理器;
所述至少一个存储器,用于存储机器可读程序;
所述至少一个处理器,用于调用所述机器可读程序,执行权利要求1至5中任一所述的方法。
8.计算机可读介质,其特征在于,所述计算机可读介质上存储有计算机指令,所述计算机指令在被处理器执行时,使所述处理器执行权利要求1至5中任一所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010119893.7A CN111367796B (zh) | 2020-02-26 | 2020-02-26 | 应用程序调试方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010119893.7A CN111367796B (zh) | 2020-02-26 | 2020-02-26 | 应用程序调试方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111367796A CN111367796A (zh) | 2020-07-03 |
CN111367796B true CN111367796B (zh) | 2023-06-16 |
Family
ID=71206569
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010119893.7A Active CN111367796B (zh) | 2020-02-26 | 2020-02-26 | 应用程序调试方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111367796B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112527546A (zh) * | 2020-12-14 | 2021-03-19 | 携程旅游网络技术(上海)有限公司 | 应用异常快速定位方法、***、设备及存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6804813B1 (en) * | 2000-11-03 | 2004-10-12 | Hewlett-Packard Development Company, L.P. | System and method for remote and local diagnosis using automatically identified symbol libraries to create record based requests with tag lists of data to be collected from an operating system |
CN106294134A (zh) * | 2016-07-29 | 2017-01-04 | 腾讯科技(深圳)有限公司 | 代码的崩溃定位方法及装置 |
CN109783342A (zh) * | 2017-11-10 | 2019-05-21 | 华为技术有限公司 | 脚本调试方法、设备及计算机存储介质 |
CN109947641A (zh) * | 2019-02-20 | 2019-06-28 | 北京百佑科技有限公司 | 自动化测试方法及装置 |
CN110569044A (zh) * | 2019-09-09 | 2019-12-13 | 山东浪潮通软信息科技有限公司 | 一种将应用部署到运行环境的方法、装置及*** |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105446723B (zh) * | 2014-09-02 | 2018-11-23 | 国际商业机器公司 | 用于标识源代码版本之间的语义区别的方法和装置 |
US10521329B2 (en) * | 2015-05-08 | 2019-12-31 | Intergral GmbH | Debugging system |
-
2020
- 2020-02-26 CN CN202010119893.7A patent/CN111367796B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6804813B1 (en) * | 2000-11-03 | 2004-10-12 | Hewlett-Packard Development Company, L.P. | System and method for remote and local diagnosis using automatically identified symbol libraries to create record based requests with tag lists of data to be collected from an operating system |
CN106294134A (zh) * | 2016-07-29 | 2017-01-04 | 腾讯科技(深圳)有限公司 | 代码的崩溃定位方法及装置 |
CN109783342A (zh) * | 2017-11-10 | 2019-05-21 | 华为技术有限公司 | 脚本调试方法、设备及计算机存储介质 |
CN109947641A (zh) * | 2019-02-20 | 2019-06-28 | 北京百佑科技有限公司 | 自动化测试方法及装置 |
CN110569044A (zh) * | 2019-09-09 | 2019-12-13 | 山东浪潮通软信息科技有限公司 | 一种将应用部署到运行环境的方法、装置及*** |
Non-Patent Citations (1)
Title |
---|
一种获取Web结构切片的方法及其应用;吴军华;汪婷婷;;南京工业大学学报(自然科学版)(第04期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN111367796A (zh) | 2020-07-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP3769223B1 (en) | Unified test automation system | |
CN110187914B (zh) | 应用开发方法、***及装置 | |
US8813039B2 (en) | Method and system for software defect reporting | |
US9015702B2 (en) | Determining compatibility of an application with different versions of an operating system | |
CN106844136B (zh) | 一种程序崩溃信息的收集方法及*** | |
US10067855B2 (en) | Error developer association | |
CN108399132B (zh) | 一种调度测试方法、装置及存储介质 | |
US20120159443A1 (en) | System and method for reducing test effort by object risk analysis | |
US7512933B1 (en) | Method and system for associating logs and traces to test cases | |
US10255158B2 (en) | Monitoring and diagnostics of business transaction failures | |
US9983979B1 (en) | Optimized dynamic matrixing of software environments for application test and analysis | |
CN112395202B (zh) | 接口自动化测试方法、装置、计算机设备和存储介质 | |
US9779014B2 (en) | Resilient mock object creation for unit testing | |
CN110928777A (zh) | 测试用例的处理方法、装置、设备及存储介质 | |
CN115391228A (zh) | 精准测试方法、装置、设备及介质 | |
US11422917B2 (en) | Deriving software application dependency trees for white-box testing | |
CN111367796B (zh) | 应用程序调试方法及装置 | |
CN112579099A (zh) | 代码的部署方法、装置、存储介质及电子设备 | |
CN110471828B (zh) | 一种操作***测试方法、装置及其设备 | |
CN116578282A (zh) | 代码生成方法、装置、电子设备及介质 | |
Winzinger et al. | Automatic test case generation for serverless applications | |
CN115525568A (zh) | 代码覆盖率的巡检方法、装置、计算机设备及存储介质 | |
US11755458B2 (en) | Automatic software behavior identification using execution record | |
CN114791884A (zh) | 测试环境的构建方法、装置、存储介质及电子设备 | |
CN110275710B (zh) | 一种Java本地接口一致性检查方法及***、存储介质及终端 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |