CN105630661B - 用于自动化跨***程序调试的方法和装置 - Google Patents
用于自动化跨***程序调试的方法和装置 Download PDFInfo
- Publication number
- CN105630661B CN105630661B CN201410593373.4A CN201410593373A CN105630661B CN 105630661 B CN105630661 B CN 105630661B CN 201410593373 A CN201410593373 A CN 201410593373A CN 105630661 B CN105630661 B CN 105630661B
- Authority
- CN
- China
- Prior art keywords
- debugging
- breakpoint
- session
- program
- task
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- 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/3636—Software debugging by tracing the execution of the program
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)
- Debugging And Monitoring (AREA)
Abstract
本公开内容涉及用于自动化跨***程序调试的方法和装置。本发明的一个实施例提供一种用于跨***程序调试的方法。所述方法包括:确定第一***的第一调试会话中的第一断点;确定第二***的第二调试会话中的第二断点,所述第二***不同于所述第一***;以及响应于用户在所述第一调试会话和所述第二调试会话中执行将所述第一断点与所述第二断点相关联的调试动作,记录所述第一断点与所述第二断点之间的关联,以用于对跨所述第一***和所述第二***的程序调试进行自动化。还描述了相应的装置。
Description
技术领域
本发明的实施例总体上涉及程序开发领域,并且特别涉及用于自动化跨***程序调试的方法和装置。
背景技术
在程序开发过程中,程序员经常需要对所编制的程序进行调试(debug),以发现程序源代码中的语法和/或逻辑错误。调试器(debugger)是用于执行调试的常见工具。例如,在集成开发环境(IDE)中通常提供专门的调试器。对于单个***中的调试会话而言,可以通过使用一个或多个断点(breakpoint)来完成调试过程。如已知的,断点用于使处于调试会话中的程序停止在程序员指定的位置,以便分析程序的状态、特定变量的数值,等等。
然而,在多***环境中,跨***程序调试面临诸多挑战。在这样的环境中,运行于不同***的任务之间往往存在协作或依赖关系。目前,无法在跨***环境中实现自动化调试。用户需要在不同***上启动多个调试会话,并且以人工方式控制不同调试会话之间的协作和通信。在此过程中,用户需要在不同***的调试会话之间来回切换,以便定位正确的断点。这个过程耗时且易错。而且,当用户完成一轮调试之后,难以进行问题重现。
另外,对于支持并发任务的待调试程序而言,在相互协作的不同***上可能同时运行有大量任务。在传统方案中,难以从不同***的多个任务中准确地找到正在被调试的相互关联任务。例如,无法精确地确定在一个***上被调试的任务在其他***上引发了哪些相关任务的执行。由此,不同调试会话之间的协作可能发生错误,从而导致整个调试过程失败。
发明内容
总体上,本发明的实施例提出一种用于自动化跨***的程序调试的技术方案。
在本发明的一个方面,提供一种用于自动化跨***程序调试的方法。该方法包括:确定第一***的第一调试会话中的第一断点;确定第二***的第二调试会话中的第二断点,所述第二***不同于所述第一***;以及响应于用户在所述第一调试会话和所述第二调试会话中执行将所述第一断点与所述第二断点相关联的调试动作,记录所述第一断点与所述第二断点之间的关联,以用于对跨所述第一***和所述第二***的程序调试进行自动化。
在本发明的另一方面,提供一种用于自动化跨***程序调试的装置。所述装置包括:第一确定单元,被配置为确定第一***的第一调试会话中的第一断点;第二确定单元,被配置为确定第二***的第二调试会话中的第二断点,所述第二***不同于所述第一***;以及记录单元,被配置为响应于用户在所述第一调试会话和所述第二调试会话中执行将所述第一断点与所述第二断点相关联的调试动作,记录所述第一断点与所述第二断点之间的关联,以用于对跨所述第一***和所述第二***的程序调试进行自动化。
根据本发明的实施例,可以以断点为基础对跨***的人工调试进行记录,以便支持随后的自动调试和/或问题重现。而且,与单纯基于单个***的调试信息相比,所记录的关于用户的跨***调试动作的信息可被用来实现更为准确和高效的跨***调试功能。本发明的其他特征和优点将通过下文描述而变得容易理解。
附图说明
通过结合附图对本发明示例性实施方式进行更详细的描述,本发明的上述以及其它目的、特征和优势将变得更加明显其中:
图1示出了适于用来实现本发明实施例的示例性计算机***/服务器的示意性框图;
图2示出了根据本发明实施例可实现于其中的跨***调试环境的示意性框图;
图3A和图3B示出了根据本发明实施例的用于自动化跨***程序调试的方法的示意性流程图;
图4示出了根据本发明实施例的用于识别不同***中的关联任务的方法的示意性流程图;以及
图5示出了根据本发明实施例的用于自动化跨***程序调试的装置的示意性框图。
在附图中,相同或相似的标号被用来表示相同或相似的元素。
具体实施方式
下面将参照附图更详细地描述本公开的优选实施方式。虽然附图中显示了本公开的优选实施方式,然而应该理解,可以以各种形式实现本公开而不应被这里阐述的实施方式所限制。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。
图1示出了适于用来实现本发明实施方式的示例性计算机***/服务器12的方框图。图1显示的计算机***/服务器12仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如图1所示,计算机***/服务器12以通用计算设备的形式表现。计算机***/服务器12的组件可以包括但不限于:一个或者多个处理器或者处理单元16,***存储器28,连接不同***组件(包括***存储器28和处理单元16)的总线18。
总线18表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器,***总线,图形加速端口,处理器或者使用多种总线结构中的任意总线结构的局域总线。举例来说,这些体系结构包括但不限于工业标准体系结构(ISA)总线,微通道体系结构(MAC)总线,增强型ISA总线、视频电子标准协会(VESA)局域总线以及***组件互连(PCI)总线。
计算机***/服务器12典型地包括多种计算机***可读介质。这些介质可以是任何能够被计算机***/服务器12访问的可用介质,包括易失性和非易失性介质,可移动的和不可移动的介质。
***存储器28可以包括易失性存储器形式的计算机***可读介质,例如随机存取存储器(RAM)30和/或高速缓存存储器32。计算机***/服务器12可以进一步包括其它可移动/不可移动的、易失性/非易失性计算机***存储介质。仅作为举例,存储***34可以用于读写不可移动的、非易失性磁介质(图1未显示,通常称为“硬盘驱动器”)。尽管图1中未示出,可以提供用于对可移动非易失性磁盘(例如“软盘”)读写的磁盘驱动器,以及对可移动非易失性光盘(例如CD-ROM,DVD-ROM或者其它光介质)读写的光盘驱动器。在这些情况下,每个驱动器可以通过一个或者多个数据介质接口与总线18相连。存储器28可以包括至少一个程序产品,该程序产品具有一组(例如至少一个)程序模块,这些程序模块被配置以执行本发明各实施例的功能。
具有一组(至少一个)程序模块42的程序/实用工具40,可以存储在例如存储器28中,这样的程序模块42包括-但不限于-操作***、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。程序模块42通常执行本发明所描述的实施例中的功能和/或方法。
计算机***/服务器12也可以与一个或多个外部设备14(例如键盘、指向设备、显示器24等)通信,还可与一个或者多个使得用户能与该计算机***/服务器12交互的设备通信,和/或与使得该计算机***/服务器12能与一个或多个其它计算设备进行通信的任何设备(例如网卡,调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口22进行。并且,计算机***/服务器12还可以通过网络适配器20与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器20通过总线18与计算机***/服务器12的其它模块通信。应当明白,尽管图中未示出,可以结合计算机***/服务器12使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID***、磁带驱动器以及数据备份存储***等。
下面将详细描述本发明实施例的机制和原理。除非特别声明,在下文和权利要求中使用的术语“基于”表示“至少部分地基于”。术语“包括”表示开放性包括,即“包括但不限于”。术语“多个”表示“两个或更多”。术语“一个实施例”表示“至少一个实施例”。术语“另一实施例”表示“至少一个另外的实施例”。其他术语的定义将在下文描述中给出。
图2示出了本发明的实施例可实现于其中的调试环境200的示意图。根据本发明的实施例,提供了一种可用于协调不同***之间的程序调试的实体,称为“调试协调器”210。一般而言,调试协调器210可以获取跨***调试所涉及的各个调试会话中的调试信息(例如断点),并且基于这些调试信息对用户的跨***调试动作进行记录和存储。
所记录的信息随后可被用于自动化调试或者问题重现。而且,基于所记录的信息,可以支持基于跨***状态的、较高级别的调试。另外,在一个实施例中,还可以从多个***的大量任务中,准确地确定作为调试目标的任务。
为讨论方便之目的,将描述跨两个***的程序调试。这两个***分别被称为“第一***”220和“第二***”230。但是,应当理解,这仅仅是示例性的,无意以任何方式限制本发明的范围。本发明的实施例适用于任意数目的***之间的调试。
注意,在本公开的上下文中,术语“***”可以表示两个独立的机器或设备,也可以表示彼此独立的应用、程序模块,等等。相应地,第一***220与第二***230之间的通信可以借助于计算机网络、电信网络之类的网络连接来实现,也可以借助于功能调用、进程间通信之类的单机通信机制来实现。而且,跨***程序调试可能涉及多个不同的物理设备,也可以在单个物理设备上完成。
另外,根据本发明的实施例,调试协调器210可以部署在第一***220和第二***230中的任何一个***上。备选地,调试协调器210也可以独立于第一***220和第二***230而部署。
在第一***上执行的调试会话(debugging session)被称为“第一调试会话”225,在第二***上执行的调试会话被称为“第二调试会话”235。在此使用的术语“调试会话”是指用于对程序进行调试的会话或者过程。例如,用户可以通过针对特定的程序代码片段启动调试器而创建调试会话。处于调试会话中的程序可以如正常程序一样创建任务并且进行操作,直到遇到断点或者任何其他调试标志,这将在下文详述。
在一个实施例中,调试会话可以在相关的***上运行。备选地,在一个实施例中,调试会话可以全部或部分地位于相关***的远程,但是能够对***上执行的程序进行调试。本发明的范围在此方面不受限制。
图3A示出了根据本发明实施例的用于跨***的程序调试的方法300A的流程图。方法300A可以由调试协调器210来执行。如图所示,方法300A开始于步骤S310,在此获取与第一***的第一调试会话相关联的调试信息,称为“第一调试信息”。
根据本发明的实施例,第一调试信息可以指示与第一调试会话相关联的任何信息。特别地,在一个实施例中,第一调试信息至少包括用户在第一调试会话中设置在程序代码中的一个或多个断点。例如,第一调试信息可以指明第一调试会话中的每个断点在所调试的程序代码中的位置,例如以行号指示。为讨论方便起见,假设在步骤S310处至少确定第一***的第一调试会话中的第一断点。
除了指示断点的信息之外,在一个实施例中,第一调试信息还可以指示与第一调试会话相关联的任何其他信息,例如所调试的程序代码的状态,等等。备选地或附加地,第一调试信息可以包括第一***、执行所述第一调试会话所使用的IDE等各种其他方面的有关信息。
接下来,在步骤S320,在此获取与第二***的第二调试会话相关联的调试信息,称为“第二调试信息”。类似于第一调试信息,第二调试信息至少可以指示用户在第二调试会话中设置于所调试程序代码中的一个或多个断点。第二调试信息还可以包括任何其他有关信息。为讨论方便起见,假设在步骤S320处至少确定第二***的第二调试会话中的第二断点。
特别地,尽管步骤S320在图3A中被示为在步骤S310之后执行,但是这仅仅是为了讨论方便之目的,无意以任何方式限制本发明的范围。将会理解,第二调试信息可以先于第一调试信息被获取,或者与第一调试信息同时获取。换言之,步骤S310和S320可以按照任何顺序执行,包括并行执行。
随后,在步骤S330,确定用户是否执行了将所述第一断点与所述第二断点相关联的调试动作。如已知的,当调试会话中的被调试程序执行到断点之后,用户可以执行调试动作。在此使用的术语“调试动作”是指当被调试程序执行到断点之后,由用户执行的用于调试程序的动作。
在一个实施例中,调试动作可以包括将被调试程序保持在中止执行的状态。由此,用户例如可以查看被调试程序和/或***的状态。备选地或附加地,在一个实施例中,调试动作可以包括进入“单步执行”模式。在该模式中,用户可以逐行调试程序,以便发现程序代码中存在的问题。其他调试动作也是可行的。
与调试动作相反,如果用户在被调试程序达到断点之后直接命令程序继续执行(即,跳过断点),则认为用户没有在该断点处执行调试动作。
如果用户在第一调试会话中在第一断点处执行调试动作的情况下,在第二调试会话中在第二断点处也执行了调试动作,则认为用户执行了将第一断点与第二断点相关联的调试动作(分支“是”)。例如,如果用户在第一断点处将第一调试会话保持中止和/或进入单步执行模式的情况下,在第二断点处将第二调试会话保持中止和/或进入单步执行模式,则认为用户执行了将第一断点与第二断点相关联的调试动作。应当理解,第一调试会话与第二调试会话中的调试动作可以相同,也可以不同。此时,方法进行到步骤S340,在此记录第一断点与第二断点之间的关联。
在一个实施例中,可以使用表(table)来记录不同调试会话中的断点之间的关联。这种表可以被称为“调试顺序表”。在这样的实施例中,在步骤S340,可以在表中创建将第一断点与第二断点相关联的条目。这样的条目按照调试的时间顺序而被存储在调试顺序表中。作为示例,下面的表1示出了一个调试顺序表的示例。当然,本发明的范围并不限于表。相反,可以使用任何适当的数据结构来存储断点之间的跨***关联关系。
表1
第一调试会话中的断点 | 第二调试会话中的断点 |
A1 | B1 |
A2 | B2 |
A3 | B4 |
...... | ...... |
应当理解,不同调试会话中的断点之间的关联并不一定是一对一关联。例如,第一调试会话中的一个断点可以与第二调试会话中的多个断点相关联。类似地,在一个实施例中,第二调试会话中的一个断点可以与第一调试会话中的多个断点相关联。本发明的范围在此方面不受限制。
在某些实施例中,除了上面参考图3A描述的步骤S310到S340之外,根据本发明实施例的跨***程序调试还可以包括若干可选的操作或者步骤。如图3B所示,在一个实施例中,在步骤S350,在此记录用户在关联的一组断点之后所做的动作。步骤S350可以在图3A中所示的步骤S340之后被执行。继续考虑上文示例,为讨论方便之目的,进一步假设:第一断点先于第二断点到达。也就是说,第一调试会话中的被调试程序首先执行到第一断点;而后第二调试会话中的被调试程序执行到第二断点。此时,在一个实施例中,可以监测并且记录用户在与第二断点相关联的调试动作之后所执行的动作。
特别地,在一个实施例中,可以记录用户在从第二断点返回之后是选择继续执行第一调试会话还是第二调试会话。如下文将会讨论的,这将有利于问题的重现和自动化调试。备选地或附加地,也可以记录其他后续动作,例如用户对第一***和/或第二***上的相关状态的设置、有关数据或文件的操作,等等。
如上所述,在一个实施例中,断点之间的跨***关联以及在从断点返回之后的动作可以被存储为一个条目。这些条目可以按照调试的时间顺序而被存储在一起从而形成调试顺序表。作为示例,下面的表2示出了一个示例性调试顺序表的一部分,其中包含用户在关联断点的调试动作之后执行的后续动作的有关信息。
表2
在表2所示的调试顺序表中,每行记录了具有跨***关联关系的断点。而且,可选地,还可以记录用户在相关联的每组断点之后执行的动作。在此示例中,所记录的后续动作是用户选择第一调试会话和第二调试会话中的哪一个继续执行。例如,根据调试顺序表的第一行可知,第一调试会话中的断点A1与第二调试会话中的断点B1相关联。而且,在从第二断点B1返回之后,用户继续执行了第一调试会话。
如上所述,调试顺序表仅仅是记录断点关联的一种可行的实现,并非有意以任何方式限制本发明的范围。在其他实施例中,可以使用任何适当的数据结构来存储断点的关联关系,包括但不限于:文本文件,可扩展标记语言(XML)文件,树,图,等等。
可选地,在一个实施例中,对于不同调试会话中相关联的断点,可以在步骤S360记录与这些断点相关的跨***调试状态。可以理解,在跨***的程序调试中,单个调试会话中的断点未必能够反映有意义的总体调试状态。反之,多个调试会话中彼此关联的断点则能够反映这种总体调试状态。由此,在一个实施例中,可以创建和记录与彼此关联的一组断点相关的跨***调试状态。在此使用的术语“跨***调试状态”是指由调试所涉及的多个调试会话(例如,第一调试会话225和第二调试会话235)彼此相关的个体状态组成的总体调试状态。
在一个实施例中,与一组关联的断点相关的调试状态可以由用户指定。例如,在一个实施例中,响应于不同调试会话中的多个断点的跨***关联被记录,可以提示用户输入与这些相关联的断点有关的总体调试状态。备选地或附加地,在一个实施例中,也可以根据调试所涉及的一个或多个***的当前状态,自动地推断总体调试状态。
仅出于讨论之目的,仍然考虑断点被实现为调试顺序表的实施例。如上所述,调试顺序表中的每一行记录不同调试会话中的相互关联的断点。可选地,一个或多个行还可以记录用户的后续动作。在这样的实施例中,例如,可以增加一个称为“调试状态”的维度(列),用以记录与相关联的断点相关的跨***调试状态。作为示例,上面讨论的表2可以被修改为下面的表3:
表3
可以看到,对于相关联的每组断点,相应的跨***调试状态被设置和记录。例如,与关联的断点组{A2,B2,B3}相关的跨***调试状态为“检查接收的请求”。可以理解,该状态不仅仅反映一个调试会话中被调试程序的状态。相反,它反映了相互协作的多个***的总体状态。
特别地,在一个实施例中,允许用户在这样的跨***调试状态上设置断点。这种断点不同于传统程序中针对特定程序语句的断点,而是与所调试的总体状态有关,因此可以被称为“状态断点”。例如,在上文描述的实施例中,可以允许用户对“检查接收的请求”这一跨***调试状态设置断点。以此方式,在随后基于记录的动作信息执行调试时,可以协调多个调试会话中的程序的执行中止在相关联的断点,以便针对特定的状态进行调试。这方面的实施例将在下文详述。
通过执行的上述步骤,可以实现对用户的人工跨***调试过程的录制。基于所记录的信息(例如,其形式上为调试跟踪表),可以实现自动的程序调制。例如,在一个实施例中,当用户希望对先前调试过的程序再次进行跨***调试时,可以发出跨***调试的请求。调试协调器可以在步骤S370接收该请求,并且在步骤S380基于所记录的动作信息来执行自动或者半自动的跨***的调试。以此方式,可以实现自动化的问题重现,这对于程序调试而言至关重要。
而且,根据本发明的实施例,自动的或者半自动的跨***调试成为可能。例如,在一个实施例中,调试协调器可以根据所记录的不同调试会话中的断点之间的关联以及相关的用户动作,来控制跨***的程序调试的自动执行过程。
作为示例,对于上文描述的表1、表2或者表3,当第一***上的第一调试会话中的程序执行到断点A1时,调试协调器可以根据生成的调试顺序表来控制第二***,以使得第二调试会话中的程序执行到断点B1,以便检测或验证***状态或者变量的值或者进入单步执行模式,等等。而后,调试协调器可以根据所记录的后续动作继续执行第一调试会话。接下来,响应于第一调试会话中的程序执行到断点A2,调试协调器可以控制第二调试会话中的程序依次执行到断点B2、B3。当第二调试会话中的程序达到断点B3并且完成了相应的调试动作之后,调试协调器可以控制第二***上的第二调试会话中的程序继续执行,以此类推。
特别地,如上所述,在一个实施例中,允许用户针对跨***调试状态设置状态断点。在一个实施例中,状态断点可以在跨***调试请求中指示。备选地或附加地,也可以在跨***调试的执行过程中,从用户处接收对状态断点的指示。调试协调器可以基于一个或多个状态断点来控制不同***上的多个调试会话之间的协作,使得作为整个应用的执行被中止在指定的状态断点处。
作为示例,仍然考虑上文参考表2或者表3描述的实施例。假设用户对于“检查容器的数据”这一状态设置了状态断点。此时,调试协调器会控制第一***,使得第一调试会话中的被调试程序依次执行到断点A3和A4。而且,调试协调器可以控制第二***,使得第二调试会话中的被调试程序执行到断点B4。此时,调试协调器可以同时阻止第一调试会话和第二调试会话二者中程序的继续执行。这样做是有益的。例如,用户关心的可能仅仅是“检查容器的数据”这一总体状态下的***行为。此时,根据本发明的实施例中,用户无需针对A3、A4、B4每个断点都对调试过程进行人工干预,这可以显著提高调试过程的效率。
在跨***的程序调试中,另一个需要解决的问题是在多任务并发的情况下,在不同***上正在被调试的程序所创建的多个任务中,准确地找到哪些任务是彼此相关的。例如,假设在第一***的第一调试会话中被调试的第一程序启动了第一任务,该任务将向第二***发送一个请求。第二***的第二调试会话中被调试的第二程序将生成用于接收该请求的任务。然而,如果第二***是支持并发任务的***,第二程序在被执行时可能创建多个用于接收请求的并发任务。
传统上,在这种情况下,无法确定第二***上的哪个任务是与第一***上的第一任务相关联的任务。例如,在某些已知方案中,总是假设:第二***上首次执行到第二程序中所设置的断点的任务与第一***上的第一任务相关联。然而,实践发现,这种假设通常是不成立的,并且因此将导致调试过程失败。
根据本发明的实施例,提出了一种用于识别不同***的调试会话中相关任务的技术方案。图4示出了这方面的示例性方法400的示意性流程图。与方法300A和300B类似,方法400同样可由调试协调器来执行。为讨论方便之目的,仍然将参考上文描述的第一***上的第一调试会话和第二***上的第二调试会话来描述方法400。
方法400开始于步骤S410,在此从第一***接收第一任务的跟踪信息(trackinginformation)。第一任务是在第一***的第一调试会话中的被调试程序所发起的任务。第一跟踪任务的跟踪信息可以是特定于第一任务的任何信息,例如唯一的标识符、数字、字母或其任意组合。
根据本发明的实施例,当第一任务被启动时,它会将特定的第一跟踪信息发送给第二***上与之交互的任务。例如,第一任务可以将第一跟踪信息随同数据一起发送其在第二***上的关联任务。当然,分别发送数据和第一跟踪信息也是可能的。而且,第一任务将第一跟踪信息发送给调试协调器。
方法400进行到步骤S420,在此从第二***接收一个任务(称为“第二任务”)的跟踪信息(称为“第二跟踪信息”)。第二跟踪信息是第二任务从第一***上与之关联的任务接收到的、该关联任务的特定跟踪信息。第二任务可以在任何适当的时机向调试协调器发送第二跟踪信息。例如,可以在第二任务被创建或者启动时。备选地,也可以在第二任务第一次到达程序中的断点时,向调试协调器发送第二跟踪信息。
在步骤S430,调试协调器对步骤在S410处从第一***接收的第一跟踪信息和在步骤S420处从第二***接收的第二跟踪信息进行匹配。如果第一跟踪信息与第二跟踪信息不匹配(分支“否”),则可以确定在第一***上与第二任务相关联的任务并不是正在调试的第一任务。此时,当前所处理的第二任务将不会触发调试会话的启动。方法400返回步骤S420,继续接收和检测第二***上的其他任务发送的跟踪信息。
另一方面,如果在步骤S430确定第一跟踪信息与第二跟踪信息相匹配(分支“是”),可以确定在第一***上与第二任务相关联的任务正是当前被调试的第一任务。由此,第二任务就是第二***上与第一任务相关联的任务。此时,方法400进行到步骤S440,在此启动针对第二任务的调试任务。例如,当第二任务的执行达到断点时,将中止程序的执行以便检查***状态、变量值,等等。
应当理解,上文描述的方法300和400可以单独使用,也可以结合使用。例如,在多***、并发任务的调试中,可以首先使用方法400来确定不同***上的相关联的任务,继而使用方法300来记录用户的动作信息并且基于所记录的动作信息来实现问题重现和/或自动化调试。将会理解,此时,在步骤S440处启动的将是方法300中所处理的第二任务。
图5示出了根据本发明实施例的用于程序调试的装置500的示意图。可以理解,装置500是图2中所示的调试协调器210的一种示例性实现。如图所示,装置500包括:第一确定单元510,被配置为确定第一***的第一调试会话中的第一断点;第二确定单元520,被配置为确定第二***的第二调试会话中的第二断点,所述第二***不同于所述第一***;以及断点关联记录单元530,被配置为响应于用户在所述第一调试会话和所述第二调试会话中执行将所述第一断点与所述第二断点相关联的调试动作,记录所述第一断点与所述第二断点之间的关联,以用于对跨所述第一***和所述第二***的程序调试进行自动化。
在一个实施例中,装置500还可以包括:后续动作记录单元,被配置为记录所述用户在与所述第二断点相关联的调试之后执行的动作,所述第一断点先于所述第二断点到达。在一个实施例中,所述后续动作记录单元可以包括:后续调试会话记录单元,被配置为记录所述用户在与所述第二断点相关联的所述调试之后,继续执行所述第一调试会话还是所述第二调试会话。
在一个实施例中,装置500还可以包括:跨***调试状态记录单元,被配置为记录与所述第一断点和所述第二断点相关联的跨***调试状态,所述跨***调试状态表示所述第一调试会话和所述第二调试会话的总体状态。在一个实施例中,装置500还可以包括:状态断点设置单元,被配置为设置与所述跨***调试状态相关联的状态断点,以用于控制跨所述第一***和所述第二***的程序调试。
在一个实施例中,装置500还可以包括:请求接收单元,被配置为接收执行跨所述第一***和所述第二***的所述程序调试的请求;以及调试执行单元,被配置为响应于所述请求,基于所记录的所述断点之间的跨***关联,至少部分自动地执行所述程序调试。
在一个实施例中,装置500还可以包括:第一跟踪信息接收单元,被配置为从第一***接收第一任务的第一跟踪信息,所述第一跟踪信息响应于针对所述第一任务的所述第一调试会话的启动而从所述第一***被发送;第二跟踪信息接收单元,被配置为从第二***的第二任务接收第二跟踪信息,所述第二跟踪信息接收自所述第一***的与所述第二任务相关联的任务;以及调试会话启动单元,被配置为响应于所述第一跟踪信息与所述第二跟踪信息相匹配,启动针对所述第二任务的所述第二调试会话。
为清晰起见,图5中没有示出装置500所包括的可选单元或者子单元。上文所描述的所有特征和操作分别适用于装置500,故在此不再赘述。而且,装置500中的单元或子单元的划分不是限制性的而是示例性的,旨在从逻辑上描述其主要功能或操作。一个单元的功能可以由多个单元来实现;反之,多个单元亦可由一个单元来实现。本发明的范围在此方面不受限制。
而且,装置500所包含的单元可以利用各种方式来实现,包括软件、硬件、固件或其任意组合。例如,在某些实施方式中,装置500可以利用软件和/或固件来实现。备选地或附加地,装置500可以部分地或者完全地基于硬件来实现。例如,装置500中的一个或多个单元可以实现为集成电路(IC)芯片、专用集成电路(ASIC)、片上***(SOC)、现场可编程门阵列(FPGA),等等。本发明的范围在此方面不受限制。
本发明可以是***、方法和/或计算机程序产品。计算机程序产品可以包括计算机可读存储介质,其上载有用于使处理器实现本发明的各个方面的计算机可读程序指令。
计算机可读存储介质可以是可以保持和存储由指令执行设备使用的指令的有形设备。计算机可读存储介质例如可以是-但不限于-电存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或者上述的任意合适的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、静态随机存取存储器(SRAM)、便携式压缩盘只读存储器(CD-ROM)、数字多功能盘(DVD)、记忆棒、软盘、机械编码设备、例如其上存储有指令的打孔卡或凹槽内凸起结构、以及上述的任意合适的组合。这里所使用的计算机可读存储介质不被解释为瞬时信号本身,诸如无线电波或者其他自由传播的电磁波、通过波导或其他传输媒介传播的电磁波(例如,通过光纤电缆的光脉冲)、或者通过电线传输的电信号。
这里所描述的计算机可读程序指令可以从计算机可读存储介质下载到各个计算/处理设备,或者通过网络、例如因特网、局域网、广域网和/或无线网下载到外部计算机或外部存储设备。网络可以包括铜传输电缆、光纤传输、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘服务器。每个计算/处理设备中的网络适配卡或者网络接口从网络接收计算机可读程序指令,并转发该计算机可读程序指令,以供存储在各个计算/处理设备中的计算机可读存储介质中。
用于执行本发明操作的计算机程序指令可以是汇编指令、指令集架构(ISA)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据、或者以一种或多种编程语言的任意组合编写的源代码或目标代码,所述编程语言包括面向对象的编程语言-诸如Java、Smalltalk、C++等,以及常规的过程式编程语言-诸如“C”语言或类似的编程语言。计算机可读程序指令可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络-包括局域网(LAN)或广域网(WAN)-连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。在一些实施例中,通过利用计算机可读程序指令的状态信息来个性化定制电子电路,例如可编程逻辑电路、现场可编程门阵列(FPGA)或可编程逻辑阵列(PLA),该电子电路可以执行计算机可读程序指令,从而实现本发明的各个方面。
这里参照根据本发明实施例的方法、装置(***)和计算机程序产品的流程图和/或框图描述了本发明的各个方面。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机可读程序指令实现。
这些计算机可读程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,使得这些指令在通过计算机或其它可编程数据处理装置的处理器执行时,产生了实现流程图和/或框图中的一个或多个方框中规定的功能/动作的装置。也可以把这些计算机可读程序指令存储在计算机可读存储介质中,这些指令使得计算机、可编程数据处理装置和/或其他设备以特定方式工作,从而,存储有指令的计算机可读介质则包括一个制造品,其包括实现流程图和/或框图中的一个或多个方框中规定的功能/动作的各个方面的指令。
计算机可读程序指令也可加载到计算机、其它可编程数据处理装置、或其它设备上,使得在计算机、其它可编程数据处理装置或其它设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机、其它可编程数据处理装置、或其它设备上执行的指令实现流程图和/或框图中的一个或多个方框中规定的功能/动作。
附图中的流程图和框图显示了根据本发明的多个实施例的***、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或指令的一部分,所述模块、程序段或指令的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的***来实现,或者可以用专用硬件与计算机指令的组合来实现。
以上已经描述了本发明的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中技术的技术改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。
Claims (14)
1.一种用于自动化跨***程序调试的方法,所述方法包括:
确定第一***的第一调试会话中的第一断点;
确定第二***的第二调试会话中的第二断点,所述第二***不同于所述第一***;以及
响应于用户在所述第一调试会话和所述第二调试会话中执行将所述第一断点与所述第二断点相关联的调试动作,记录所述第一断点与所述第二断点之间的关联,以用于跨所述第一***和所述第二***的程序调试的自动化,其中所述关联被记录在调试顺序表中,所述调试顺序表记录多个不同的调试会话中的一个或者多个断点之间的多个关联,并且使用文本文件、可扩展标记语言文件、树或者图来存储。
2.根据权利要求1所述的方法,还包括:
在所述调试顺序表中记录所述用户在与所述第二断点相关联的调试之后执行的动作,所述第一断点先于所述第二断点到达。
3.根据权利要求2所述的方法,其中记录所述用户在与所述第二断点相关联的调试之后执行的动作包括:
在所述调试顺序表中记录所述用户在与所述第二断点相关联的所述调试之后,继续执行所述第一调试会话还是所述第二调试会话。
4.根据权利要求1到3任一项所述的方法,还包括:
记录与所述第一断点和所述第二断点相关联的跨***调试状态,所述跨***调试状态表示所述第一调试会话和所述第二调试会话的总体状态。
5.根据权利要求4所述的方法,还包括:
设置与所述跨***调试状态相关联的状态断点,以用于控制跨所述第一***和所述第二***的程序调试。
6.根据权利要求1到3任一项所述的方法,还包括:
接收执行跨所述第一***和所述第二***的所述程序调试的请求;以及
响应于所述请求,基于所记录的所述关联而至少部分自动地执行所述程序调试。
7.根据权利要求1到3任一项所述的方法,还包括:
从第一***接收第一任务的第一跟踪信息,所述第一跟踪信息响应于针对所述第一任务的所述第一调试会话的启动而从所述第一***被发送;
从第二***的第二任务接收第二跟踪信息,所述第二跟踪信息接收自所述第一***的与所述第二任务相关联的任务;以及
响应于所述第一跟踪信息与所述第二跟踪信息相匹配,启动针对所述第二任务的所述第二调试会话。
8.一种用于自动化跨***程序调试的装置,所述装置包括:
第一确定单元,被配置为确定第一***的第一调试会话中的第一断点;
第二确定单元,被配置为确定第二***的第二调试会话中的第二断点,所述第二***不同于所述第一***;以及
断点关联记录单元,被配置为响应于用户在所述第一调试会话和所述第二调试会话中执行将所述第一断点与所述第二断点相关联的调试动作,记录所述第一断点与所述第二断点之间的关联,以用于跨所述第一***和所述第二***的程序调试的自动化;
其中所述关联被记录在调试顺序表中,所述调试顺序表记录多个不同的调试会话中的一个或者多个断点之间的多个关联,并且使用文本文件、可扩展标记语言文件、树或者图来存储。
9.根据权利要求8所述的装置,还包括:
后续动作记录单元,被配置为在所述调试顺序表中记录所述用户在与所述第二断点相关联的调试之后执行的动作,所述第一断点先于所述第二断点到达。
10.根据权利要求9所述的装置,其中所述后续动作记录单元包括:
后续调试会话记录单元,被配置为在所述调试顺序表中记录所述用户在与所述第二断点相关联的所述调试之后,继续执行所述第一调试会话还是所述第二调试会话。
11.根据权利要求8到10任一项所述的装置,还包括:
跨***调试状态记录单元,被配置为记录与所述第一断点和所述第二断点相关联的跨***调试状态,所述跨***调试状态表示所述第一调试会话和所述第二调试会话的总体状态。
12.根据权利要求11所述的装置,还包括:
状态断点设置单元,被配置为设置与所述跨***调试状态相关联的状态断点,以用于控制跨所述第一***和所述第二***的程序调试。
13.根据权利要求8到10任一项所述的装置,还包括:
请求接收单元,被配置为接收执行跨所述第一***和所述第二***的所述程序调试的请求;以及
调试执行单元,被配置为响应于所述请求,基于所记录的所述关联而至少部分自动地执行所述程序调试。
14.根据权利要求8到10任一项所述的装置,还包括:
第一跟踪信息接收单元,被配置为从第一***接收第一任务的第一跟踪信息,所述第一跟踪信息响应于针对所述第一任务的所述第一调试会话的启动而从所述第一***被发送;
第二跟踪信息接收单元,被配置为从第二***的第二任务接收第二跟踪信息,所述第二跟踪信息接收自所述第一***的与所述第二任务相关联的任务;以及
调试会话启动单元,被配置为响应于所述第一跟踪信息与所述第二跟踪信息相匹配,启动针对所述第二任务的所述第二调试会话。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410593373.4A CN105630661B (zh) | 2014-10-29 | 2014-10-29 | 用于自动化跨***程序调试的方法和装置 |
US14/825,655 US10055331B2 (en) | 2014-10-29 | 2015-08-13 | Method and apparatus for automatic cross-system program debugging |
US16/034,800 US10565091B2 (en) | 2014-10-29 | 2018-07-13 | Method and apparatus for automatic cross-system program debugging |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410593373.4A CN105630661B (zh) | 2014-10-29 | 2014-10-29 | 用于自动化跨***程序调试的方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105630661A CN105630661A (zh) | 2016-06-01 |
CN105630661B true CN105630661B (zh) | 2018-09-25 |
Family
ID=55852791
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410593373.4A Active CN105630661B (zh) | 2014-10-29 | 2014-10-29 | 用于自动化跨***程序调试的方法和装置 |
Country Status (2)
Country | Link |
---|---|
US (2) | US10055331B2 (zh) |
CN (1) | CN105630661B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105630661B (zh) | 2014-10-29 | 2018-09-25 | 国际商业机器公司 | 用于自动化跨***程序调试的方法和装置 |
US10380000B2 (en) | 2017-01-17 | 2019-08-13 | International Business Machines Corporation | Multi environment aware debugger |
US10204030B1 (en) * | 2017-10-09 | 2019-02-12 | International Business Machines Corporation | Debug session tree recorder with generic playback |
DE112018007081B4 (de) * | 2018-03-19 | 2021-04-08 | Mitsubishi Electric Corporation | Informationsverarbeitungsgerät und Informationsverarbeitungsverfahren |
US10761967B2 (en) * | 2018-05-16 | 2020-09-01 | Texas Instruments Incorporated | Managing and maintaining multiple debug contexts in a debug execution mode for real-time processors |
US10430321B1 (en) | 2018-08-21 | 2019-10-01 | International Business Machines Corporation | White box code concurrency testing for transaction processing |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1959652A (zh) * | 2005-11-03 | 2007-05-09 | 国际商业机器公司 | 在分布式调试器中调试计算机程序的方法和装置 |
US8024706B1 (en) * | 2005-09-27 | 2011-09-20 | Teradata Us, Inc. | Techniques for embedding testing or debugging features within a service |
CN102279790A (zh) * | 2010-06-11 | 2011-12-14 | 国际商业机器公司 | 分布式调试方法和*** |
CN103678135A (zh) * | 2013-12-25 | 2014-03-26 | 普元信息技术股份有限公司 | 大数据环境下实现跨进程与跨线程调试的***与方法 |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7200839B2 (en) | 2001-12-11 | 2007-04-03 | International Business Machines Corporation | Debugging transactions across multiple processors |
US6941492B1 (en) | 2002-02-05 | 2005-09-06 | Emc Corporation | Debugging tool for efficient switching between targets in a multi-processor environment |
US7383539B2 (en) * | 2003-09-18 | 2008-06-03 | International Business Machines Corporation | Managing breakpoints in a multi-threaded environment |
US7222264B2 (en) * | 2004-03-19 | 2007-05-22 | Intel Corporation | Debug system and method having simultaneous breakpoint setting |
US20050223359A1 (en) | 2004-03-30 | 2005-10-06 | Rao Nagaraju Kodalapura N | Techniques for multi-core debugging |
US8171346B2 (en) | 2010-03-10 | 2012-05-01 | Microsoft Corporation | Client session based debugging |
US8429553B2 (en) | 2010-11-12 | 2013-04-23 | Microsoft Corporation | Debugging in a multi-processing environment by providing debugging information on computer process nodes and messages in a GUI |
US8683267B2 (en) | 2011-06-07 | 2014-03-25 | International Business Machines Corporation | Virtual debugging sessions |
DE102013102229A1 (de) * | 2013-02-27 | 2014-08-28 | Fujitsu Technology Solutions Intellectual Property Gmbh | Verfahren zum Ausführen von Tasks auf einem Produktions-Computersystem sowie Datenverarbeitungssystem |
CN105630661B (zh) | 2014-10-29 | 2018-09-25 | 国际商业机器公司 | 用于自动化跨***程序调试的方法和装置 |
-
2014
- 2014-10-29 CN CN201410593373.4A patent/CN105630661B/zh active Active
-
2015
- 2015-08-13 US US14/825,655 patent/US10055331B2/en not_active Expired - Fee Related
-
2018
- 2018-07-13 US US16/034,800 patent/US10565091B2/en not_active Expired - Fee Related
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8024706B1 (en) * | 2005-09-27 | 2011-09-20 | Teradata Us, Inc. | Techniques for embedding testing or debugging features within a service |
CN1959652A (zh) * | 2005-11-03 | 2007-05-09 | 国际商业机器公司 | 在分布式调试器中调试计算机程序的方法和装置 |
CN102279790A (zh) * | 2010-06-11 | 2011-12-14 | 国际商业机器公司 | 分布式调试方法和*** |
CN103678135A (zh) * | 2013-12-25 | 2014-03-26 | 普元信息技术股份有限公司 | 大数据环境下实现跨进程与跨线程调试的***与方法 |
Also Published As
Publication number | Publication date |
---|---|
US10055331B2 (en) | 2018-08-21 |
US10565091B2 (en) | 2020-02-18 |
CN105630661A (zh) | 2016-06-01 |
US20180322029A1 (en) | 2018-11-08 |
US20160124838A1 (en) | 2016-05-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105630661B (zh) | 用于自动化跨***程序调试的方法和装置 | |
CN105701006B (zh) | 用于程序调试中的变量跟踪的方法和*** | |
KR102166753B1 (ko) | 자동화된 반도체 디바이스 테스트를 위한 테스트 계획을 컴파일하기 위해 사용되는 개발 환경 내에 편집 및 갱신 기능 구현 | |
CN106951369B (zh) | 一种联调测试的管理方法及装置 | |
CN104346274B (zh) | 程序调试器及一种程序的调试方法 | |
US20120331449A1 (en) | Device, method and computer program product for evaluating a debugger script | |
US20190057335A1 (en) | Targeted data element detection for crowd sourced projects with machine learning | |
TW201312340A (zh) | 手持式電子裝置的測試系統及方法 | |
WO2016078335A1 (zh) | 自动化脚本的编写方法和装置 | |
TWI566090B (zh) | Debugging firmware / software to produce tracking systems and methods, recording media and computer program products | |
CN106093897B (zh) | 一种雷达***的测试***及测试方法 | |
CN102234046B (zh) | 电梯控制软件现场调试*** | |
US20180196742A1 (en) | System and method for end to end performance response time measurement based on graphic recognition | |
CN103049374B (zh) | 一种自动化测试的方法及装置 | |
CN112905441A (zh) | 测试用例生成方法、测试方法、装置及设备 | |
US11099978B2 (en) | Modeling system for software-implemented testing using domain specific profiles to translate tests for a subset of paths included in a UML test model | |
US20150082287A1 (en) | Scenario based test design | |
WO2016165461A1 (zh) | 一种电信网网管***软件自动化测试方法和装置 | |
Kuroiwa et al. | Testing environment for CPS by cooperating model checking with execution testing | |
CN109240928A (zh) | 一种测试方法、装置、设备及存储介质 | |
US8966455B2 (en) | Flow analysis in program execution | |
CN114679402B (zh) | 一种医疗机器人上下位机间通信协议的测试方法及装置 | |
US20100299129A1 (en) | Mapping Between Stress-Test Systems and Real World Systems | |
US20220100640A1 (en) | Generating test input values for functional components based on test coverage analysis | |
US11184229B2 (en) | Development operation support system, development management server, operation management server, method thereof, and non-transitory computer readable medium storing program thereof |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |