分布式调试方法和系统的制作方法

文档序号:6425818阅读:159来源:国知局
专利名称:分布式调试方法和系统的制作方法
技术领域
本发明的一个实施例一般地涉及计算机系统,更具体地说,涉及分布式计算机系统上的调试计算机程序。
背景技术
计算机系统通常包括计算机程序和诸如半导体、晶体管、芯片和电路板之类的硬件的组合。计算机程序存储在存储设备中并由处理器执行。随着计算机程序的精密性和复杂性的增加,程序变得更难以调试。缺陷是计算机程序中的问题、故障或错误。查找、分析和更正计算机程序中的可疑故障的过程被称为“调试”。通常,程序员使用另一种通常被称为“调试器”的计算机程序来调试处于开发下的程序。常规调试器通常支持三种主要类型的操作,计算机程序员可以通过用户界面请求这些操作。第一种类型是断点或地址监视操作,此操作允许程序员借助断点标识处理器在该处暂停程序执行的确切指令,或通过地址监视标识存储单元以便处理器监视内容修改, 此时暂停程序的执行。因此,当调试器执行程序时,程序在处理器上以正常方式执行,直至到达断点或写入被监视存储单元的内容,此时调试器暂停程序的执行。第二种类型是步进操作,此操作允许计算机程序员使处理器逐个或成组执行程序中的指令。执行每个指令或每组指令之后,调试器便暂停程序的执行。一旦通过步进操作或断点操作暂停程序的执行, 常规调试器便提供第三种类型的操作,此操作显示存储在各存储单元处的内容以响应程序员的请求。通过这种在各个指令处暂停程序并检查各存储单元的内容的调试过程,程序员最终可能找到其存储内容(例如指令或数据)不正确或异常的存储单元。

发明内容
本发明提供了一种方法、计算机可读存储介质和分布式调试系统。在一个实施例中,第一计算机处的第一调试代理接收来自第一程序的分组。所述第一调试代理将调试命令和所述第一调试代理的标识符添加到所述分组并将所述分组发送到接收计算机。所述接收计算机处的第二调试代理从所述分组移除所述调试命令和所述第一调试代理的所述标识符,并将所述分组发送到在所述接收计算机处执行的第二程序。所述第二调试代理进一步执行所述调试命令,所述调试命令导致在所述接收计算机上执行的所述第二程序在断点处暂停执行或在更新地址监视存储单元时暂停。所述第二调试代理将所述第二程序的状态发送到所述第一调试代理,所述第一调试代理在所述第一计算机处呈现所述状态和所述第二程序的列表。


图1示出了用于实施本发明的一个实施例的实例系统的高级方块图;图2是示出根据本发明的一个实施例的分布式调试系统的选定组件的方块图;图3是示出根据本发明的一个实施例的另一个分布式调试系统的选定组件的方块图;图4是示出本发明的一个实施例的选定组件的交互的方块图;图5示出了根据本发明的一个实施例的实例调试用户界面的方块图;图6示出了根据本发明的一个实施例的另一个实例调试用户界面的方块图;图7示出了根据本发明的一个实施例的实例已保存的调试数据的方块图;图8示出了根据本发明的一个实施例的启用调试命令的实例处理的流程图;图9示出了根据本发明的一个实施例的禁用调试命令的实例处理的流程图;图10示出了根据本发明的一个实施例的断点和分布式地址监视命令的实例处理的流程图;图11示出了根据本发明的一个实施例的发送数据分组的实例处理的流程图;图12示出了根据本发明的一个实施例的接收数据分组的实例处理的流程图;图13示出了根据本发明的一个实施例的处理中断的实例处理的流程图;以及图14示出了根据本发明的一个实施例的处理从网络接收的状态的实例处理的流程图。但是,要指出的是,附图仅示出了本发明的实例实施例,因此不应被视为限制本发明的范围,因为本发明可以容许其他同等有效的实施例。
具体实施例方式参考附图,其中相同的编号表示图中相同的部件,图1示出了根据本发明的一个实施例的连接到网络130的计算机系统100的高级方块图表示。计算机系统100的主要组件包括一个或多个处理器101、主存储器102、终端接口 111、存储接口 112、1/0(输入/输出)设备接口 113以及网络适配器114,所有这些组件可通信地直接或间接连接,以便通过存储器总线103、I/O总线104和I/O总线接口单元105进行组件间通信。计算机系统100包含一个或多个通用可编程中央处理单元(CPU) 101A、101B、101C 和101D,在此统称为处理器101。在一个实施例中,计算机系统100包含相对大型系统中通常具有的多个处理器;但在另一个实施例中,计算机系统100可备选地是单CPU系统。每个处理器101执行主存储器102中存储的指令并可包括一个或多个级别的板载高速缓存。主存储器102是用于对数据和程序进行存储或编码的随机存取半导体存储器、存储设备或存储介质。在另一个实施例中,主存储器102表示计算机系统100的整个虚拟存储器,并且还可以包括耦合到计算机系统100或通过网络130连接的其他计算机系统的虚拟存储器。主存储器102在概念上是单个独立实体,但在其他实施例中主存储器102是更复杂的布置,例如具有高速缓存和其他存储器设备的层次结构。例如,存储器可以存在于多个级别的高速缓存中,并且这些高速缓存可以进一步按功能划分,以便一个高速缓存保存指令而另一个保存一个或多个处理器使用的非指令数据。存储器可以进一步分配并与不同 CPU或CPU组关联,如在任何不同的所谓非一致存储器访问(NUMA)计算机架构中公知的那样。主存储器102存储或编码程序150、分组152、网络资源154、调试代理156以及已保存的调试数据158。虽然程序150、分组152、网络资源154、调试代理156以及已保存的调试数据158被示为包含在计算机系统100中的存储器102内,但在其他实施例中,它们
6的一部分或全部可以在不同的计算机系统上,并可以例如通过网络130远程访问。计算机系统100可以使用虚拟寻址机制,所述虚拟寻址机制允许计算机系统100的程序表现得好像它们仅具有对大型单个存储实体的访问而不是访问多个较小的存储实体。因此,虽然程序150、分组152、网络资源154、调试代理156以及已保存的调试数据158被示为包含在主存储器102内,但这些元素并不一定全部同时完全包含在同一存储设备中。进而,虽然程序 150、分组152、网络资源154、调试代理156以及已保存的调试数据158被示为单独的实体, 但在其他实施例中,它们的一部分、它们的一部分中的一些或全部可以打包在一起。程序150包括在计算机系统100的处理器101上执行的代码以及在通过网络130 连接到计算机系统100的其他计算机系统上执行的程序的副本。程序150是通过调试代理 156调试的程序。程序150可以是任何类型的可执行或可解释代码或语句(无论以源形式还是目标形式)。在各实施例中,程序150可为应用程序、操作系统程序、网络应用、应用服务器、服务器程序、网格程序、科学计算管理器、查询优化器或任何其他类型的程序。分组152包括程序150通过网络130从/向其他计算机系统读取和接收/写入和发送的数据。在各种实施例中,分组152可以包括数据;数据库;对象;类;代码;文件;目录、子目录和文件的层次结构;数据结构;或任何其他类型的数据或信息库。网络资源巧4管理通过网络130发送和接收分组152。在各种实施例中,网络资源巧4包括套接字、API (应用编程接口)、对象请求代理或配置文件。在另一个实施例中, 网络资源巧4包括程序、模块、方法、类,或者包括在计算机系统100上执行的指令或语句单元的对象。调试代理156管理程序150中的断点和地址监视以响应接收调试命令,所述调试命令可以在命令行上发出、通过图形用户界面输入或通过应用发出。断点是程序150内的用户希望在该处暂停程序150的执行的语句或指令。地址监视可监视存储单元(例如地址、 字段、对象、记录或文件)并暂停程序150的执行以响应程序150修改、更新或写入此存储单元的内容。因此,当调试代理156执行程序150时,程序150在处理器101上以正常方式执行,直至到达断点或修改了被监视的存储单元。调试代理156然后在断点指令或修改存储单元的指令处停止程序150的执行,并在调试器用户界面上通过用户输入/输出设备121 向用户显示程序150的结果和/或状态和/或计算机系统100的状态以便分析。调试代理156例如通过使用无效指令替换程序150中断点位置处的有效语句或指令或通过在断点表中创建断点记录来在程序150中设置断点。调试代理156通过处理器 101的功能启动地址监视,所述地址监视可监视调试代理156指定的存储单元。设置断点和/或地址监视之后,用户向调试用户界面提供继续程序150的执行的输入。响应于程序 150的执行最终遇到所述无效语句或指令或被监视存储单元的内容最终被修改,将发生系统异常或中断,这会暂停程序150的执行并将对处理器101的控制给予调试代理156。调试代理156然后通过调试用户界面将控制给予用户,用户然后可以通过用户界面向调试代理156发出命令,调试代理156解释所述命令以查找和显示定义输入存储单元的内容的语句或指令,显示存储单元的内容,设置或移除断点或地址监视功能,继续程序150的执行, 或者任何其他适当的操作。已保存的调试数据158包括调试代理156已经保存的数据。下面参考图7进一步描述已保存的调试数据158。调试代理156使用已保存的调试数据158实施分布式调试,如下面参考图8、9、10、11、12、13以及14进一步描述的那样。在一个实施例中,程序150、网络资源巧4和调试代理156中的一个、部分或全部包括在处理器101上执行的指令或语句或由在处理器101上执行的指令或语句解释的指令或语句以执行功能,如下面参考图8、9、10、11、12、13以及14进一步描述的那样。在一个实施例中,代替基于处理器的系统或除了基于处理器的系统以外,程序150、网络资源巧4和调试代理156中的一个、部分或全部通过半导体器件、芯片、逻辑门、电路、电路卡和/或其他物理硬件设备以硬件实现。存储器总线103提供数据通信路径,以便在处理器101、主存储器102和I/O总线接口单元105之间传输数据。I/O总线接口单元105还耦合到系统I/O总线104以便向/ 从各种I/O单元传输/接收数据。I/O总线接口单元105通过系统I/O总线104与多个I/ 0接口单元111、112、113以及114通信,这些I/O接口单元也被称为I/O处理器(IOP)或 I/O适配器(IOA)。I/O接口单元支持与各种存储设备和I/O设备通信,例如,终端接口单元111支持附接一个或多个用户输入/输出设备121,用户输入/输出设备121可以包括用户输出设备 (例如视频显示设备、扬声器、打印机和/或电视机)和用户输入设备(例如键盘、鼠标、小键盘、触摸板、轨迹球、按钮、光笔或其他指点设备)。用户可以操纵用户输入设备以便通过用户界面向用户输入/输出设备121和计算机系统100提供输入,并且可以通过用户输出设备接收输出。例如,可以通过用户输入/输出设备121呈现用户界面,例如在显示设备上显示、通过扬声器播放或通过打印机打印。存储接口单元112支持附接一个或多个直接访问存储设备(DASD) 125和126(通常为旋转磁盘驱动器存储设备,但它们可以备选地是其他设备,包括被配置为对主机而言似乎是单个大型存储设备的盘驱动器阵列)。在另一个实施例中,设备125和/或1 可以通过任何类型的辅助存储设备实现。可以根据需要将主存储器102的内容或其中的任何部分存储到直接访问存储设备125和126以及从直接访问存储设备125和1 检索主存储器 102的内容或其中的任何部分。I/O设备接口 113提供到各种其他输入/输出设备或其他类型设备(例如打印机或传真机)中的任何设备的接口。网络适配器114提供一个或多个从计算机系统100到其他数字设备和计算机系统的通信路径;此类路径可以包括例如一个或多个网络130。虽然存储器总线103在图1中被示为是在处理器101、主存储器102和I/O总线接口 105之间提供直接通信路径的相对简单的单个总线结构,但实际上存储器总线103可以包括多个不同的总线或通信路径,它们可以采用任何不同的方式布置,例如分层、星形或 Web配置中的点对点链路、多层总线、并行和冗余路径或任何其他适当类型的配置。此外, 虽然I/O总线接口 105和I/O总线104被示为单个相应单元,但计算机系统100实际上可以包含多个I/O总线接口单元105和/或多个I/O总线104。虽然示出多个I/O接口单元 (将系统I/O总线104与到达各I/O设备的各通信路径分开),但在其他实施例中,部分或全部I/O设备直接连接到一个或多个系统I/O总线。在各实施例中,计算机系统100可以是多用户“大型机”计算机系统、单用户系统, 或是具有小型直接用户界面或没有直接用户界面,但从其他计算机系统(客户端)接收请求的服务器或类似设备。在其他实施例中,计算机系统100可以实现为台式计算机、便携式计算机、膝上型或笔记本式计算机、平板计算机、袖珍计算机、电话、寻呼机、汽车、电话会议系统、家电或任何其他适当类型的电子设备。网络130可以是任何适合的网络或网络组合,并且可以支持适合于到达/来自计算机系统100的数据和/或代码的通信的任何适当的协议。在各种实施例中,网络130可以表示直接或间接连接到计算机系统100的存储设备或存储设备组合。在另一个实施例中, 网络130可以支持无线通信。在另一个实施例中,网络130可以支持硬连线通信,例如电话线或电缆。在另一个实施例中,网络130可以是因特网并且可以支持IP(网际协议)。在另一个实施例中,网络130可以是局域网(LAN)或广域网(WAN)。在另一个实施例中,网络130可以是热点服务提供商网络。在另一个实施例中,网络130可以是内联网。 在另一个实施例中,网络130可以是GPRS(通用分组无线业务)网络。在另一个实施例中, 网络130可以是FRS (家庭无线电服务)网络。在另一个实施例中,网络130可以是任何适当的蜂窝数据网络、基于蜂窝的无线电网络。在另一个实施例中,网络130可以是任何适合的网络或网络组合。虽然示出一个网络130,但在其他实施例中可以存在任意数量的网络 (相同或不同类型)。应该理解,图1旨在以高级别示出计算机系统100和网络130的主要代表性组件, 各个组件可以具有比图1中所示更大的复杂性,可以存在不同于图1中所示组件或除了图 1中所示组件之外的组件,并且此类组件的数量、类型和配置可以有所不同。在此披露了具有此类额外复杂性或额外变化的若干特定实例;将理解,这些只是实例并且不一定仅有此类变型。图1中所示并实施本发明的各种实施例的各种程序组件可以采用多种方式实现, 包括使用各种计算机应用、例程、组件、程序、对象、模块、数据结构等,并在以下称为“计算机程序”或简称“程序”。所述计算机程序包括一个或多个指令或语句,所述指令或语句在不同时间驻留在计算机系统100内的不同存储器和存储设备中,并且当由计算机系统100中的一个或多个处理器读取和执行时或者当由一个或多个处理器执行的指令解释时,导致计算机系统100完成执行包括本发明的实施例的各方面的步骤或元素所必需的操作。如本领域的技术人员将理解的,本发明的实施例的各方面可以体现为系统、方法或计算机程序产品。相应地,本发明的实施例的各方面可以采取完全硬件实施例、完全程序实施例(包括存储在存储设备中的固件、驻留程序、微代码等)或组合了在此通常被称为 “电路”、“模块”或“系统”的程序和硬件方面的实施例的形式。此外,本发明的各实施例可以采取体现在一个或多个计算机可读介质(其中包含计算机可读程序代码)中的计算机程序产品的形式。可以使用一个或多个计算机可读介质的任意组合。所述计算机可读介质可以是计算机可读信号介质或计算机可读存储介质。计算机可读存储介质例如可以是(但不限于) 电、磁、光、电磁、红外线或半导体系统、装置或设备或它们的任何适当组合。计算机可读存储介质的更具体的实例(非穷举列表)可以包括以下项具有一条或多条线的电连接、便携式计算机软盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦写可编程只读存储器(EPROM)或闪存、光纤、便携式光盘只读存储器(CD-ROM)、光存储设备、磁存储设备或它们的任何适当组合。在本文档的上下文中,计算机可读存储介质可以是任何能够包含或存储由指令执行系统、装置或设备使用或与所述指令执行系统、装置或设备结合的程序的有形介质。计算机可读信号介质可以包括其中包含计算机可读程序代码(例如,在基带中或作为载波的一部分)的传播数据信号。此类传播信号可以采取多种形式中的任何形式,包括但不限于电磁、光或它们的任何适当组合。计算机可读信号介质可以是任何并非计算机可读存储介质并传送、传播或传输由指令执行系统、装置或设备使用或与所述指令执行系统、装置或设备结合的程序的计算机可读介质。可以使用任何适当的介质(包括但不限于无线、有线、光缆、射频(RF)或它们的任何适当组合)来传输计算机可读介质中包含的程序代码。用于执行本发明的实施例的各方面的操作的计算机程序代码可以使用一种或多种编程语言的任意组合来编写,所述编程语言包括面向对象的编程语言和常规过程编程语言。所述程序代码可以完全地在用户计算机上执行,部分地在远程计算机上执行,或者完全地在远程计算机或服务器上执行。在后者的情况中,所述远程计算机可以通过包括局域网 (LAN)或广域网(WAN)的任何类型网络与用户的计算机相连,也可以与外部计算机进行连接(例如,使用因特网服务提供商通过因特网连接)。下面参考方法、装置(系统)和计算机程序产品的流程图和/或方块图对本发明的实施例的各方面进行描述。所述流程图和/或方块图的每个方块以及所述流程图和/或方块图中的方块的组合可以由计算机可读介质中包含的计算机程序指令来实现。这些计算机程序指令可以被提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器以产生机器,以便通过所述计算机或其他可编程数据处理装置的处理器执行的指令产生用于实现在一个或多个流程图和/或方块图方块中指定的功能/操作的装置。这些计算机程序指令也可以被存储在引导计算机、其他可编程数据处理装置或其他设备以特定方式工作的计算机可读介质中,以便存储在所述计算机可读介质中的指令产生一件包括实现在所述一个或多个流程图和/或方块图方块中指定的功能/操作的指令的制品。定义本发明的各种实施例的功能的计算机程序可以通过各种有形计算机可读存储介质被提供给计算机系统,所述有形计算机可读存储介质可操作地或可通信地(直接或间接)连接到一个或多个处理器。所述计算机程序指令还可被加载到计算机、其他可编程数据处理装置或其他设备,以导致在所述计算机、其他可编程装置或其他设备上执行一系列操作步骤以产生计算机实现的过程,从而在所述计算机或其他可编程装置上执行的指令提供用于实现在一个或多个流程图和/或方块图方块中指定的功能/操作的过程。附图中的流程图和方块图示出了根据本发明的各种实施例的系统、方法和计算机程序产品的可能实施方式的架构、功能和操作。在此方面,所述流程图或方块图中的每个方块都可以表示模块、段或代码部分,它们包括用于实现指定的逻辑功能(多个)的一个或多个可执行指令。还应指出,在某些备选实施方式中,在方块中说明的功能可以不按图中说明的顺序发生。例如,示为连续的两个方块可以实际上被基本同时地执行,或者某些时候,取决于所涉及的功能,可以以相反的顺序执行所述方块。还应指出,所述方块图和/或流程图的每个方块以及所述方块图和/或流程图中的方块的组合可以由执行指定功能或操作的基于专用硬件的系统或专用硬件和计算机指令的组合来实现。也可以作为与客户公司、非营利组织、政府实体或内部组织结构签订的服务协议的一部分来提供本发明的各实施例。这些实施例的各方面可以包括配置计算机系统以执行此处所述的部分或全部方法,部署实现此处所述的部分或全部方法的计算服务(例如,计算机可读代码、硬件和Web服务)。这些实施例的各方面还可以包括分析客户公司、创建建议以响应所述分析、生成计算机可读代码以实现所述建议的各部分、将所述计算机可读代码集成到现有过程、计算机系统以及计算基础结构中、计量此处所述的方法和系统的使用、 为用户分配费用,以及对用户使用这些方法和系统进行计费。此外,下文中所述的各程序可以根据在本发明的特定实施例中实现它们的应用来确定。但是,所遵循的任何特定程序命名法仅为了使用方便,因此不应将本发明的实施例限于仅在此类命名法确定和/或暗示的任何特定应用中使用。图1中示出的示意性环境并非旨在限制本发明。实际上,可以使用其他备选硬件和/或程序环境而不偏离本发明的实施例的范围。图2是示出根据本发明的一个实施例的分布式调试系统的选定组件的方块图。分布式调试系统包括通过网络130连接的服务器计算机系统节点100-1、100-2和100-3、负载平衡器计算机系统服务器节点100-4以及客户端计算机系统节点100-5。计算机系统节点 100-1、100-2、100-3、100-4以及100-5是计算机系统100(图1)的实例并通常指计算机系统100。虽然客户端计算机系统节点100-5被示为通过网络130连接到服务器计算机系统节点100-1、100-2和100-3,但在另一个实施例中,客户端计算机系统节点100-5通过网络 130连接到负载平衡器服务器节点100-4,并通过负载平衡器服务器节点100-4可通信地连接到服务器计算机系统节点100-1、100-2和100-3。服务器计算机系统节点100-1包括服务器程序150-1、网络资源154_1、调试代理156-1以及已保存的调试数据158-1。服务器计算机系统节点100-2包括服务器程序 150-2、网络资源154-2、调试代理156-2以及已保存的调试数据158-2。服务器计算机系统节点100-3包括服务器程序150-3、网络资源154-3、调试代理156-3以及已保存的调试数据158-3。负载平衡器计算机系统服务器节点100-4包括服务器程序150-4、网络资源 154-4、调试代理156-4以及已保存的调试数据158-4。客户端计算机系统节点100-5包括程序150-5、服务器程序150-1、150-2、150-3和150-4、网络资源154-5、调试代理156-5以及已保存的调试数据158-5。程序150-1、150-2、150-3、150-4以及150-5是程序150(图 1)的实例并通常指程序150。网络资源154-1、154-2、154-3、154-4以及154-5是网络资源 154(图1)的实例并通常指网络资源154。调试代理156-1、156-2、156-3、156-4以及156-5 是调试代理156(图1)的实例并通常指调试代理156。已保存的调试数据158-1、158-2、 158-3、158-4以及158-5是已保存的调试数据158(图1)的实例并通常指已保存的调试数据 158。程序150-1、150-2、150-3、150-4 以及 150-5 包括调试代理 156-1、156-2、156-3、 156-4以及156-5调试的指令。在一个实施例中,程序150-1、150-2、150-3、150-4以及 150-5全部都相同。在另一个实施例中,程序150-1、150-2、150-3、150-4以及150-5中的部分或全部程序彼此不同。客户端计算机系统节点100-5中的程序150-5包括在客户端计算机系统节点 100-5处的处理器上执行的代码。客户端计算机系统节点100-5中的服务器程序150-1、 150-2、150-3以及150-4分别是服务器计算机系统节点100-1、100-2和100-3以及负载平衡器计算机系统节点100-4处的服务器程序150-1、150-2、150-3以及150-4的副本。服务器程序150-1、150-2、150-3以及150-4不在客户端计算机系统节点100-5处执行。相反, 除了显示程序150-5的程序列表及其状态信息之外,客户端计算机系统节点100-5可以显示服务器程序150-1、150-2、150-3和150-4中的一个或多个的程序列表及其状态信息以便帮助调试,如下面参考图6进一步描述的那样。程序列表包括所述程序中包括的源代码和 /或已编译的目标代码指令或语句。所述程序列表还可以包括标识所述列表内的指令或语句以及指令或语句的顺序的指令或语句编号。负载平衡器计算机系统节点100-4从客户端计算机系统节点100-5接收请求或分组152数据并将它们分发给服务器计算机系统节点100-1、100-2和100-3以便处理。为了方便起见使用术语“客户端”和“服务器”,并且在一种方案中充当客户端的计算机系统节点可以在另一种方案中充当服务器,反之亦然。在一个实施例中,用户通过用户输入/输出设备121(图1)与调试代理156-5交互以调试程序 150-1、150-2、150-3、150-4 和 / 或 150-5。当程序150-5暂停时,用户通过经由输入/输出设备121输入的调试命令来请求调试代理156-5在服务器节点100-1、100-2、100-3和/或100-4上执行的服务器程序 150-1、150-2、150-3和/或150-4中的一个或多个的指令处设置断点,或者针对服务器节点100-1、100-2、100-3和/或100-4的存储器中的地址的内容建立地址监视。调试代理 156-5将调试命令保存在已保存的调试数据158-5中。用户然后通过用户输入/输出设备 121 (图1)请求调试代理156启动在客户端100-5上执行的程序150-5。程序150-5执行并产生数据分组152和/或命令(多个)以便发送到负载平衡器100-4。调试代理156-5 拦截分组152,将已保存的调试命令和调试代理156-5的标识符添加到分组152,并将分组 152发送到负载平衡器100-4,负载平衡器100-4将分组152发送到在该处处理或执行所述分组的服务器100-1、100-2或100-3中的一个或多个。各个服务器100-1、100-2、100-3 或 100-4 处的调试代理 156-1、156-2、156-3 或 156-4从各个网络资源巧4-1、巧4-2、巧4-3或巧4_4拦截或接收分组152、从分组152移除或删除所述调试命令和调试代理156-5的标识符、将所述调试命令和调试代理156-5的标识符保存在各个已保存的调试数据158-1、158-2、158-3或158-4中、分别在各个计算机节点100-1、100-2、100-3或100-4处执行的各个服务器程序150-1、150-2、150-3或150-4中设置请求的断点或地址监视,然后将分组152转发到各个服务器程序150-1、150-2、150-3 或 150-4。响应于服务器程序150-1、150-2、150-3或150_4的执行遇到该处设置了断点的指令或修改地址监视所监视的存储单元的内容的指令,调试代理156-1、156-2、156-3或 156-4暂停服务器程序150-1、150-2、150-3或150-4的执行、在已保存的调试数据158-1、 158-2,158-3或158-4中查找调试代理156-5的标识符,并将已暂停的服务器程序150-1、 150-2、150-3或150-4的状态发送到调试代理156-5。调试代理156-5在客户端计算机系统节点100-5处查找在计算机系统节点100-1、100-2、100-3或100-4中执行期间遇到断点的服务器程序150-1、150-2、150-3或150-4的副本,并在客户端计算机系统节点100-5处呈现或显示服务器程序150-1、150-2、150-3或150-4的副本以及状态信息。图3是示出根据本发明的一个实施例的分布式调试系统的选定组件的方块图。
12图3的实例分布式调试系统包括通过网络130连接的网格计算机系统节点100-6、100-7、 100-8、100-9 以及 100-10。网格计算机系统节点 100-6、100-7、100-8、100-9 以及 100-10 是计算机系统100(图1)的实例并通常指计算机系统100。网格计算机系统节点100-6包括网格程序150-6、对象152_6、对象请求代理 154-6、调试代理156-6以及已保存的调试数据158-6。网格计算机系统节点100-7包括网格程序150-7、对象152-7、对象请求代理154-7、调试代理156-7以及已保存的调试数据 158-7。网格计算机系统节点100-8包括网格程序150-8、对象152-8、对象请求代理154-8、 调试代理156-8以及已保存的调试数据158-8。网格计算机系统节点100-9包括网格程序 150-9、对象152-9、对象请求代理154-9、调试代理156-9以及已保存的调试数据158-9。 客户端计算机系统节点100-10包括网格程序150-6、150-7、150-8、150-9和150-10、对象 152-10、对象请求代理1M-10、调试代理156-10以及已保存的调试数据158-10。网格程序150-6、150-7、150-8、150-9以及150-10是网格程序150(图1)的实例并通常指网格程序150。对象152-6、152-7、152-8、152-9以及152-10是分组152(图1) 的实例并通常指分组152。对象请求代理154-6、154-7、154-8、154-9以及154-10是网格资源154(图1)的实例并通常指网格资源154。调试代理156-6、156-7、156-8、156-9以及 156-10是调试代理156(图1)的实例并通常指调试代理156。已保存的调试数据158-6、 158-7、158-8、158-9以及158-10是已保存的调试数据158 (图1)的实例并通常指已保存的调试数据158。网格程序 150-6、150-7、150-8、150-9 以及 150-10 包括调试代理 156_6、156_7、 156-8、156-9以及156-10所调试的指令。在一个实施例中,网格程序150-6、150-7、150-8、 150-9以及150-10均相同。在另一个实施例中,网格程序150-6、150-7、150-8、150-9以及 150-10中的部分或全部彼此不同。客户端计算机系统节点100-10中的网格程序150-10包括在客户端计算机系统节点100-10处的处理器上执行的代码。客户端计算机系统节点100-10中的网格程序150-6、 150-7,150-8以及150-9分别是网格计算机系统节点100_6、100_7和100-8以及网格计算机系统节点100-9处的网格程序150-6、150-7、150-8以及150-9的副本。网格程序150-6、 150-7,150-8以及150-9不在客户端计算机系统节点100-10处执行。相反,除了显示网格程序150-10的程序列表及其状态信息之外,客户端计算机系统节点100-10可以显示网格程序150-6、150-7、150-8和150-9中的一个或多个的程序列表及其状态信息以便帮助调试,如下面参考图6进一步描述的那样。仅为了方便起见使用术语“客户端”,并且在一种方案中充当客户端的网格计算机系统节点可以在另一种方案中充当服务器,反之亦然。对象请求代理巧4-6、巧4-7、巧4-8、巧4-9和/或154-10可以将对象152发送到网格计算机系统节点100-6、100-7、100-8、100-9和/或100-10中的各个节点以便由各个网格程序150-6、150-7、150-8、150-9和/或150-10处理。所述对象可以在网格计算机系统节点之间传送任意次数。在一个实施例中,用户通过用户输入/输出设备121(图1)与调试代理156-10交互以调试网格程序150-6、150-7、150-8、150-9和/或150-10。当网格程序150-10的执行暂停时,用户通过经由输入/输出设备121(图1)输入的调试命令来请求调试代理156-10 针对对象152-10或对象152-10中的任意一个或多个字段设置分布式地址监视。调试代理156-10将所述调试命令保存在已保存的调试数据158-10中。用户然后通过用户输入/输出设备121 (图1)请求调试代理156-10启动在客户端100-10上执行的网格程序150-10。 网格程序150-10执行并产生对象152-10以便通过对象请求代理154-10发送到网格计算机系统节点100-6、100-7、100-8和/或100-9。调试代理156-10拦截对象152-10、将已保存的调试命令和调试代理156-10的标识符添加到对象152-10,并将对象152-10发送到网格计算机系统节点100-6、100-7、100-8和/或100-9。网格计算机系统节点100-6、100-7、100-8或100-9处的调试代理156-6、156-7、 156-8或156-9通过对象请求代理巧4_6、巧4_7、巧4_8或巧4_9拦截对象152-10、从对象152-10移除所述调试命令和调试代理156-10的标识符,将所述调试命令和调试代理 156-10的标识符保存在已保存的调试数据158-6、158-7、158-8或158-9中,针对对象 152-10设置分布式地址监视,然后将对象152-10转发到网格程序150-6、150-7、150-8或 150-9以便处理。响应于网格程序150-6、150-7、150-8或150_9的执行修改了对象152-10或对象 152-10中的一个或多个字段,调试代理156-6、156-7、156-8或156-9暂停网格程序150-6、 150-7、150-8或150-9的执行,在已保存的调试数据158-6、158-7、158-8或158-9中查找调试代理156-10的标识符,并将已暂停的网格程序150-6、150-7、150-8或150-9的状态发送到调试代理156-10。调试代理156-10查找在计算机系统节点100-6、100-7、100-8或100-9 中执行时修改对象152-10的网格程序150-6、150-7、150-8或150-9的副本,并显示网格程序150-6、150-7、150-8或150-9的副本以及状态信息。图4是示出本发明的一个实施例的选定组件的交互的方块图。调试代理156包括调试用户界面454、分析器458、解释器460、断点陷阱处理机464以及调试钩子466。调试用户界面454、分析器458、解释器460、断点陷阱处理机464以及调试钩子466包括在处理器101上执行的指令或由在所述处理器上执行的指令所解释的语句。在另一个实施例中, 代替基于处理器的系统或除了基于处理器的系统,调试用户界面454、分析器458、解释器 460、断点陷阱处理机464以及调试钩子466通过电子电路、逻辑门和/或芯片以硬件实现。调试用户界面妨4提供要通过与用户交互(通过用户输入/输出设备121)建立的断点和地址监视。在某些实施例中,用户可以通过发出调试器命令定义这些断点,所述调试器命令引用程序150(图1)中的高级语言(HLL)参考(例如行或语句编号)或软件对象参考(例如程序或模块名称),可以从中交叉参考物理存储地址。在各种实施例中,可以在命令行上或通过图形用户界面发出所述调试器命令。分析器458分析来自调试用户界面454的调试命令以创建代码,解释器460解释所述代码以便在处理器101上执行。分析器458使用与程序150 —起存储的编译器或解释器所产生的表分析调试命令,以将调试器命令中的代码行编号、代码语句编号、变量名称、 对象名称或字段名称映射到存储器102中的实际物理存储地址。解释器160将存储器中的物理存储地址例如存储在断点表中。解释器460进一步运行程序以在程序150中设置断点并通过处理器功能建立地址监视。在一个实施例中,解释器460通过使用无效指令替换断点指令在程序内的断点指令处设置断点,所述无效指令在处理器上执行时,将暂停程序150 的执行并导致处理器向断点陷阱处理机464发送系统异常或中断。用户请求设置断点和/或地址监视之后,用户向调试用户界面妨4提供请求继续程序150的执行的输入。程序150的执行最终导致遇到断点或修改已建立地址监视的存储单元的内容,这将导致系统异常或中断。断点陷阱处理机464接收所述异常或中断并将有关所述异常或中断的信息传递给调试钩子466。然后,调试用户界面4M使用调试钩子466以获得调试器命令。针对其中在调试用户界面454与断点陷阱处理机464之间需要接口的情况示出了调试钩子466。在一个实施例中,调试钩子466可以使用未示出的结果缓冲区缓存调试用户界面454的数据。响应于通过调试用户界面妨4输入的请求在所述程序的执行遇到断点指令之后继续所述程序的执行的命令,解释器460使用程序150的原始有效指令替换断点位置处的所述无效指令,并重新启动在处理器101上执行的程序150。图5示出了根据本发明的一个实施例在用户I/O设备121上显示的实例调试用户界面的方块图。在客户端100-5(图2)或100-10(图3)处通过用户I/O设备121显示所述实例调试用户界面。实例调试用户界面包括程序列表500、程序列表命令580、582和584、设置断点命令M5、设置分布式地址监视命令550、运行命令555、启用调试命令560以及禁用调试命令 565。虽然各种命令580、582、584、555、560以及565被示为在显示设备上显示的按钮(通过诸如鼠标、触摸板、轨迹板、指点设备或键盘之类的输入设备选择),但在其他实施例中, 所述命令可以实现为拨号盘、滑块、窗口小部件、菜单选项、行命令、通过麦克风输入的命令以及语音识别命令,或任何其他适当类型的用户输入。虽然命令545和550被示为行命令, 但在其他实施例中,命令545和550可以实现为按钮、拨号盘、滑块、窗口小部件、菜单选项、 通过麦克风输入的命令以及语音识别命令,或任何其他适当类型的用户输入。程序列表500 显示程序 150-1、150-2、150-3、150-4、150-5、150-6、150-7、150-8、 150-9或150-10内的源和/或目标代码语句或指令的列表。如果程序的执行被暂停,则程序列表还包括程序的执行在该处被暂停的语句或指令编号的指示505。程序列表命令580、582和584请求调试代理156更改程序150_1、150_2、150_3、 150-4、150-5、150-6、150-7、150-8、150-9或150-10之间的程序列表500。响应于程序列表命令580、582和584,调试代理156显示选定程序的程序列表,包括在执行所显示程序的计算机处所述程序的执行在该处暂停的语句或指令编号(如果有)的指示。执行所显示程序的计算机系统节点可以与显示所述程序列表的客户端相同或不同。断点命令545请求调试代理156在计算机系统节点处的程序内的位置设置断点。 被请求在该处设置断点的计算机系统节点可以与发出断点命令M5的客户端相同或不同。 所述命令可以通过语句或指令编号或者通过功能、模块、方法或过程指定位置。设置分布式地址监视命令550请求调试代理156针对存储或将来存储对象的某个计算机系统节点或所有计算机系统节点处的存储器地址建立监视。被请求设置地址监视的计算机系统节点可以与发出地址监视命令550的客户端相同或不同。所述分布式地址监视命令可以通过对象名称、指针名称、变量名称、字段名称或文件名称指定地址。响应于分布式地址监视命令550,调试代理156在指定计算机系统节点或所有计算机系统节点处的处理器中设置地址监视功能,这导致当处理器修改调试代理156指定的地址处的存储器内容时,所述处理器产生中断或系统异常。响应于所述程序修改地址监视指定的存储单元的内容,调试代理156在修改存储的指令处停止所述程序。因此,地址监视断点指令是访问存储器页内作为地址监视断点被监视的单元的load或store指令。运行命令555请求继续执行程序列表500显示的已暂停程序,而无论所述程序在哪个计算机系统节点处执行。响应于运行命令,调试代理156重新启动已暂停程序的执行。 所述调试用户界面可以包括其他调试命令,例如步进命令,此命令请求已暂停的程序执行一个指令或任意指定数量的指令。启用调试命令560请求启用调试处理。响应于启用调试命令560,调试代理156在网络资源154内启用插装(instrumentation)代码。所述插装代码响应于执行将分组或对象152发送到计算机系统节点或者从计算机系统节点接收分组或对象152的请求而调用调试代理156。禁用调试命令565请求关闭或暂停调试处理。响应于禁用调试命令565,调试代理156在网络资源154内禁用插装代码,以便所述插装代码不再响应于执行将分组或对象 152发送到计算机系统节点或者从计算机系统节点接收分组或对象152的请求而调用调试代理156。图6示出了根据本发明的一个实施例的在I/O设备121上显示的实例调试用户界面的方块图。在客户端100-5(图2)或100-10(图3)处通过用户I/O设备121显示图6 中示出的实例调试用户界面。图6的实例调试用户界面包括程序列表600、显示状态命令605以及由程序列表 600表示的服务器程序150-1 (图幻的状态610的显示。程序列表600显示在服务器计算机系统节点A 100-1处执行的服务器程序150-1(图幻内的源和/或目标代码语句或指令的列表,服务器计算机系统节点A 100-1是不同于显示程序列表600的客户端计算机系统节点100-5的计算机系统节点。客户端计算机系统节点100-5处的调试代理156-5显示程序列表600以响应程序列表命令582。在图6的实例中,状态610是服务器计算机系统节点A 100-1处的存储单元的内容,所述存储单元被命名为变量“J”,由在服务器计算机系统节点A 100-1处执行的程序 150-1读取或写入。在其他实施例中,状态610可以是由在任何服务器计算机系统节点或网格计算机系统节点处执行的程序读取或写入的任何变量、参数、存储单元、指针、数据结构、 文件、寄存器、数据库字段或记录的内容。在一个实施例中,状态610可以包括遇到断点或修改地址监视所监视的地址处的内容的语句或指令的标识符,以及遇到断点或修改地址监视所监视的地址处的内容的程序的线程的标识符。程序的执行的线程产生于程序分叉为两个或更多个并发运行的任务或线程。在一个实施例中,多个线程共享诸如存储器之类的资源,但在另一个实施例中,线程不共享存储器。在一个实施例中,多个线程可以在不同处理器上同时或并发执行。在另一个实施例中,多个线程通过时分多路复用或多任务在单个处理器上执行,其中所述单个处理器通过上下文切换在不同线程之间切换,所述上下文切换的发生足够频繁以便用户将线程视为同时执行。在其他实施例中,状态610可以是其列表显示在程序列表600中的程序的调用堆栈、执行堆栈、运行时堆栈、函数堆栈或调用堆栈。调用堆栈存储有关正在执行的程序的活动方法、过程或子例程的信息,所述信息包括以下项中的部分或全部子例程的返回地址 (子例程结束之后要返回的指令的位置)、由子例程读取或写入的局部变量的值、传递给子例程的参数、算术或逻辑运算的操作数的求值堆栈、指向子例程的当前实例的指针、封闭的子例程上下文和/或子例程的特权或权限级别。图7示出了根据本发明的一个实施例的实例已保存的调试数据158的方块图。 已保存的调试数据158是已保存的调试数据158-1、158-2、158-3、158-4、158-5、158-6、 158-7、158-8、158-9以及158-10的实例并通常指已保存的调试数据158-1、158-2、158-3、 158-4、158-5、158-6、158-7、158-8、158-9以及158-10。在各实施例中以及在不同时刻, 已保存的调试数据 158-1、158-2、158-3、158-4、158-5、158-6、158-7、158-8、158-9 以及 158-10中的每个都可以包括不同的数据或者它们中的部分或全部可以包括相同或部分相同的数据。实例已保存的调试数据158包括实例行702和704,每个行都包括调试命令字段710、客户端计算机系统调试代理标识符字段712以及处理计算机系统节点标识符字段 714。调试命令字段710存储客户端调试代理通过从用户界面接收的同一行中的客户端计算机系统调试代理标识符字段712标识的调试命令。在一个实施例中,客户端计算机系统调试代理标识符712标识调试代理156以及执行客户端调试代理的客户端计算机系统节点或客户端计算机系统节点的网络地址。处理计算机系统节点标识符字段714存储其中用户通过用户界面请求处理或执行同一行中的调试命令的计算机系统节点的标识符。例如,行702指示调试命令710“当接收分组时设置断点”(接收自客户端计算机系统节点712 “节点E”处的用户界面)请求在接收分组的处理计算机系统节点714 “节点A、节点B和节点C”内的语句处设置断点。作为另一实例,行704指示调试命令710 “针对对象A的所有字段设置分布式地址监视”(接收自客户端计算机系统节点712 “节点E”处的用户界面)请求在所有计算机系统节点处建立地址监视功能。图8示出了根据本发明的一个实施例的启用调试命令的实例处理的流程图。控制在方块800开始。控制然后继续到方块805,其中客户端处的调试代理156从调试用户界面接收启用调试命令560。响应于启用调试命令560,控制然后继续到方块810,其中客户端计算机系统节点处的调试代理156在客户端计算机系统节点和所有服务器计算机系统节点或网格计算机系统节点处的网络资源1 或对象请求代理中启用、开启或添加插装代码。在一个实施例中,调试代理156向所有服务器计算机系统节点或网格计算机系统节点发送指示它们在其各自的网络资源1 或对象请求代理中添加、开启或启用插装代码的请求。服务器计算机系统节点或网格计算机系统节点处的调试代理156接收所述请求,并且作为响应, 在其各自的网络资源1 或对象请求代理中添加、开启或启用插装代码。控制然后继续到方块899,其中图8的逻辑返回。图9示出了根据本发明的一个实施例的禁用调试命令的实例处理的流程图。控制在方块900开始。控制然后继续到方块905,其中客户端计算机系统节点处的调试代理 156从调试用户界面接收禁用调试命令565。响应于该禁用调试命令,控制然后继续到方块 910,其中客户端计算机系统节点处的调试代理156在客户端计算机系统节点和所有服务器计算机系统节点或网格计算机系统节点处的网络资源1 或对象请求代理中禁用、关闭或删除插装代码。在一个实施例中,调试代理156向所有服务器计算机系统节点或网格计算机系统节点发送指示它们在其各自的网络资源1 或对象请求代理中删除、关闭或禁用插装代码的请求。服务器计算机系统节点或网格计算机系统节点处的调试代理156接收所述请求,并且作为响应,在其各自的网络资源巧4或对象请求代理中删除、关闭或禁用插装代码。控制然后继续到方块999,其中图9的逻辑返回。图10示出了根据本发明的一个实施例的断点和分布式地址监视命令的实例处理的流程图。控制在方块1000开始。控制然后继续到方块1005,其中客户端处的调试代理 156从调试用户界面接收调试命令,例如设置断点命令M5、设置分布式地址监视命令550、 运行命令555或者任何其他适当的调试命令。响应于接收到调试命令,控制然后继续到方块1010,其中如果调试命令指定在客户端处执行调试命令或者如果调试命令指定在所有计算机系统节点处执行调试命令,则调试代理156执行调试命令,例如在客户端计算机系统节点处执行的程序内设置断点、针对客户端计算机系统节点处存储的对象设置地址监视、启动在客户端计算机系统节点处执行的程序,或者在客户端计算机系统节点处以一个指令或语句或指定数量的指令或语句步进执行程序。如果调试命令指定不同于客户端计算机系统节点的服务器/网格节点,或者如果调试命令指定所有节点,则客户端计算机系统节点处的调试代理156将所接收的调试命令 (设置断点命令、设置分布式地址监视命令、运行命令或步进命令)、客户端调试代理156的标识符以及处理节点(执行调试命令的一个或多个指定服务器或网格计算机系统节点或所有节点)的标识符保存到客户端计算机系统节点的存储器内的已保存的调试数据158。 控制然后继续到方块1099,其中图10的逻辑返回。图11示出了根据本发明的一个实施例的发送数据分组的实例处理的流程图。控制在方块1100开始。控制然后继续到方块1105,其中客户端计算机系统节点或任何服务器计算机系统节点或网格计算机系统节点处的程序创建数据分组152、创建对象,或者查找先前从另一个计算机系统节点接收的预先存在的分组/对象(如下面参考图12进一步描述的那样,方块 1240)并将分组152或对象发送到网络资源IM或对象请求代理。所述分组指定标识所述分组的目的地计算机节点的目的地计算机节点标识符。由所述目的地节点标识符标识的目的地计算机包括在该目的地计算机处执行并旨在接收和处理所述分组的程序。控制然后继续到方块1110,其中网络资源IM或对象请求代理判定其插装代码是否启用或存在。如果在方块1110的判定为真,则插装代码启用或存在,因此控制继续到方块 1115,其中网络资源巧4或对象请求代理中的插装代码将分组152或对象发送到调试代理 156(与网络资源IM处于同一计算机节点),而不是通过网络将分组152或对象发送到目的地计算机系统节点(由目的地计算机节点标识符标识)。控制然后继续到方块1120,其中调试代理156接收分组152或对象,并且作为响应,判定在调试代理156的计算机系统节点处是否存在任何已保存的调试数据158。如果在方块1120的判定为真,则在调试代理156的计算机系统节点处存在已保存的调试数据158,因此控制继续到方块1125,其中调试代理156针对已保存的调试数据158 中的所有行将客户端调试代理的已保存标识符712、一个或多个处理节点的已保存标识符 714或调试命令的所有节点的指示,以及来自已保存的调试数据158的已保存调试命令710 添加到分组152或对象。在一个实施例中,处理节点标识符与标识所述分组被发送到其的计算机节点的目的地节点标识符相同。在另一个实施例中,处理节点标识符与目的地节点标识符不同。在其中在多个节点之间发送所述分组或对象的实施例中,处理节点标识符和目的地节点标识符可以不同。例如,在图2中,客户端计算机系统节点100-5处的用户可能希望在服务器100-1、 100-2或100-3中的一个或多个处而不在负载平衡器服务器节点100-4处设置断点或地址监视,但来自客户端计算机系统节点100-5的分组仍首先被发送到负载平衡器服务器节点 100-4,负载平衡器服务器节点100-4将分组发送到其他节点。因此,客户端计算机系统节点100-5处的程序150-5在所述分组中设置目的地节点标识符以指示负载平衡器服务器节点100-4,因为负载平衡器服务器节点100-4是客户端计算机系统节点100-5向其发送所述分组的目的地节点,但调试代理156设置处理节点标识符714以指示用户希望在该处设置断点或地址监视的服务器100-1、100-2和/或100-3。作为另一实例,在图3中,客户端网格节点100-10处的用户可能希望在网格节点 100-7处设置断点或地址监视,但网格程序150-10将对象发送到网格节点100-9。网格节点100-9随后将所述对象发送到网格节点100-6,网格节点100-6将所述对象发送到网格节点100-8,网格节点100-8最终将所述对象发送到网格节点100-7。因此,客户端网格节点 100-10处的调试代理156-10设置处理节点标识符714以指示网格节点100-7,但网格程序 150-10在所述对象中设置目的地节点标识符以指示网格节点100-9。客户端调试代理的已保存标识符712标识初始请求已保存调试命令710的客户端计算机系统节点(可以与当前执行图11的逻辑的计算机系统节点不同,但不是必然不同) 处的客户端调试代理。调试代理156针对已保存的调试数据158中的所有记录(所有已保存的调试命令)执行方块1125的处理。控制然后继续到方块1130,其中调试代理156将分组152或对象以及客户端调试代理(多个)156的标识符(多个)、调试命令(多个)和调试命令的处理节点标识符(多个)发送到所述分组/对象的目的地服务器计算机系统节点或目的地网格计算机系统节点。控制然后继续到方块1199,其中图11的逻辑返回。如果在方块1120的判定为假,则计算机系统节点处的已保存的调试数据中不存在已保存调试命令,因此控制继续到方块1130,其中调试代理156将分组152或对象发送到目的地计算机系统节点,而不将已保存的调试命令、已保存的处理节点标识符或已保存的客户端调试代理标识符添加到分组152或对象。控制然后继续到方块1199,其中图11的逻辑返回。如果在方块1110处的判定为假,则网络资源IM或对象请求代理中的插装代码不存在或未启用,因此控制继续到方块1135,其中网络资源IM或对象请求代理将分组152或对象发送到目的地计算机系统节点,而不将所述分组/对象发送到所述调试代理,也不将已保存的调试命令、已保存的处理节点标识符或客户端调试代理的标识符添加到分组152 或对象。控制然后继续到方块1199,其中图11的逻辑返回。图12示出了根据本发明的一个实施例的从网络接收数据分组或对象的实例处理的流程图。控制在方块1200开始。控制然后继续到方块1205,其中接收计算机节点(在任何客户端计算机系统节点或任何服务器/网格计算机系统节点处)处的网络资源巧4或对象请求代理通过网络130从原始计算机系统节点接收分组152或对象。控制然后继续到方块1210,其中网络资源IM或对象请求代理判定所接收的分组 152或对象是否包括调试命令(例如,设置断点命令、设置地址监视命令、运行命令或步进命令)、启动所述调试命令的客户端调试代理156的标识符以及执行所述调试命令的处理节点的标识符。如果在方块1210的判定为真,则所接收的分组152或对象包括调试命令、客户端调试代理156的标识符以及处理节点标识符,因此控制继续到方块1215,其中网络资源巧4 或对象请求代理中的插装代码将所接收的分组152或对象发送到执行插装代码和调试代理的本地计算机系统节点处的调试代理156,而不是将所述分组/对象发送到本地计算机系统节点处的网格/服务器程序。控制然后继续到方块1220,其中调试代理156接收分组/对象152并从分组/对象152移除所述调试命令、客户端调试代理156的标识符以及处理节点标识符。控制然后继续到方块1225,其中调试代理156将已移除的调试命令、已移除的处理节点标识符以及已移除的客户端调试代理的标识符保存到已保存的调试数据158中。控制然后继续到方块1230,其中调试代理156判定接收计算机节点(执行所述网络资源和调试代理的节点)的接收计算机节点标识符是否与分组152或对象中的处理节点标识符匹配(二者相同、后者包括或包含前者,或者前者是后者之一)。如果在方块1230 的判定为真,则接收计算机节点标识符与处理节点标识符匹配,因此控制继续到方块1235, 其中调试代理156执行已移除和已保存的调试命令。例如,调试代理156在本地程序中设置断点、针对接收计算机节点中的存储单元建立地址监视,或导致接收计算机节点处的本地程序开始执行或步进执行指定数量的指令或语句。控制然后继续到方块1M0,其中调试代理156将分组152或对象发送到调试代理156的接收计算机系统节点处的本地程序,而不发送已移除的调试命令、已移除的处理节点标识符以及已移除的客户端代理标识符。本地程序在同一接收计算机节点处执行,并且例如通过读取或写入数据或者执行分组/对象 152所指示的请求或命令来接收和处理分组/对象152。程序的处理可以包括请求将分组 /对象152发送到另一个计算机系统节点,这在前面参考图11进行了描述。控制然后继续到方块1四9,其中图12的逻辑返回。如果在方块1230的判定为假,则接收所述分组/对象的接收计算机节点处的接收计算机节点标识符与所述分组/对象中的调试命令的处理节点标识符不匹配,因此控制继续到方块1240,其中调试代理156将分组/对象152发送到调试代理156的接收计算机系统节点处的本地程序,而不发送已移除的调试命令、已移除的处理节点标识符以及客户端代理标识符,并且调试代理156不执行已移除的调试命令。本地程序在同一计算机节点处执行,并且例如通过读取或写入数据或者执行分组152或对象所指示的请求或命令来接收和处理分组152或对象。程序的处理可以包括请求将分组/对象152发送到另一个计算机系统节点,这在前面参考图11进行了描述。控制然后继续到方块1四9,其中图12的逻辑返回。如果在方块1210的判定为假,则所接收的分组/对象152不包括调试命令、处理节点标识符以及客户端调试代理156的标识符,因此控制继续到方块1M5,其中网络资源 154或对象请求代理将分组/对象152发送到同一计算机节点(接收计算机节点)处的本地程序,而不将分组152或对象发送到调试代理156。本地程序在同一计算机节点处执行, 并且例如通过读取或写入数据或者执行分组152或对象所指示的请求或命令来接收和处理分组152或对象。程序的处理可以包括请求将分组/对象152发送到另一个计算机系统节点,这在前面参考图11进行了描述。控制然后继续到方块1四9,其中图12的逻辑返回。图13示出了根据本发明的一个实施例的处理断点或地址监视中断的实例处理的流程图。控制在方块1300开始。控制然后继续到方块1305,其中任何计算机系统节点处的调试代理156接收中断或系统异常,并且此计算机系统节点处的程序或程序的一个特定线程的执行在一个指令处暂停。所述中断或系统异常表明程序或程序的线程中的指令执行遇到或尝试执行在该处设置了断点的指令,或者地址监视功能所监视的地址处的存储器内容被执行程序或线程的指令所修改。在一个实施例中,程序在处理、执行或响应添加了调试命令(导致设置或初始化断点或地址监视功能)的分组或对象时,遇到断点或修改了地址监视所监视的地址处的内容。在另一个实施例中,程序中的指令在处理、执行或响应未添加调试命令的分组或对象时或者在执行与程序接收的任何分组不相关的处理时,遇到断点或修改了地址监视处理所监视的地址处的内容。在另一个实施例中,程序中的指令在处理、执行或响应添加了不同调试命令(与导致此中断的所遇到的断点或所监视的地址不相关)的分组或对象时,遇到断点或修改了地址监视处理所监视的地址处的内容。控制然后继续到方块1310,其中调试代理156在已保存的调试数据158中查找请求导致中断或系统异常的断点或地址监视的客户端调试代理156的已保存标识符712。控制然后继续到方块1315,其中调试代理156将已暂停的程序的状态、已暂停的程序的标识符和/或已暂停的程序的线程的标识符发送到已保存的客户端调试代理标识符712所标识的客户端调试代理156。控制然后继续到方块1399,其中图13的逻辑返回。图14示出了根据本发明的一个实施例的从网络接收状态的实例处理的流程图。 控制在方块1400开始。控制然后继续到方块1405,其中客户端调试代理156通过网络130接收程序/线程的状态和程序/线程的标识符,所述程序/线程由于遇到断点或修改了另一个计算机系统节点(不同于执行客户端调试代理156的计算机系统节点)上的地址监视所监视的存储单元的内容而暂停执行。控制然后继续到方块1410,其中客户端调试代理156在执行客户端调试代理156 的本地计算机处查找具有与已暂停程序的已接收标识符匹配的标识符的已暂停程序(在一个实施例中,它不在客户端调试代理的本地计算机处执行)的副本,并通过用户I/O设备 121呈现(通过显示设备显示,通过打印机打印或通过扬声器设备播放)程序的已接收状态和程序列表的副本。控制然后继续到方块1499,其中图14的逻辑返回。在此使用的术语仅用于描述特定实施例而并非旨在限制本发明。如在此使用的, 单数形式“一”、“一个”和“所述”旨在同样包括复数形式,除非上下文另外明确指出。还将理解,术语“包括”和/或“包含”在本说明书中使用时,指定存在所声明的特性、整体、步骤、 操作、元素和/或组件,但不排除存在或添加一个或多个其他特性、整体、步骤、操作、元素、组件和/或它们的组合。在本发明的示意性实施例的以上详细说明中,参考了形成本说明一部分的附图 (其中相同编号表示相同元素)并且其中通过示例的方式示出了其中可以实现本发明的特定示意性实施例。这些实施例被充分详细地描述,以便使得本领域的技术人员能够实现本发明,但是可以使用其他实施例并可以做出逻辑、机械、电子以及其他更改而不偏离本发明的范围。在先前的描述中,陈述了许多具体细节以提供对本发明的实施例的彻底理解。但是,可以在没有这些具体细节的情况下实现本发明的实施例。在其他情况下,未详细示出公知的电路、结构和技术以免使本发明的实施例模糊不清。如本说明书内使用的,“实施例” 一词的不同实例不一定指同一实施例,但可以指同一实施例。在此示出或描述的任何数据和数据结构仅为实例,并且在其他实施例中,可以使用不同的数据量、数据类型、字段、字段数量和类型、字段名称、行数和类型、记录、表项或数据组织。此外,任何数据可以与逻辑组合,以便无需单独的数据结构。因此,不应以限制的意义理解先前的详细描述,本发明的范围仅由所附的权利要求限定。
2权利要求
1.一种调试方法,包括在第一调试代理处接收来自第一计算机处的第一程序的分组;将调试命令和所述第一调试代理的标识符添加到所述分组;将包括所述调试命令和所述第一调试代理的所述标识符的分组发送到接收计算机,其中所述调试命令导致在所述接收计算机上执行的第二程序暂停执行;在所述第一计算机处接收暂停的所述第二程序的状态;以及在所述第一计算机处呈现所述第二程序的所述状态。
2.如权利要求1中所述的方法,其中响应于接收所述分组,所述接收计算机处的第二调试代理在所述第二程序中设置断点,并且所述第二程序在所述断点处暂停执行。
3.如权利要求1中所述的方法,其中响应于接收所述分组,所述接收计算机处的第二调试代理针对所述接收计算机中的存储器内的单元启动地址监视,并且所述第二程序暂停执行以响应修改所述存储器内的所述单元处的内容。
4.如权利要求1中所述的方法,其中所述第二调试代理从所述分组移除所述调试命令和所述第一调试代理的所述标识符,并将不包含所述调试命令和所述第一调试代理的所述标识符的所述分组发送到所述第二程序。
5.如权利要求1中所述的方法,还包括将标识所述接收计算机的处理节点标识符添加到所述分组。
6.如权利要求5中所述的方法,其中将包括所述调试命令和所述第一调试代理的所述标识符的分组发送到接收计算机的步骤进一步包括将包括所述调试命令、所述第一调试代理的所述标识符以及标识所述接收计算机的所述处理节点标识符的所述分组发送到目的地计算机,其中所述目的地计算机将所述分组发送到所述接收计算机。
7.如权利要求1中所述的方法,其中呈现的步骤进一步包括呈现所述第二程序的程序列表。
8.一种调试系统,包括用于在第一调试代理处接收来自第一计算机处的第一程序的分组的装置;用于将调试命令、处理节点标识符以及所述第一调试代理的标识符添加到所述分组的装置;用于将包括所述调试命令、所述处理节点标识符以及所述第一调试代理的所述标识符的所述分组发送到目的地计算机的装置,其中所述目的地计算机处的第二调试代理将所述分组发送到接收计算机,其中所述接收计算机处的第三调试代理将所述分组发送到在所述接收计算机处执行的第三程序,其中如果标识所述接收计算机的接收节点标识符与所述分组中的所述处理节点标识符匹配,则所述第三调试代理执行所述调试命令,其中所述调试命令的执行导致所述第三程序暂停执行,其中如果标识所述接收计算机的所述接收节点标识符与所述分组中的所述处理节点标识符不匹配,则所述第三调试代理不执行所述调试命令;用于在所述第一计算机内的所述第一调试代理处接收所述第三程序的状态和暂停的所述第三程序的标识符的装置;以及用于在所述第一计算机处呈现所述第三程序的所述状态和所述第三程序的程序列表的装置。
9.如权利要求8中所述的系统,其中响应于接收所述分组,所述接收计算机处的所述第三调试代理在所述第三程序中设置断点,并且所述第三程序在所述断点处暂停执行。
10.如权利要求8中所述的系统,其中响应于接收所述分组,所述接收计算机处的所述第三调试代理针对所述接收计算机中的存储器内的单元启动地址监视,并且所述第三程序暂停执行以响应修改所述存储器内的所述单元处的内容。
11.如权利要求8中所述的系统,其中所述第三调试代理在将所述分组发送到所述第三程序之前,从所述分组移除所述调试命令、所述第一调试代理的所述标识符以及所述处理节点标识符。
12.如权利要求8中所述的系统,其中所述第三程序不在所述第一计算机处执行。
13.如权利要求8中所述的系统,其中响应于指示所述第三程序被暂停的中断,所述第三调试代理查找请求导致所述中断的所述调试命令的所述第一调试代理的所述标识符,并将所述第三程序的所述状态、所述第三程序的所述标识符以及暂停的所述第三程序的线程的标识符发送到所述第一调试代理。
14.如权利要求8中所述的系统,其中所述目的地计算机处的第二调试代理从所述分组移除所述调试命令、所述处理节点标识符以及所述第一调试代理的所述标识符,并将所述分组发送到在所述目的地计算机处执行的第二程序,其中如果标识所述目的地计算机的目的地节点标识符与所述处理节点标识符匹配,则所述第二调试代理执行所述调试命令, 其中所述第二调试代理将所述调试命令、所述处理节点标识符以及所述第一调试代理的所述标识符添加回所述分组,并将所述分组发送到所述接收计算机以响应来自所述第二程序的将所述分组发送到所述接收计算机的请求。
15.一种分布式调试系统,包括第一计算机,其包括第一调试代理,其中所述第一调试代理接收分组并将调试命令、处理节点标识符以及所述第一调试代理的标识符添加到所述分组;以及接收计算机,其可通信地与所述第一计算机相连,其中第三调试代理接收所述分组并将所述分组发送到在目的地计算机处执行的第三程序,其中如果标识所述接收计算机的接收节点标识符与所述分组中的所述处理节点标识符匹配,则所述第三调试代理执行所述调试命令,其中所述调试命令的执行导致在所述接收计算机上执行的所述第三程序暂停执行,其中如果标识所述接收计算机的所述接收节点标识符与所述分组中的所述处理节点标识符不匹配,则所述第三调试代理不执行所述调试命令,其中所述第三调试代理将所述第三程序的状态和暂停的所述第三程序的标识符发送到所述第一调试代理,其中所述第一调试代理呈现所述第三程序的所述状态和所述第三程序的列表,其中所述第三程序不在所述第一计算机处执行。
16.如权利要求15中所述的分布式调试系统,其中响应于执行所述命令,所述第三调试代理在所述第三程序中设置断点,并且所述第三程序在所述断点处暂停执行。
17.如权利要求15中所述的分布式调试系统,其中响应于执行所述命令,所述第三调试代理针对所述接收计算机中的存储器内的单元启动地址监视,并且所述第三程序暂停执行以响应修改所述存储器内的所述单元处的内容。
18.如权利要求15中所述的分布式调试系统,其中所述第三调试代理在将所述分组发送到所述第三程序之前,从所述分组移除所述调试命令、所述第一调试代理的所述标识符以及所述处理节点标识符。
19.如权利要求15中所述的分布式调试系统,其中响应于指示所述第三程序被暂停的中断,所述第三调试代理查找请求导致所述中断的所述调试命令的所述第一调试代理的所述标识符,并将所述第三程序的所述状态、所述第三程序的所述标识符以及暂停的所述第三程序的线程的标识符发送到所述第一调试代理。
20.如权利要求15中所述的分布式调试系统,还包括目的地计算机,其可通信地与所述第一计算机和所述接收计算机相连,其中所述目的地计算机包括第二调试代理,所述第二调试代理从所述第一计算机接收包括所述调试命令、所述处理节点标识符以及所述第一调试代理的所述标识符的所述分组,并且其中所述第二调试代理从所述分组移除所述调试命令、所述处理节点标识符以及所述第一调试代理的所述标识符,并将所述分组发送到在所述目的地计算机处执行的第二程序,其中如果标识所述目的地计算机的目的地节点标识符与所述处理节点标识符匹配,则所述第二调试代理执行所述调试命令,其中所述第二调试代理将所述调试命令、所述处理节点标识符以及所述第一调试代理的所述标识符添加回所述分组,并将所述分组发送到所述接收计算机以响应来自所述第二程序的将所述分组发送到所述接收计算机的请求。
全文摘要
本发明涉及一种分布式调试方法和系统。在一个实施例中,第一计算机处的第一调试代理接收分组。所述第一调试代理将调试命令和所述第一调试代理的标识符添加到所述分组并将所述分组发送到接收计算机。所述接收计算机处的第二调试代理从所述分组移除所述调试命令和所述第一调试代理的所述标识符,并将所述分组发送到在所述接收计算机处执行的第二程序。所述第二调试代理进一步执行所述调试命令,所述调试命令导致在所述接收计算机上执行的所述第二程序在断点或地址监视存储单元处暂停执行。所述第二调试代理将所述第二程序的状态发送到所述第一调试代理,所述第一调试代理在所述第一计算机处呈现所述状态和所述第二程序的列表。
文档编号G06F11/36GK102279790SQ20111015296
公开日2011年12月14日 申请日期2011年6月9日 优先权日2010年6月11日
发明者J·J·斯特克, R·维希涅夫斯基, S·J·布兰达, W·T·纽波特 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1