CN105493049B - 针对基于云的调试 - Google Patents

针对基于云的调试 Download PDF

Info

Publication number
CN105493049B
CN105493049B CN201480046143.4A CN201480046143A CN105493049B CN 105493049 B CN105493049 B CN 105493049B CN 201480046143 A CN201480046143 A CN 201480046143A CN 105493049 B CN105493049 B CN 105493049B
Authority
CN
China
Prior art keywords
code
computer system
developer
debugging
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
Application number
CN201480046143.4A
Other languages
English (en)
Other versions
CN105493049A (zh
Inventor
J·斯米亚尼克
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Oracle International Corp
Original Assignee
Oracle International Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Oracle International Corp filed Critical Oracle International Corp
Publication of CN105493049A publication Critical patent/CN105493049A/zh
Application granted granted Critical
Publication of CN105493049B publication Critical patent/CN105493049B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3636Software debugging by tracing the execution of the program
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3664Environments for testing or debugging software

Abstract

给出了用于调试代码的各种布置。诸如网络服务器的计算机系统可以将代码编译为已编译代码。代码可以包含一个或多个子部分,包括第一任务流。对第一任务流的选择可以经由网络从远程开发者计算机系统接收。对第一任务流的选择可以指示第一任务流要被调试。已编译代码的第一任务流的执行可以通过计算机系统发生。在计算机系统正在执行已编译代码的第一任务流的同时,第一任务流的调试功能可以被提供给开发者计算机系统。

Description

针对基于云的调试
对相关申请的交叉引用
本申请要求于2014年5月1日提交的、标题为“Targeted Cloud-based Debugging”的共同未决美国申请No.14/267,361和于2013年8月22日提交的、标题为“TaskflowTargeted Debugging in the Cloud”的共同未决美国临时专利申请No.61/868,763的优先权,其中每个申请的全部公开内容都通过引用被结合于此,用于所有目的。
背景技术
通常,当软件开发者在编写代码时,开发者将在调试模式下编译和执行代码。调试模式可以允许开发者查看代码在执行期间是如何工作的。当代码在调试模式下被执行时,开发者通常能够:查看在执行期间的变量值、设置在该处代码的执行将停止直到开发者触发继续执行的断点、和/或在逐行的基础上单步执行代码。
当代码在开发者本地的计算机系统处被编译、调试和/或执行时,这种布置可以很好地工作。在常规的布置中,可能需要在完全地在(允许调试功能的)调试模式下或者在(常规上不允许调试功能的)运行时模式下执行代码之间做出选择。当开发者是使用计算机系统的唯一的人员时,这种选择可以由开发者容易地做出。
此外,当开发者具有希望被调试的代码时,开发者可能只对调试代码的一部分而同时允许代码的其余部分不带调试功能地执行感兴趣。为整个代码片段提供的调试功能会起到分散开发者的注意力和/或浪费其时间的作用。因此,由于这些以及其它原因,可能希望开发者能够指定代码包的用于调试的一个或多个部分,以排除其它部分。
发明内容
在一些实施例中,给出了用于调试代码的方法。该方法可以包括通过计算机系统将代码编译为已编译代码,其中代码的第一部分对应于第一任务流并且代码的第二部分对应于第二任务流。该方法可以包括通过计算机系统经由网络从开发者计算机系统接收对第一任务流的选择,其中该选择指示第一任务流要被调试。该方法可以包括通过计算机系统开始第一任务流的执行。该方法可以包括:在计算机系统正在执行已编译代码的第一任务流的同时,通过计算机系统经由网络向开发者计算机系统提供用于代码的第一部分的调试功能。
这种方法的实施例可以包括以下特征中的一个或多个特征:该方法可以包括:在编译代码之前,通过计算机系统经由网络浏览器接口和网络从开发者计算机系统接收用于编译的代码,其中计算机系统是为多个开发者计算机系统提供编译服务的网络服务计算机系统。该方法可以包括通过计算机系统执行第二任务流。可以不经由网络从开发者计算机系统接收到用于第二任务流的调试的选择。可以不向开发者计算机系统提供与代码的第二部分相关联的调试功能。该方法可以包括通过计算机系统经由网络浏览器向开发者计算机系统提供允许在多个任务流中进行选择的接口,该多个任务流包括第一任务流和第二任务流。该方法可以包括:在第一任务流的执行期间,通过计算机系统从开发者计算机系统接收对第二任务流的选择。该方法可以包括通过计算机系统开始第二任务流的执行。该方法可以包括:在计算机系统正在执行已编译代码的第二任务流的同时,通过计算机系统经由网络向开发者计算机系统提供用于代码的第二部分的调试功能。通过计算机系统执行第一任务流可以通过由计算机系统执行的虚拟机执行,该虚拟机将已编译代码作为运行时线程执行。该方法可以包括:在执行第一任务流的同时,通过由计算机系统执行的虚拟机执行第二运行时线程,其中第二运行时线程不具有提供给任何用户的调试功能。将代码编译为已编译代码可以包括在编译期间修改代码的第一部分和代码的第二部分,以包括附加代码,其中该附加代码提供调试功能。调试功能可以包括选自包括以下的组中的一个或多个特征:在开发者计算机系统处的代码的第一部分内的断点处停止第一任务流的执行、在第一任务流的执行期间将来自代码的第一部分内的变量值输出到开发者计算机系统、以及从开发者计算机系统接收触发代码的第一部分中的各个表达式的处理发生的输入。
在一些实施例中,给出了用于调试代码的系统。该系统可以包括网络服务计算机系统,该网络服务计算机系统包括一个或多个处理器;以及与该一个或多个处理器通信地耦合并且能够被其读取的存储器,并且该存储器具有存储在其中的处理器可读指令。当这些指令被该一个或多个处理器执行时,使得该一个或多个处理器将代码编译为已编译代码,其中代码的第一部分对应于第一任务流并且代码的第二部分对应于第二任务流。指令可以使得该一个或多个处理器经由网络从开发者计算机系统接收对第一任务流的选择,其中该选择指示第一任务流要被调试。指令可以使得该一个或多个处理器开始第一任务流的执行。指令可以使得该一个或多个处理器在网络服务计算机系统正在执行已编译代码的第一任务流的同时经由网络向开发者计算机系统提供用于代码的第一部分的调试功能。
这种系统的实施例可以包括以下特征中的一个或多个特征:指令可以使得该一个或多个处理器在编译代码之前经由网络浏览器接口和网络从开发者计算机系统接收用于编译的代码。指令可以使得该一个或多个处理器执行第二任务流。可以不经由网络从开发者计算机系统接收到用于调试第二任务流的选择。可以不向开发者计算机系统提供与代码的第二部分相关联的调试功能。指令可以使得该一个或多个处理器经由网络浏览器向开发者计算机系统提供允许在多个任务流中进行选择的接口,该多个任务流包括第一任务流和第二任务流。指令可以使得该一个或多个处理器在第一任务流的执行期间从开发者计算机系统接收对第二任务流的选择。指令可以使得该一个或多个处理器开始第二任务流的执行。指令可以使得该一个或多个处理器在计算机系统正在执行已编译代码的第二任务流的同时经由网络向开发者计算机系统提供用于代码的第二部分的调试功能。第一任务流的执行可以通过由计算机系统执行的虚拟机来执行,该虚拟机将已编译代码作为运行时线程执行。指令可以使得该一个或多个处理器在执行第一任务流的同时通过虚拟机执行第二运行时线程,其中第二运行时线程不具有提供给任何用户的调试功能。在被执行时使得该一个或多个处理器将代码编译为已编译代码的处理器可读指令可以包括这样的处理器可读指令:该处理器可读指令在被执行时,使得该一个或多个处理器在编译期间修改代码的第一部分和代码的第二部分,以包括附加代码,其中该附加代码提供调试功能。调试功能包括选自包括以下的组中的一个或多个特征:在开发者计算机系统处的代码的第一部分内的断点处停止第一任务流的执行、在第一任务流的执行期间将来自代码的第一部分内的变量值输出到开发者计算机系统、以及从开发者计算机系统接收触发代码的第一部分中的各个表达式的处理发生的输入。
在一些实施例中,给出了用于调试代码的非临时性处理器可读介质。指令可以被配置为使得该一个或多个处理器将代码编译为已编译代码,其中代码的第一部分对应于第一任务流并且代码的第二部分对应于第二任务流。指令可以被配置为使得该一个或多个处理器经由网络从开发者计算机系统接收对第一任务流的选择,其中该选择指示第一任务流要被调试。指令可以被配置为使得该一个或多个处理器开始第一任务流的执行。指令可以被配置为使得该一个或多个处理器在执行已编译代码的第一任务流的同时经由网络向开发者计算机系统提供用于代码的第一部分的调试功能。在一些实施例中,指令可以被配置为使得该一个或多个处理器在编译代码之前经由网络浏览器接口和网络从开发者计算机系统接收用于编译的代码,其中计算机系统是为多个开发者计算机系统提供编译服务的网络服务计算机系统。
在一些实施例中,给出了用于调试代码的系统。该系统可以包括网络服务计算机系统。网络服务计算机系统还可以包括编译器,该编译器被配置为将代码编译为已编译代码,其中代码的第一部分对应于第一任务流并且代码的第二部分对应于第二任务流;选择单元,被配置为经由网络从开发者计算机系统接收对第一任务流或第二任务流的选择,其中该选择指示第一任务流或第二任务流要被调试;第一执行单元,被配置为当第一任务流被选择时开始第一任务流的执行;以及第一调试功能单元,被配置为在第一执行单元正在执行已编译代码的第一任务流的同时经由网络向开发者计算机系统提供用于代码的第一部分的调试功能。在例子中,网络服务计算机系统还可以包括代码接收单元,该代码接收单元被配置为在编译代码之前经由网络浏览器接口和网络从开发者计算机系统接收用于编译的代码。在例子中,网络服务计算机系统还可以包括第二执行单元,该第二执行单元被配置为执行第二任务流,其中未经由网络从开发者计算机系统接收到用于第二任务流的调试的选择,并且其中与代码的第二部分相关联的调试功能不被提供给开发者计算机系统。在例子中,网络服务计算机系统还可以包括接口提供单元,该接口提供单元被配置为经由网络浏览器向开发者计算机系统提供允许在多个任务流中进行选择的接口,该多个任务流包括第一任务流和第二任务流。在例子中,网络服务计算机系统还可以包括第三执行单元,该第三执行单元被配置为当选择单元在第一任务流的执行期间从开发者计算机系统接收到对第二任务流的选择时,开始第二任务流的执行;以及第二调试功能单元,第二调试功能单元被配置为:在第三执行单元正在执行已编译代码的第二任务流的同时,经由网络向开发者计算机系统提供用于代码的第二部分的调试功能。在例子中,第一执行单元是由计算机系统执行的虚拟机,该虚拟机将已编译代码作为运行时线程执行。在例子中,在执行第一任务流的同时,虚拟机执行第二运行时线程,其中第二运行时线程不具有提供给任何用户的调试功能。在例子中,编译器还可以包括代码修改单元,该代码修改单元被配置为在编译期间修改代码的第一部分和代码的第二部分,以包括附加代码,其中附加代码提供调试功能。在例子中,第一调试功能单元和第二调试功能单元分别包括:停止单元,该停止单元被配置为在开发者计算机系统处的代码的第一部分和第二部分内的断点处停止第一任务流和第二任务流的执行;输出单元,该输出单元被配置为在第一任务流和第二任务流的执行期间将来自代码的第一部分和第二部分内的变量值输出到开发者计算机系统;以及输入单元,该输入单元被配置为从开发者计算机系统接收触发代码的第一部分和第二部分中的各个表达式的处理发生的输入。
在一些实施例中,给出了用于调试代码的装置。该装置可以包括:用于通过计算机系统将代码编译为已编译代码的元件,其中代码的第一部分对应于第一任务流并且代码的第二部分对应于第二任务流;用于通过计算机系统经由网络从开发者计算机系统接收对第一任务流的选择的元件,其中该选择指示第一任务流要被调试;用于通过计算机系统开始第一任务流的执行的元件;以及用于在计算机系统正在执行已编译代码的第一任务流的同时通过计算机系统经由网络向开发者计算机系统提供用于代码的第一部分的调试功能的元件。在例子中,该装置还可以包括:用于在编译代码之前通过计算机系统经由网络浏览器接口和网络从开发者计算机系统接收用于编译的代码的元件,其中该计算机系统是为多个开发者计算机系统提供编译服务的网络服务计算机系统。在例子中,该装置还可以包括:用于通过计算机系统执行第二任务流的元件,其中:未经由网络从开发者计算机系统接收到用于第二任务流的调试的选择,并且不向开发者计算机系统提供与代码的第二部分相关联的调试功能。在例子中,该装置还可以包括:用于通过计算机系统经由网络浏览器向开发者计算机系统提供允许在多个任务流中进行选择的接口的元件,该多个任务流包括第一任务流和第二任务流。在例子中,该装置还可以包括:用于在第一任务流的执行期间通过计算机系统从开发者计算机系统接收对第二任务流的选择的元件;用于通过计算机系统开始第二任务流的执行的元件;以及用于在计算机系统正在执行已编译代码的第二任务流的同时通过计算机系统经由网络向开发者计算机系统提供用于代码的第二部分的调试功能的元件。在例子中,用于通过计算机系统执行第一任务流的元件是由计算机系统执行的虚拟机,该虚拟机将已编译代码作为运行时线程执行。在例子中,该装置还可以包括:用于在执行第一任务流的同时通过由计算机系统执行的虚拟机执行第二运行时线程的元件,其中第二运行时线程不具有提供给任何用户的调试功能。在例子中,用于将代码编译为已编译代码的元件还可以包括:用于在编译期间修改代码的第一部分和代码的第二部分以包括附加代码的元件,其中附加代码提供调试功能。在例子中,用于为代码的第一部分提供调试功能的元件还可以包括:用于在开发者计算机系统处的代码的第一部分内的断点处停止第一任务流的执行的元件、用于在第一任务流的执行期间将来自代码的第一部分内的变量值输出到开发者计算机系统的元件、以及用于从开发者计算机系统接收触发代码的第一部分中的各个表达式的处理发生的输入的元件。
附图说明
对各种实施例的性质和优点的进一步理解可以通过参考以下附图来实现。在附图中,类似的部件或特征可以具有相同的附图标记。此外,相同类型的各种部件可以通过在附图标记后面跟着的连接号以及在相似部件中进行区分的第二标记加以区别。如果在说明书中只使用了第一附图标记,那么该描述适用于具有相同第一附图标记的类似部件中的任何一个部件,而与第二附图标记无关。
图1示出了被配置为同时执行一个或多个运行时线程和一个或多个逻辑洞察(logic insight)线程的系统的实施例。
图2示出了被配置为编译和执行逻辑洞察注入代码从而使得只与被选的任务流相关联的调试功能对开发者可用的系统的实施例。
图3示出了被配置用于针对任务流的调试的系统的实施例的框图。
图4示出了用于针对任务流的调试的方法的实施例。
图5示出了用于针对任务流的调试的方法的另一种实施例。
图6示出了允许使用远程开发者计算机系统的分布式系统的实施例。
图7示出了服务可以通过其来作为云服务被提供的系统环境的实施例的框图。
图8示出了可以用来实现本文详细描述的各种实施例的计算机系统的实施例。
图9示出了根据本文详细描述的原理进行配置的用于调试代码的系统的实施例的功能框图。
具体实施方式
可以使用提供网络服务的计算机系统(例如,网络服务器)来为一个或多个用户同时编译和执行代码,诸如业务逻辑代码。这种布置对用户来说会具有显著的优点——由于正在被用户使用的本地设备不执行代码的编译或执行,因此在本地设备处可以使用和/或需要较少的处理能力。通过网络服务编译和执行的代码可以被称为注入代码。这种注入代码是从远程计算机系统被提供用于编译和/或执行的。编写或编辑代码的开发者可以使用本地计算机系统来查看和编辑代码,但是可以将代码传递到网络服务用于编译和执行。
可能正在经由网络连接从远程计算设备访问网络服务的一些用户可能具有被网络服务计算机系统执行的运行时线程。这种运行时线程可以是正在被不带调试功能地执行的已编译注入代码,诸如已编译业务逻辑代码。因此,正在被网络服务计算机系统执行的运行时线程可以不包含或强制执行断点、可以不停止并等待输入来继续执行代码中的每个表达式、并且可以不输出在注入代码内出现的各种变量的值。网络服务的不同用户可以与不同的运行时线程相关联。正在为不同用户执行的运行时线程可以对应于已编译代码的相同或不同片段(例如,代码的特定已编译片段可以被执行为用于多个用户的多个线程)。因此,经由网络(例如,因特网)访问网络服务的用户可以使网络服务执行运行时线程,而经由网络访问网络服务的另一个用户可以使网络服务执行与第一运行时线程无关的第二运行时线程。
这些运行时线程中的每个运行时线程可以被网络服务计算机系统的同一虚拟机执行。这种虚拟机可以被配置为以特定的模式独占地运行。例如,这个虚拟机可以被配置为以调试模式或者以运行时模式运行。这些模式可以是独占的;正在被虚拟机执行的所有线程可能需要以调试模式被执行或者正在被虚拟机执行的所有线程可能需要以运行时模式被执行。
如果特定用户(例如,业务逻辑开发者)希望调试代码,诸如开发者已编写或修改的业务逻辑代码,那么调试模式可能是开发者所希望的。调试可以允许开发者做以下调试活动中的一种或多种调试活动:在注入代码中设置断点,在该点处业务逻辑的执行暂停直到开发者指示执行要继续;在逐个表达式的基础上单步执行注入代码;以及在已编译注入代码的执行期间查看和/或编辑变量的值。
此外,应该理解,正在被开发者调试的代码可能是复杂的、具有一个或多个子部分。在开发者可能希望调试注入代码的一部分的同时,开发者可能希望注入代码的另一部分不带调试功能地执行。这种布置可以允许开发者将其调试针对注入代码的特定部分,同时允许注入代码的剩余部分在不向开发者提供调试功能的情况下执行。
如果虚拟机在调试模式下运行,以允许一个或多个开发者调试代码,那么对于网络服务器上的其他用户的注入代码的执行可能受到影响并且被迫也在调试模式下运行。因此,可能希望使同一虚拟机执行一个或多个线程,其中一些线程正在被并发调试而一个或多个其它线程以运行时模式(不带调试功能地)运行,以允许访问网络服务器的所有用户都使代码以期望的模式被执行。
为了允许一个或多个开发者调试注入代码而其它线程并发地以运行时模式不带调试功能地被网络服务执行,网络服务的虚拟机可以以运行时模式独占地运行。当希望被调试的注入代码被编译时,编译器可以编辑正在被编译的注入代码以包括调试功能。一旦被编译,从注入代码中创建的字节码就可以被虚拟机作为运行时来执行。因此,从网络服务的虚拟机的角度看,基于已编译注入代码的线程作为运行时被执行;但是,从开发者的角度看,该线程与假如虚拟机是在调试模式下相比具有相同或相似的调试功能。调试功能允许注入代码被调试,因为这种调试功能是在编译处理期间被添加到注入代码中的。
在开发者可能希望调试注入代码的某些部分的同时,开发者可能希望注入代码的其它部分在不向开发者提供调试功能的情况下被执行。为注入代码的不希望被调试的部分启用调试功能会分散、延迟和/或以其它方式负面地影响开发者调试代码中该开发者希望调试的该一个或多个部分的能力。
注入代码可以被各种任务流调用。“任务流”可以定义代码的一个或多个部分或片段,该代码是与公共功能有关的一系列请求和/或代码的部分。任务流定义一组活动,该组活动被按顺序地一起执行,以执行应用中的特定功能任务。活动可以被定义以执行整个应用代码的一些子集,像显示新的页面、输入应用数据或者保存应用数据。在从代码编译的网络应用中,特定任务流的活动可以通过源自用户的浏览器的请求来激活。任务流可以激活注入代码的特定片段或部分。任务流可以激活注入代码并且也可以激活静态代码。静态代码可以指没有被注入和/或不能被开发者编辑的代码。这种静态代码可以由原始应用开发者和/或应用可以激活的其它服务的提供商来提供。任务流可以是预定义的(即不能被开发者编辑)或者可以允许被开发者创建和/或修改。任务流可以包括允许注入代码被调用的一个或多个预定义的“钩(hook)”点。因此,任务流可以包括静态代码中的一个或多个片段的执行,并且可以可选地允许注入代码中的一个或多个片段被执行。
总之,被ERP应用开发者执行的代码会明显地取决于由提供的代码。连同静态代码一起,任务流可以调用允许修改和/或定制静态代码的功能的注入代码的一个或多个片段。这种静态代码可以利用网络服务器进行部署,而不是由开发者来注入。因此,在开发者可以提供要被编译的注入代码的同时,静态代码可能已经被网络服务器存储或以其它方式可访问。静态代码可以作为执行注入代码的同一运行时线程的一部分执行。因此,特定的运行时线程可以执行与静态代码和注入代码相关联的运行时。
任务流可以提供用于在(例如,从注入代码和/或静态代码中构造的)应用中定义控制流的模块化方法。因此,应用可以调用多个不同的任务流来完成各种任务。取代把应用表示为单个大的页面流,应用可以被分解为可重用的任务流的集合。每个任务流可以包含应用的导航图的一部分。作为例子,航班系统可以包括调用编辑航班预订所需的注入代码和静态代码的创建/编辑预订任务流、飞行常客(frequent flyer)任务流可以调用创建和/或使用飞行常客帐户所需的注入代码和静态代码。作为另一个例子,管理帐户任务流可以包含管理帐户持有人的地址、出生日期、密码等的代码。应当理解,不同的任务流可以在不同的上下文中调用注入代码的同一片段。因此,注入代码的片段可以被多个任务流调用。作为例子,在航班系统的例子中,如同用来确定飞机上可用座位的总数量,注入代码的同一片段可以用来确定在飞机上哪些座位可用。
编译希望要被调试的注入代码可以包括在从开发者接收到的代码内出现的表达式被修改和/或附加表达式被添加。这种添加和/或修改可以导致已编译代码:在每个表达式的执行之后暂停(直到开发者提供对于执行下一个表达式的许可);输出表达式已开始处理的指示;输出表达式已完成处理的指示;输出在代码内出现的变量的值的指示;和/或允许变量的值在执行一个或多个表达式之前被设置。对注入代码的这些添加和/或修改中的每个添加和/或修改会使得开发者能够在代码作为运行时被执行时(例如,实时地)调试该代码。
可以允许开发者选择或以其它方式指示用于调试的一个或多个任务流,使得与被选任务流相关联的注入代码可以被调试。通过指示用于调试的任务流实例,开发者指示开发者希望用于注入代码的与所指示的任务流相关联的一个或多个部分的调试功能,但不希望用于注入代码的没有与所指示的任务流实例相关联的一个或多个部分的调试功能。(此外,无论相关联的任务流是否被选择用于调试,对静态代码的调试都可能不可用。)在一些实施例中,开发者可以选择多个用于调试的任务流。通过调试任务流的任务流实例,开发者能够调试任务流,同时任务流的其它实例可以不带调试功能被执行。如果注入代码的片段被多个任务流调用,则用于该注入代码的调试功能只可以在被选用于调试的一个或多个任务流中可用,而不在没有被选用于调试的一个或多个任务流正在被执行时可用。
虚拟机可能正在并发地执行以运行时模式被调试的已编译注入代码的线程(其被任务流调用)和与正作为用于其他用户的运行时被执行的、没有被调试的其它(可能注入的)代码对应的其它线程。对于执行调试的开发者来说,开发者的代码中的表达式的修改和/或添加向开发者提供了调试功能,而无需虚拟机在调试模式下执行。调试功能可以只向开发者提供,用于开发者指示希望针对其的调试的特定任务流。因此,开发者的注入代码将只在其中开发者的注入代码被调用的所指示的任务流的执行期间具有调试功能。至少从开发者的角度看,注入代码的同一片段或注入代码的其它片段在作为没有对其请求调试功能的任务流的一部分被执行时,会看起来像作为不带调试功能的运行时被执行。对于代码的其中不希望调试功能的这些部分,代码的这些部分可以不使允许以下的功能被启动:在每个表达式的执行之后暂停;输出表达式已开始处理的指示;输出表达式已完成处理的指示;输出在注入代码内出现的变量的值的指示;和/或编辑或设置在注入代码内出现的变量的值。在一些实施例中,修改和/或附加的表达式仍然可以被添加到与开发者不希望调试的任务流相关联的代码部分;但是执行注入代码的网络服务计算机系统可以忽略这种调试表达式并且继续执行代码,直到到达注入代码的与开发者确实希望调试的任务流相关联的部分。对于代码的这一部分,调试表达式不可以被忽略,并且可以用来在代码作为逻辑洞察线程被执行的同时向开发者提供调试功能。
下面的系统和方法提供了关于诸如基于云的网络服务计算机系统的多用户系统如何可以在一个或多个开发者正在执行用于调试的线程的同时被用来同时为一个或多个用户以运行时模式执行线程的细节。此外,以下详细说明开发者如何可以在一个或多个任务流内隔离注入代码用于调试,同时允许注入代码的其余部分作为运行时执行。
本文描述的原理可以适用于以各种编程语言编写的各种形式的代码。如本文所详细描述的,例子集中在被称为业务逻辑代码的代码上。业务逻辑代码可以用诸如的编程语言编写,并且可以适用于特定的“业务领域”。例如,表达式可以允许特定于会计或保险的功能被执行。业务逻辑可以被认为是允许比诸如本身的一些常见编程语言更高级的编程语言。应当理解,如本文所详细描述的类似原理可以被应用到其它编程语言和非业务逻辑布置。
贯穿本文档使用了各种术语。为了清楚起见,这些术语被定义为如下:
“注入代码”指从第一计算机系统被提供(“注入”)用于被第二计算机系统编译和/或执行的代码。第一计算机系统可以远离第二计算机系统并且可以经由网络彼此通信。例如,在一些实施例中,使用开发者计算机系统来编写和/或编辑代码,并且代码作为注入代码被注入到执行注入代码的编译和/或执行的网络服务计算机系统。注入代码可以不带调试功能地被编译和执行或者被编译和执行以包括调试功能。
“注入代码运行时”指至少部分地基于由虚拟机以运行时模式执行的注入代码的已编译代码。虚拟机不为注入代码运行时提供调试功能。
“运行时线程”指正在执行注入代码运行时的线程。运行时线程不提供调试功能。注入代码运行时线程由虚拟机在运行时模式下执行。同一注入代码运行时的多个运行时线程可以被网络服务计算机系统同时执行。运行时线程可以基于静态代码附加地执行一个或多个运行时。
“逻辑洞察注入代码运行时”指由虚拟机在运行时模式下执行的并且提供调试功能的已编译代码(其可以基于业务逻辑代码)。逻辑洞察注入代码至少部分地根据从开发者(其可以是或者不是希望调试功能的同一开发者)接收到的注入代码来编译。
“逻辑洞察线程”指正在执行逻辑洞察注入代码运行时的线程。逻辑洞察线程向开发者提供调试功能。逻辑洞察线程由网络服务计算机系统的虚拟机在运行时模式下执行。逻辑洞察线程可以附加地执行基于静态代码的一个或多个运行时。
图1示出了被配置用于同时为多个用户执行运行时线程和逻辑洞察线程的系统100的实施例。系统100还可以被配置为使得开发者能够指定用于调试的一个或多个特定任务流,使得对于代码的与不希望被调试的任务流相关联的其它部分,不向开发者呈现调试功能。系统100可以包括:用户计算机系统110、网络120、开发者计算机系统130和网络服务计算机系统140。网络服务计算机系统140可以包括:虚拟机150、编译器160、运行时线程170和逻辑洞察线程180。
运行时线程170和逻辑洞察线程180两者都可以引用被用来确定哪些已编译的代码片段要被执行的一个或多个任务流。不同的运行时线程170和/或不同的逻辑洞察线程180可以引用不同的任务流。这种任务流可以被网络服务计算机系统140存储、可被网络服务计算机系统140访问和/或以与注入代码类似的方式被开发者提供。
每个用户计算机系统110可以由与被网络服务计算机系统140的虚拟机150正在执行的运行时线程170的运行时线程相关联的用户操作。用户计算机系统110的用户可能希望和已指定运行时线程170要不带调试功能地被编译和/或执行。因此,为用户计算机系统110执行每个运行时线程170可能不包括提供给用户的调试功能,包括:断点、将来自业务逻辑代码内的变量值输出到用户计算机系统110、或需要来自用户计算机系统110以用于处理运行时线程170内的表达式的输入发生。用户计算机系统110可以不附属于彼此。例如,每个用户计算机系统110可以由与正在经由因特网访问网络服务计算机系统140的用户不同的用户操作。可替代地,用户计算机系统110中的一些或全部可以由诸如特定业务组织的特定组织的用户来操作。作为网络服务计算机系统140的运行时线程或者被网络服务计算机系统140执行的运行时线程可以以相同或不同的运行时线程为基础。运行时线程170可以基于注入代码运行时,该注入代码运行时基于经由用户计算机系统110或通过一些其它计算机系统(诸如开发者计算机系统130的开发者计算机系统)被提供给网络服务计算机系统140的(业务)代码(由网络服务计算机系统)进行编译。在图1中,示出了三个用户计算机系统–这只是为了说明的目的。更少的或附加的用户计算机系统110可以与正在被网络服务计算机系统140的虚拟机150执行的运行时线程相关联。虽然网络服务计算机系统140被称为“网络服务”计算机系统,但是应当理解,编译和执行服务可以经包括因特网和专用内联网的各种形式的网络来提供。
用户计算机系统110可以经由基于网络的接口与网络服务计算机系统140交互。例如,基于网络的接口可以通过允许代码被注入到网络服务计算机系统140以用于编译的网络服务计算机系统140提供给用户计算机系统110。可以经由网络浏览器在用户计算机系统110上被呈现的基于网络的接口可以允许用户计算机系统110的用户与基于从注入代码创建的注入代码运行时执行的执行时线程交互。需要明确的是,“基于网络的”接口可以经由浏览器操作并且允许数据跨包括因特网和专用内联网在内的各种形式的网络进行交换。
应当理解,网络服务计算机系统140可以通过第三方来操作。例如,企业实体可以操作网络服务计算机系统140来向一个或多个其它实体(其中用户计算机系统110的用户可以是其成员)提供编译、调试和/或执行服务。可替代地,网络服务计算机系统140可以由为其代理(例如,雇员)提供编译、调试和/或执行服务的实体来操作。
网络120-1可以表示一个或多个公共网络和/或一个或多个专用网络。公共网络可以是因特网,而专用网络可以是诸如企业局域网的内联网。用户计算机系统110中的每个用户计算机系统可以经由网络120-1与网络服务计算机系统140通信。代表用户计算机系统110正在被执行的运行时线程170可以包括在用户计算机系统110和网络服务计算机系统140之间经由网络120-1进行交换的信息。运行时线程170-1代表其正在被网络服务计算机系统140执行的用户计算机系统110-1可以包括经由网络120-1发生的HTTP请求和/或其它形式的信息交换。
网络120-2也可以表示一个或多个公共网络和/或一个或多个专用网络。公共网络可以是因特网而专用网络可以是诸如企业局域网的内联网。网络120-2可以表示与网络120-1相同的(一个或多个)网络或不同的(一个或多个)网络。开发者计算机系统130中的每个开发者计算机系统可以经由网络120-2与网络服务计算机系统140通信。代表开发者计算机系统130-1正在被执行的逻辑洞察线程180-1可以包括在开发者计算机系统130-1和网络服务计算机系统140之间经由网络120-2进行交换的信息。这种信息可以包括经由网络120-2发生的HTTP请求和/或其它形式的信息交换。
开发者计算机系统130中的每个开发者计算机系统可以通过正在编码、编辑、修改、调试和/或以其它方式测试诸如业务逻辑代码的代码的执行的开发者来操作。操作开发者计算机系统130的开发者可能希望正在被开发者编码的业务逻辑中的一些或全部带有调试功能地执行。因此,开发者不希望运行时功能用于业务逻辑代码的整个片段。在图1中,逻辑洞察线程180被示为被虚拟机150执行。虚拟机150是与也为一个或多个用户执行运行时线程的虚拟机相同的虚拟机。逻辑洞察线程180可以基于被编译为包括调试功能的逻辑洞察注入代码运行时的注入代码的一个或多个片段。逻辑洞察线程180的执行可以包括使用:断点、在执行期间来自业务逻辑代码的变量值到开发者计算机系统130的开发者计算机系统的输出、或者需要来自开发者计算机系统130的开发者计算机系统的用于使逻辑洞察线程180-1的业务逻辑代码中的各个表达式的处理发生的输入。开发者计算机系统130可以不附属于彼此。例如,每个开发者计算机系统130可以由正在经由因特网在网络服务计算机系统140上编码、编译和/或调试业务逻辑代码的不同开发者来操作。可替代地,开发者计算机系统130中的一些或全部可以由诸如业务组织的特定组织的开发者来操作。在图1中,示出了三个开发者计算机系统130–这只是为了说明的目的。更少的或附加的用户计算机系统130可以与业务逻辑代码的编写、编辑、修改和/或调试相关联,这种注入代码被网络服务计算机系统140的虚拟机150作为逻辑洞察运行时线程进行编译和执行。
开发者计算机系统130可以经由基于网络的接口与网络服务计算机系统140交互。例如,允许代码被注入到网络服务计算机系统140用于编译的基于网络的接口可以由网络服务计算机系统140提供给开发者计算机系统130。这种基于网络的接口可以允许代码的查看和编辑并且也允许开发者与由网络服务计算机系统提供的调试功能交互。可以经由网络浏览器在开发者计算机系统130上呈现的基于网络的接口可以允许开发者利用开发者计算机系统130中的一个开发者计算机系统与正基于从注入代码(其可能已由开发者经由基于网络的接口被提供)创建的逻辑洞察注入代码运行时执行的逻辑洞察线程交互。
在图1中将开发者计算机系统130和用户计算机系统110示为不同。应该理解,这是为了区分将注入代码编码、编译、编辑和/或调试为逻辑洞察注入代码运行时的开发者和注入代码代表其正作为运行时线程被执行的用户的目的。开发者计算机系统130和用户计算机系统110的硬件可以是相似或相同的。如果开发者指示注入代码要作为运行时线程被编译和执行,则开发者的开发者计算机系统可以被认为是用户计算机系统。类似地,如果用户指示注入代码要被编译和执行以用于作为逻辑洞察注入代码运行时进行调试,则用户的用户计算机系统可以被认为是开发者计算机系统。因此,将计算机系统指定为开发者计算机系统或者用户计算机系统基于注入代码是被开发者作为运行时线程还是作为用于调试的逻辑洞察线程来被编译和执行而变化。
网络服务计算机系统140可以包括一个或多个计算机系统。网络服务计算机系统140可以包括处理经由一个或多个网络处理与用户计算机系统110和开发者计算机系统130的通信的一个或多个网络服务器。这些相同的网络服务器或分开的计算机系统可以执行注入代码和线程的编译和/或执行。可以使用网络服务计算机系统140来编译和/或执行由多个开发者编写的业务逻辑代码。这种业务逻辑代码可以从用户计算机系统110和开发者计算机系统130接收。由网络服务计算机系统140编译和执行的业务逻辑代码可以经由网络120从各种用户和开发者接收。可以使用编译器160来编译从用户计算机系统110和开发者计算机系统130接收到的注入代码。注入代码一旦被编译,就可以利用虚拟机150来执行。在一些实施例中,编译器160可以是虚拟机150的一部分。由网络服务计算机系统140接收到的注入代码可以被编译为注入代码运行时或者逻辑洞察注入代码运行时。如果调试功能不是用户所希望的,则编译产生注入代码运行时。如果调试功能是开发者所希望的,则编译产生逻辑洞察注入代码运行时。注入代码运行时和逻辑洞察注入代码运行时两者都可以被虚拟机150以运行时模式执行。因此,从网络服务计算机系统140的虚拟机150的角度看,所有代码都作为运行时来执行。
虚拟机150可以被网络服务计算机系统140执行。虚拟机150可以用作编程语言解释器。虚拟机150可以允许同一代码被不同的底层硬件(例如,网络服务计算机系统140)执行。可以使用虚拟机150来执行被网络服务计算机系统140执行的运行时线程170和逻辑洞察线程。可以允许虚拟机150在给定时间独占地以调试模式或者以运行时模式工作。因此,可能需要被虚拟机150执行的所有运行时线程和逻辑洞察线程被虚拟机150以相同模式执行,以便允许虚拟机150工作。
与同一注入代码运行时对应的多个线程可以在同一时间被执行。作为例子,运行时线程170-1可以与用户计算机系统110-1相关联;运行时线程170-2可以与用户计算机系统110-2相关联;并且运行时线程170-n可以与用户计算机系统110-n相关联。运行时线程170的每个运行时线程可以作为不带调试功能的运行时线程来执行。因此,运行时线程170可以在无需等待来自用户的输入以继续的情况下执行,和/或来自运行时线程170的代码内的变量的值不被输出以用于被用户计算机系统110的用户查看或编辑。运行时线程170可以基于相同的注入代码运行时或不同的注入代码运行时。因此,多个不同的注入代码运行时可以被虚拟机150同时地作为运行时线程来执行。对于如用户计算机系统110(和相关联的用户)希望不带调试功能地被执行的运行时线程170,虚拟机150可以处于运行时模式而不是处于调试模式。
虽然在图1中示出了三个运行时线程被虚拟机150执行,但是应当理解,更少或更多数量的运行时线程可以同时被网络服务计算机系统140的虚拟机150执行。
逻辑洞察线程180表示被执行的逻辑洞察注入代码运行时,其上开发者正在经由诸如开发者计算机系统130-1的开发者计算机系统执行调试。逻辑洞察线程180可能已被编译器160编译。在编译时,开发者可能已经经由开发者计算机系统130-1提供了注入代码(诸如经由基于网络的接口)并且可能已对编译器160提供了这样的指示:由开发者计算机系统130-1提供给编译器160的注入代码的调试是所希望的。开发者中的一个或多个开发者可能已在希望被调试的业务逻辑代码内指定了一个或多个任务流。因此,对于要被编译的注入代码,基于网络的接口可以向开发者提供选择(和取消(deselect))开发者确实(和不)希望具有调试功能的各种任务流的选项。被选择用于调试的任务流所调用的代码可以是被提供有调试功能的唯一代码。
编译器160可以将由开发者计算机系统130-1提供的注入代码编译为作为逻辑洞察线程180-1来被执行的逻辑洞察注入代码运行时。基于从开发者计算机系统130-1接收到的希望调试的指示,所提供的业务逻辑代码可以被编译为逻辑洞察注入代码运行时,而不是注入代码运行时。已编译的逻辑洞察注入代码运行时可以包含提供调试功能的表达式,但是已编译的逻辑洞察注入代码被虚拟机在运行时模式下执行。因此,逻辑洞察注入代码运行时的调试功能属性可以不需要虚拟机150以在调试模式下被操作。当被编译时,编译器160可以对从开发者计算机系统130-1接收到的注入代码修改和/或添加表达式,以向操作开发者计算机系统130-1的开发者提供调试功能。调试功能可以包括:在逻辑洞察线程180-1的每个由开发者编码的表达式被执行之前,等待来自逻辑洞察虚拟机(LIVM)210的输入、允许在由开发者编码的业务逻辑代码内或者要被逐个表达式地执行的业务逻辑代码内设置断点、以及向开发者计算机系统130提供来自逻辑洞察线程180的表达式的变量值的指示以供显示给开发者。
如果开发者已指示只对激活注入代码的任务流的子集希望调试功能,则编译器160可以修改和/或插入在所有任务流中启用调试功能的表达式。当其中用户不希望调试功能的逻辑洞察注入代码运行时的任务流正在被执行时,网络服务计算机系统140可以简单地不向开发者提供调试功能。这种布置可以允许开发者在逻辑洞察注入代码运行时的执行期间修改他对向哪些任务流提供调试功能的选择。如果开发者已在注入代码内指定要被调试的一个或多个特定的任务流,则调试功能可以被网络服务计算机系统忽略,除非被开发者选择用于调试的任务流之一正在被执行。静态代码无论是否作为被选择用于调试的任务流的一部分被调用,都可能不具有为开发者提供的调试功能。
基于由编译器160在编译期间对业务逻辑注入代码做出的添加和/或修改,被(作为字节码)创建的逻辑洞察注入代码运行时向开发者提供调试功能。但是,对于虚拟机,作为逻辑洞察线程被执行的逻辑洞察注入代码是与在运行时模式下执行的运行时线程170类似的运行时。虽然逻辑洞察注入代码运行时向开发者提供了调试功能,但是逻辑洞察注入代码运行时可以不由虚拟机在调试模式下运行。逻辑洞察线程180和运行时线程170可以被同时执行;虚拟机在运行时模式下为所有这些线程工作。此外,逻辑洞察线程的执行不会与其它运行时线程有任何不同地影响运行时线程170的执行。类似地,运行时线程的执行不会与附加逻辑洞察线程的执行有任何不同地影响逻辑洞察线程的执行。在图1中,示出了三个逻辑洞察线程180——这只是为了说明的目的。更少或附加的逻辑洞察线程可以被虚拟机150执行。
如果开发者计算机系统130-1的开发者不提供经由开发者计算机系统130-1提供的注入业务逻辑代码要被编译用于调试的指示,则业务逻辑代码可以被编译为注入代码运行时,而不是逻辑洞察注入代码。编译器160可以被配置为同时为多个用户/开发者编译注入代码的多个片段。编译器160可以在虚拟机150正在执行一个或多个运行时线程170和一个或多个逻辑洞察线程180的同时,将注入业务逻辑代码编译为注入代码运行时和/或逻辑洞察注入代码运行时。在给定的时间,虚拟机150可能只在执行运行时线程170或逻辑洞察线程180之一。
图2示出了被配置为编译和执行逻辑洞察注入代码以使得逻辑洞察注入代码内只有一些任务流的执行对开发者而言可用于调试的系统200的实施例。系统200可以表示与特定开发者计算机系统130-1交互的网络服务计算机系统140的实施例。因此,至少在一些实施例中,系统200是系统100的一部分。系统200可以包括:开发者计算机系统130-1、网络120-2、网络服务计算机系统140、虚拟机150、编译器160、逻辑洞察线程180-1和逻辑洞察虚拟机210。系统200可以附加地包括由开发者计算机系统130-1呈现的逻辑洞察用户接口220。
当开发者需要调试功能时,逻辑洞察虚拟机(LIVM)210可以与特定开发者的会话相关联。“会话”可以指开发者计算机系统或用户的网络浏览器利用网络服务计算机系统140被打开的实例。可以给每个HTTP会话分配标识符,使得由网络服务计算机系统140从开发者计算机系统130-1接收到的信息可以被应用到在网络服务计算机系统140处的适当的数据。在HTTP会话已被建立之后,可以将会话标识符与开发者计算机系统130-1的每个响应一起发送到网络服务计算机系统140。
因此,开发者计算机系统130-1与网络服务计算机系统140的HTTP会话与逻辑洞察线程180-1和LIVM 210链接。LIVM 210可以用作逻辑洞察线程180-1和开发者计算机系统130-1之间的中介。LIVM 210可以被网络服务计算机系统140、网络服务计算机系统140的虚拟机150、被远程计算机系统、或者被开发者计算机系统130-1执行。可以通过网络服务计算机系统140为各种开发者计算机系统的每个会话执行分开的LIVM 210。当编译器160编译业务逻辑代码以创建逻辑洞察注入代码运行时(其中逻辑洞察线程180-1是被执行的实例)时,附加的表达式可能已被添加和/或表达式可能已在注入代码中被修改,使得在由开发者编码的每个表达式被执行之前需要输入。例如,在与注入代码对应的逻辑洞察线程180-1中的每个表达式之后,在逻辑洞察线程180-1的下一个表达式执行之前,可能需要从LIVM 210接收到输入。基于静态代码的表达式可以在不需要输入的情况下继续。LIVM 210可以用来向逻辑洞察线程180提供这些输入。通过在由开发者编码的每个表达式被执行之前需要输入的逻辑洞察线程180-1,开发者被允许在逐个表达式的基础上单步执行业务逻辑代码、设置断点(和查看断点处的代码/变量的状态)、和/或查看和/或修改注入代码内的变量的值。
由开发者选择的断点可以用来指示LIVM 210允许逻辑洞察线程180的继续执行,直到在被选择用于调试的任务流内到达由开发者设置的断点之一。因此,LIVM 210可以提供逻辑洞察线程180-1输入来允许逻辑洞察线程的每个表达式被执行,直到到达被选择用于调试的任务流的代码内的断点。这时,可能需要来自开发者的对LIVM210的输入,LIVM210又将指令传送到虚拟机150,以使逻辑洞察线程180-1的执行继续。如果开发者希望在逐个表达式的基础上执行业务逻辑代码,则在每个表达式被执行之后在被选择用于调试的任务流内的逻辑洞察线程的下一个表达式被执行之前,LIVM可以等待,直到从开发者接收到输入。被选任务流之外的表达式的执行可以由LIVM导致执行,而无需与开发者的交互。因此,从LIVM 210的角度看,在逻辑洞察线程180-1的每个已执行的表达式之后可能需要向虚拟机150提供输入以使执行继续。这个输入是由LIVM 210自动提供给虚拟机150还是响应于经由开发者计算机系统130-1接收到的开发者输入可以基于是否已到达断点或者开发者是否请求了逻辑洞察线程的执行在逐个表达式的基础上单步进行。
LIVM 210可以包含任务流分析器212。任务流分析器212可以评估当前正在逻辑洞察线程180-1中被执行的表达式(来自注入代码)是否确实或者不对应于由开发者选择用于调试的任务流。如果表达式是被选任务流的一部分,则调试功能经由逻辑洞察用户接口220被提供给开发者。如果当前正在逻辑洞察线程180-1中被执行的表达式不与被选任务流对应,则任务流分析器212可以使得LIVM 210导致表达式的执行继续,而无需经由逻辑洞察用户接口220向开发者提供调试功能。因此,在其中编译器160已编译逻辑洞察注入代码以在运行时模式下被执行的同时具有调试功能的一些实施例中,LIVM 210只当由用户指示或以其它方式选择用于调试的任务流的表达式处于活动时,才向逻辑洞察用户接口220提供这种调试功能。
在逻辑洞察线程180-1的执行期间,开发者能够选择和取消用于调试的逻辑洞察注入代码的一个或多个任务流,从而更改哪些表达式产生被提供给开发者的调试功能。如果编译器160在正在被编译的注入代码中添加和/或修改在注入代码的所有任务流中都允许调试功能的表达式,那么这种布置是可能的。当非选择的任务流正在被执行时,LIVM 210可以自动地(无需开发者输入)向虚拟机150提供输入,从而指示逻辑洞察线程180-1的执行应该继续。
LIVM 210也可以用来从逻辑洞察线程180接收变量值的变化。当被选择用于调试的任务流正在被虚拟机150执行时,可以使用这些变化来向开发者计算机系统130-1提供变量值(例如,用于呈现给开发者)。逻辑洞察注入代码运行时可能已被编译器160编译,使得每次变量被创建或修改时,变量的值和变量的指示被输出到LIVM 210。这种变量的值和变量的指示可以被LIVM 210接收,并且当如由任务流分析器212确定的、已被用户选择用于调试的任务流正在使其表达式中的一个或多个表达式被执行时,这种变量的值和变量的指示可以用来经由逻辑洞察用户接口220向开发者呈现变量的指示和变量值。开发者可以被允许经由逻辑洞察用户接口220修改变量值中的一个或多个变量值。如果未选择的任务流是活动的,则变量值可以不被LIVM 210输出到逻辑洞察用户接口220(但是,LIVM 210仍然可以从虚拟机150接收它们,但是可以存储、忽略或丢弃所接收到的值)。如果表达式是正在被执行的被选择用于调试的任务流的一部分(但不是当未选择的任务流的表达式正在被虚拟机150执行时),LIVM 210可以向开发者指示当前正在被执行(或者将要被执行)的逻辑洞察线程的注入代码中的当前表达式。
从LIVM 210的角度看,由逻辑洞察线程180-1执行的所有任务流都可以被配置为在代码行执行之后中断并且输出变量值。但是,LIVM 210的任务流分析器212可以基于经由逻辑洞察用户接口220的任务流选择模块225接收到的一个或多个被选任务流的指示确定何时要由LIVM 210导致执行被继续以及何时调试功能要经由逻辑洞察用户接口220被呈现。
可以使用逻辑洞察用户接口(LIUI)220经由开发者计算机系统130-1从开发者接收注入代码。LIUI 220可以允许选择将与代码相关联的适当的任务流。LIUI 220可以是基于网络的接口并且可以经由网络浏览器来实现。例如,LIUI 220可以被呈现为网页的一部分,通过该网页,用户被允许直接输入代码(例如,作为文本)和/或选择包含业务逻辑代码的文件以用于上传(注入)到网络服务计算机系统140以供编译以及可能地供执行。LIUI220可以允许开发者指示希望业务逻辑代码被编译和执行用于调试(作为逻辑洞察注入代码运行时)。LIUI 220可以允许用户在逻辑洞察线程180正在被执行的同时至少在注入代码上执行调试功能。因此,由于这种调试发生在逻辑洞察线程180正在执行时,因此这被称为实时调试。这种LIUI220可能被用来执行的调试功能包括:设置断点(和查看在这些断点处的变量的状态)、在逐个表达式的基础上单步执行业务逻辑代码、和/或查看(和/或编辑)变量的值。经由与网络服务计算机系统140的会话,可以使用逻辑洞察用户接口220来发送来自开发者的输入,以经由LIVM 210控制逻辑洞察线程180的执行和接收关于逻辑洞察线程180的执行的信息,以被输出到LIUI 220用于呈现给开发者。
LIUI 220可以包括任务流选择模块225。LIUI 220可以从LIVM210接收由正在被执行的应用定义的各种任务流的指示。任务流选择模块225可以允许开发者选择开发者希望调试的一个或多个任务流。任务流选择模块225可以允许开发者指示开发者不希望调试的一个或多个任务流(诸如通过不选择任务流)。被开发者选择用于调试的任务流的指示可以被提供给LIVM 210,使得只给开发者提供用于作为由开发者选择的任务流的一部分的表达式的调试功能(例如,变量值、执行中的中断)。LIVM 210可以使执行继续,而无需用于其它任务流的调试功能。在逻辑洞察线程180-1的执行期间,开发者可以经由任务流选择模块225调整哪些任务流被选择。这种对任务流的选择的修改可以被传达给LIVM 210,LIVM 210将进而修改用于哪些任务流的调试功能要经由LIUI 220呈现给开发者。例如,开发者可以启用特定任务流的调试,然后在将来的时间在任务流正在运行的同时停用这种调试。这种选择和取消影响用于哪些任务流的调试功能要被LIVM 210输出到逻辑洞察用户接口220。在一些实施例中,使用任务流选择模块225来在逻辑洞察线程180-1的执行之前选择一个或多个任务流。在一些实施例中,也可以在逻辑洞察线程180-1的执行期间做出对任务流的选择。
图3示出了被配置用于针对任务流的调试的系统300的实施例的框图。系统300表示可以被用来创建逻辑洞察注入代码运行时的各种硬件、固件和/或软件模块。所示出模块中的每个模块,除非另外指出,否则可以分别是图1和图2的系统100和200的网络服务计算机系统140的一部分(或被其执行)。因此,在至少一些实施例中,系统300可以是系统100和/或系统200的一部分。系统300包括各种模块,其中每个模块可以利用软件、固件和/或硬件来实现。部件包括:代码源模块310、预编译模块315、解析器模块320、转换引擎340、编译器160、虚拟机150和LIVM 210。应当理解,这样的部件可以被划分为更多数量的部件和/或被组合为更少数量的部件。
代码源模块310可以用来接收注入(业务逻辑)代码。这种代码可以以编程语言的语法编写,当该语法被编译时,可以在语法树级别被编辑。例如,可以使用作为用于业务逻辑代码的编程语言。在一些实施例中,代码源模块310可以被配置为从远程计算机系统接收代码,诸如经由基于网络的接口(例如,如在图2中呈现的LIUI220)从用户计算机系统或开发者计算机系统提交的代码。这种接收到的代码可以被称为“注入”代码,因为它是从远程计算机系统接收以用于编译和/或执行的。代码源模块310可以用来访问包含要被编译的代码的文件。注入代码可以被系统编译和执行,该系统同时编译和执行其它注入代码。
预编译模块315可以完成由代码源模块310接收的业务逻辑代码的编译过程的一部分。在一些实施例中,预编译模块315可以在由代码源模块310接收的业务逻辑代码中插入一个或多个表达式。解析器模块320可以解析包含表达式的业务逻辑代码,以创建语法树。所创建的语法树可以是抽象的语法树。在这个时候,在一些编程语言中,能够在字节码被编译为逻辑洞察注入代码运行时之前修改语法树。
转换引擎340可以修改由解析器模块320创建的语法树。转换引擎340可以在语法树中添加或修改表达式中的一些或全部表达式。每当变量值被初始设置或修改时,语法树可以被修改,使得变量和变量值的指示被输出到LIVM 210。相应地,在执行期间,LIVM 210可以维护在注入业务逻辑代码中出现的每个变量的当前值。经由推送或提取,开发者的LIUI可以从LIVM 210接收被设置或修改的变量以及相关联的值的指示。可以添加表达式,使得在业务逻辑代码中出现的每个表达式被执行之后,执行被停止(例如,置于挂起或循环模式),直到从LIVM 210接收到指示执行要继续到至少下一个表达式的指令。被执行的或将要被执行的表达式的指示可以被提供给LIVM210。LIVM 210进而可以向开发者的LIUI提供哪个表达式刚才已被执行或将要被执行的指示(从而允许用户监视注入代码的执行的流程)。
在一些实施例中,转换引擎340修改所有的注入代码以允许调试,而不管哪些任务流被选择。在其它实施例中,只有与要被调试的任务流相关联的注入代码的部分被转换引擎340修改。在这种实施例中,可能需要开发者在编译之前指定希望哪一个或多个任务流要被调试。在其中所有任务流被转换引擎340修改的实施例中,开发者可以在执行期间更改用于哪些任务流的调试功能要经由LIUI 220提供给开发者。
编译器160可以将经修改的语法树编译为字节码。这种字节码被称为逻辑洞察注入代码运行时,其将作为逻辑洞察线程被执行。如被预编译模块315和转换引擎340所修改的,由代码源模块310接收的注入代码可以被编译器160编译。这种逻辑洞察注入代码运行时被配置为由虚拟机在运行时模式下执行。
与LIVM 210通信的虚拟机150可以将由编译器160编译的字节码作为逻辑洞察注入代码运行时执行。对于被转换引擎340修改的每个表达式,可以联系LIVM来确定执行是否应该继续。因此,LIVM210监视哪些任务流将要具有调试功能以及在哪些表达式处执行应该被停止直到接收到开发者输入(例如,在开发者设置的断点处和/或如果开发者已请求在逐个表达式的基础上执行)。LIVM 210也可以接收变量的值(诸如每次这种变量值可能被虚拟机150设置或修改时)。LIVM 210也可以接收被执行的或将要被执行的业务逻辑代码的当前表达式的指示。这种信息可以被LIVM 210接收到。在字节码被允许继续之前,LIVM 210可以请求来自开发者计算机系统的输入和/或信息(诸如变量值)可以通过LIVM 210经由LIUI被输出给开发者。
如果逻辑洞察注入代码运行时被编译为使得调试功能存在于逻辑洞察注入代码的所有任务流中,则任务流分析器212可以监视以确定逻辑洞察线程的哪个任务流的表达式正在被执行,以确定是否应该使调试功能对开发者可用。如果正在被虚拟机150执行的表达式不与开发者指示为希望要被调试的任务流链接,则任务流分析器212可以使LIVM 210向虚拟机150指示执行应该继续。对于这个表达式没有调试信息可以被提供给开发者。例如,LIVM 210可以指导虚拟机150自动继续执行和/或变量值可以不被输出到开发者计算机系统。但是,当任务流分析器212检测到开发者指示要被调试的任务流的表达式正在被执行时,LIVM 210可以强制执行调试功能,使得调试功能被提供给LIUI 220。这可以包括强制执行断点、输出变量值到开发者计算机系统、以及提供哪个表达式正在被执行的指示。在逻辑洞察线程内,可以识别各种任务流。任务流可以通过被开发者插入到代码中以将代码分组为逻辑代码分组的标签或其它标识符来识别,该逻辑代码分组诸如与特定任务的执行相关的逻辑代码分组。
可以使用图1至图3的系统100至300来执行各种方法。图4示出了用于特定于任务流的调试的方法400的实施例。方法400可以分别由图1-3的系统100、系统200和/或系统300来执行。方法400也可以通过用于执行运行时线程和编译并执行逻辑洞察注入代码的一些其它形式的系统来执行。可以使用诸如网络服务器的一个或多个计算机系统来执行方法400。用于执行方法400的元件包括一个或多个计算机系统和网络。方法400的每个步骤可以利用计算机系统来执行,其中计算机系统可以包括彼此通信的一个或多个单独的计算机,诸如一个或多个网络服务器。参考图2和图3,方法400的每个步骤可以通过网络服务计算机系统140来执行。
在步骤410,注入代码可以被计算机系统接收,用于编译为逻辑洞察注入代码运行时和作为逻辑洞察线程执行。这种代码可以通过经由开发者计算机系统和网络连接被提供给开发者的网络浏览器接口来注入,诸如关于图1和图2所示出的。当步骤410在进行中并且方法400的其余部分正在被执行时,计算机系统可以执行各种运行时线程,诸如注入代码运行时。
计算机系统可以在方法400期间为一个或多个用户执行运行时线程。参考图1,网络服务计算机系统140可以为经由网络120-1远程访问网络服务计算机系统140的用户执行运行时线程,其中网络120-1可以是因特网。运行时线程可以基于被提供给网络服务计算机系统用于编译和/或执行的其它注入代码。正在被执行的任何运行时线程可以被网络服务计算机系统的虚拟机执行。每个运行时线程可以与特定用户和网络服务计算机系统的HTTP会话相关联。这些运行时线程中的每个运行时线程可以不带调试功能地被执行。正在执行运行时线程的网络服务计算机系统的虚拟机可能正在运行时模式下执行这些线程。
在步骤420,开发者可以向开发者计算机系统提供注入代码要带调试功能地被执行的指示。从开发者的角度看,这可以被认为是调试模式,尽管逻辑洞察注入代码运行时将被虚拟机在运行时模式下执行。在步骤420,这种指示可以被执行方法400的网络服务计算机系统接收。在步骤430,开发者可以提供要被调试的一个或多个任务流的指示。之前,开发者可能已选择并且将注入代码与适当的任务流相关联。在其中任务流被预定义并且不可被开发者编辑的情况下,这种任务流可以具有允许注入代码被调用的一个或多个预定义的钩点。这种输入可以由从要被执行的任务流列表中进行选择的用户来提供。可替代地,开发者可以提供希望被调试的一个或多个任务流的名称。附加地或可替代地,用于调试的一个或多个任务流可以在步骤435的编译之后被选择(或取消)。通过指示用于调试的一个或多个任务流,在注入代码内出现的其它任务流的执行可以不导致调试功能被呈现给开发者。基于网络浏览器的接口可以经由网络连接和开发者计算机系统向开发者提供对被确定为在应用内出现的各种任务流的选择。虽然开发者可以选择一个或多个任务流,但是对于本实施例的其余部分,假定开发者指定用于调试的单个任务流。在步骤430,网络服务计算机系统可以接收由开发者选择的任务流的指示。
在步骤435,被注入的注入业务逻辑代码可以被编译为逻辑洞察注入代码运行时。编译可以由诸如图2的编译器160的编译器来执行。因为调试功能是所希望的,因此编译过程可以从正常的编译来更改。因此,调试功能可以在语法树级别被添加到业务逻辑代码,如关于图3所详细描述的,并且可以被编译为逻辑洞察注入代码运行时。在步骤435的注入代码的编译可以与一个或多个运行时线程正在被网络服务计算机系统的虚拟机编译和/或执行的同时发生。逻辑洞察注入代码运行时可以具有调试功能,但是可以不需要虚拟机为了实现这种功能而在调试模式下执行。调试功能可以包括以下中的一个或多个:开发者在业务逻辑代码内选择一个或多个断点的能力,在该一个或多个断点处逻辑洞察注入代码运行时的执行将被停止;在逐个表达式的基础上(实时地)单步执行由开发者提供的注入业务逻辑代码的能力;在执行期间(实时地)查看(和/或修改)在业务逻辑代码的表达式中出现的变量值的能力;当表达式开始执行时接收指示的能力;和/或当表达式完成执行时接收指示的能力。其它调试功能也是可能的。在一些实施例中,逻辑洞察注入代码运行时被编译为使得调试功能被插入在已编译代码的所有任务流中。在其它实施例中,逻辑洞察注入代码运行时被编译为使得调试功能只在由开发者特别选择的任务流中可用。
在步骤440,逻辑洞察注入代码运行时可以被网络服务器的虚拟机作为逻辑洞察线程执行。因此,执行发生在远离其中注入代码可能已经被接收的开发者计算机系统。逻辑洞察线程的执行可以与一个或多个运行时线程的执行并发发生。虚拟机可以在虚拟机的运行模式下执行逻辑洞察线程(以及正在被执行的任何其它运行时线程)。因此,虚拟机将所有线程作为运行时执行并且没有线程处于调试模式。但是,逻辑洞察线程具有调试功能,因为逻辑洞察线程的代码在编译期间被修改。虽然逻辑洞察线程对于虚拟机而言表现为运行时,但是在编译期间的修改向开发者提供了通常与正在调试模式下被操作的虚拟机相关联的功能。在逻辑洞察注入代码运行时中存在的调试功能可以包括:开发者在业务逻辑代码内设置一个或多个断点(并且当在执行期间到达断点时查看代码和变量值)的能力;在执行期间在逐个表达式的基础上(在实时执行中)单步执行由开发者提供的注入代码的能力;在执行期间(在实时执行中)查看(和/或修改)在业务逻辑代码的表达式中出现的变量值的能力;当表达式开始执行时接收指示的能力;和/或当表达式完成执行时接收指示的能力。
逻辑洞察线程的执行不会影响碰巧正在被执行的任何运行时线程的执行(除了它消耗存储器、处理和网络资源方面之外)。更具体而言,诸如允许开发者设置断点或允许与逻辑洞察线程相关联的业务逻辑注入代码在逐个表达式的基础上被执行的调试功能不需要这种调试功能在运行时线程中出现。类似地,运行时线程的执行不影响逻辑洞察线程的执行(除了它消耗存储器、处理和网络资源方面之外)。虽然方法400只考虑了单个逻辑洞察注入代码运行时被在运行时模式下操作的虚拟机来作为线程编译和执行,但是多个逻辑洞察注入代码可以被同一网络服务计算机系统的同一虚拟机来作为线程编译和/或执行。
在步骤450,当正在执行代码时,可以(通过逻辑洞察虚拟机)检查由虚拟机执行的每个表达式,以确定它是否与在步骤430由开发者指示为希望用于调试的任务流相关联。如果是,则对于那个表达式,步骤460被执行。在步骤460,使调试功能对开发者计算机系统可用。这可以包括等待允许下一个表达式被执行的输入、向开发者计算机系统输出变量值、强制执行与由开发者之前设置的表达式相关联的任何断点(其可以被逻辑洞察虚拟机存储)、提供正在被(或将要被)执行的表达式的指示、和/或接收要被用作变量值的输入。
在步骤450,如果确定表达式与不希望被调试的任务流相关联,则步骤470被执行。在步骤470,使得没有调试功能对开发者计算机系统可用。这可以包括:不等待允许代码的下一行被执行的输入(继续执行而无需等待开发者输入)、不向开发者计算机系统输出变量值、不强制执行断点、不提供正在被(或将要被)执行的表达式的指示、和/或不接收或处理要被用作变量值的输入。步骤470可以包括逻辑洞察虚拟机自动地向执行逻辑洞察线程的虚拟机提供指示执行要继续的输入。随着执行继续,对于每个表达式,可以评估步骤450来确定表达式是否是由开发者指示为希望被调试的任务流的一部分。
在这种执行期间,开发者可以被允许修正哪一个或多个任务流要被调试。对被选择用于调试的任务流的这种修改可以更改在步骤450做出的确定。例如,在特定的任务流正在被执行的同时,开发者可以切换用于那个任务流的调试功能是被启用还是被停用。这种切换可能更改步骤450对于下一个被评估的表达式的结果。开发者可以被允许按照需要多次执行这种切换,以服务开发者的调试目标。
在将逻辑洞察注入代码运行时作为由开发者指示要被调试的任务流中的逻辑洞察线程的执行期间,线程的执行可以暂停或进入循环模式,直到LIVM向虚拟机指示执行被允许继续。LIVM可以对每个表达式允许执行继续,除非到达其中开发者已针对那个表达式指定了断点的点。如果断点出现,则执行可以被挂起,直到开发者经由LIUI向LIVM提供允许继续执行的输入。在断点处,变量值以及哪个表达式要被执行的指示可以经由LIVM被输出到LIUI。在一些实施例中,在被选任务流中的每个表达式之后执行可以停止,直到开发者经由LIUI向LIVM指示执行要继续。
图5示出了用于针对任务流的调试的方法的另一种实施例。方法500可以分别由图1和2的系统100和/或系统200来执行。方法500也可以由允许开发者与正在编译和执行注入代码的远程网络服务计算机系统交互的一些其它形式的系统来执行。可以使用诸如开发者计算机的一个或多个计算机系统来执行方法500。用于执行方法500的元件包括一个或多个计算机系统和网络。方法500的每个步骤可以利用计算机系统来执行,其中计算机系统可以包括彼此通信的一个或多个单独的计算机。参考图1和图2,方法500的每个步骤可以由开发者计算机系统130的开发者计算机系统来执行。方法500的步骤可以由开发者计算机系统来执行,而方法400由网络服务计算机系统来执行。
在步骤510,基于网络的接口可以通过开发者计算机系统呈现给开发者。基于网络的接口可以从可能正在执行方法400的网络服务计算机系统接收。基于网络的接口允许开发者提供要被注入到网络服务计算机系统用于编译和执行的代码。代码可以被直接键入到基于网络的接口的代码编辑器中或者预先编写代码的一个或多个文件可以被选择用于经由基于网络的接口上传到网络服务计算机系统。在步骤520,代码可以经由基于网络的接口和一个或多个网络被传送到网络服务计算机系统。被传送到网络服务计算机系统的代码可以对应于方法400的步骤410。
在步骤530,基于网络的接口可以向开发者呈现对任务流的选择,在该任务流期间在步骤520传送的代码要被执行。基于网络的接口也可以具有供开发者选择由开发者提供的注入代码是否要被编译用于调试的选项。在步骤530,经由基于网络的接口,开发者可以指定注入代码要被调试并且开发者可以指定其中注入代码被执行的一个或多个任务流要被调试。(对于这个例子的目的,假定单个、第一任务流被指示了用于调试并且第二任务流未被选择用于调试)。在一些实施例中,用户可以在稍后的时间里在方法500中选择哪些任务流要被调试。附加地,在步骤530,可以向开发者呈现注入代码并且可以允许开发者指定一个或多个断点和/或指示要被调试的任务流的执行是否应该被执行直到断点或错误发生或者应该在逐个表达式的基础上被执行。在步骤540,注入代码要被调试和要被调试的任务流的指示被传送到网络服务计算机系统。在步骤540之后,方法400的各个步骤(诸如步骤420至470)可以被网络服务计算机系统执行。因此,网络服务计算机系统可以创建逻辑洞察注入代码运行时并且可以将逻辑洞察注入代码运行时作为逻辑洞察线程执行(逻辑洞察线程由网络服务计算机系统的虚拟机在运行时模式下执行)。
在步骤550,可以由开发者计算机系统呈现用于由开发者选择用于调试的任务流的调试功能。调试功能可以只提供给与已编译的注入代码对应的任务流的部分。调试功能可以只在被选择用于调试的任务流开始执行时(或到达被选任务流内的断点时)才呈现。对于没有被选择的其它任务流,至少从开发者的角度看,逻辑洞察线程可以作为运行时线程执行。调试功能可以通过在网络浏览器中作为基于网络的接口的一部分的LIUI来呈现。调试功能可以包括向开发者呈现变量和相关联的变量值的指示(以及可能地,修改这些变量值的机会)以及在正在被执行的(或将要被执行的或之前刚被执行的)注入代码内的表达式的指示。调试功能还可以包括用于单个表达式的执行继续的选项(以允许单步执行逻辑洞察线程)。可以呈现另一个选项来允许执行继续,直到断点或错误发生。在执行期间,网络服务计算机系统可能正在执行步骤450至470——执行注入代码运行时和为被选任务流提供调试功能。在其它任务流期间,LIVM可能在指导虚拟机自动继续执行(无需开发者输入)。
在逻辑洞察线程的执行期间,开发者可以修改对被选择要被调试的任务流的选择。附加地,可以经由被呈现给开发者的网络接口选择较少的或不同的任务流用于调试。在要被调试的任务流中的这种修改可以被递送给网络服务计算机系统。参考图2,任务流分析器212在接收要被执行的更新的任务流之后(在执行期间)可以使得LIVM向开发者提供用于现在被选择的任务流的调试功能。在步骤570,经由开发者计算机系统和基于网络的接口向开发者提供用于修改的被选的一个或多个任务流的调试功能。当逻辑洞察线程被网络服务计算机系统执行时,开发者可以继续修改哪些任务流要被调试。
应当理解,在方法500正在被执行的同时,网络服务计算机系统的虚拟机在同一时间可以为一个或多个其它开发者和/或用户执行一个或多个其它逻辑洞察线程(基于相同或不同的逻辑洞察注入代码运行时)和一个或多个注入代码运行时。因此,在网络服务计算机系统的虚拟机在运行时模式下工作的同一时间,网络服务计算机系统可能正在为多个开发者/用户提供编译、执行(带有或不带有调试功能)。
图6-8提供了关于允许用户和开发者远程地与网络服务计算机系统交互的分布式系统可以如何被实现的附加细节。图6示出了允许使用远程开发者计算机系统的分布式系统600的实施例。在图示的实施例中,分布式系统600包括一个或多个客户端计算设备602、604、606和608(其可以表示用户和/或开发者计算机系统),其被配置为经一个或多个网络610执行和操作客户端应用,诸如网络浏览器、私有客户端(例如,Forms)等。服务器612(其可以是该网络服务计算机系统)可以经由网络610与远程客户端计算设备602、604、606和608通信地耦合。
在各种实施例中,服务器612可以适于运行由系统的部件中的一个或多个部件提供的一个或多个服务或软件应用。在一些实施例中,这些服务可以作为基于网络或云的服务或者根据软件即服务(Software as a Service,SaaS)模型被提供给客户端计算设备602、604、606和/或608的用户。操作客户端计算设备602、604、606和/或608的用户进而可以利用一个或多个客户端应用与服务器612交互,以利用由这些部件提供的服务。
在该图绘出的配置中,系统600的软件部件618、620和622被示为在服务器612上被实现。在其它实施例中,系统600的部件中的一个或多个部件和/或由这些部件提供的服务也可以由客户端计算设备602、604、606和/或608中的一个或多个来实现。操作客户端计算设备的用户/开发者然后可以利用一个或多个客户端应用来使用由这些部件提供的服务。这些部件可以用硬件、固件、软件或其组合来实现。应当认识到,各种不同的系统配置是可能的,这些配置可以与分布式系统600不同。因此,在该图中示出的实施例是用于实现实施例系统的分布式系统的一个例子,而并非旨在进行限制。
客户端计算设备602、604、606和/或608可以是运行诸如Microsoft Windows和/或诸如iOS、Windows Phone、Android、BlackBerry 10、Palm OS等各种移动操作系统的软件并且启用因特网、电子邮件、短消息服务(SMS)、或其它通信协议的便携式手持设备(例如,蜂窝电话、计算平板电脑、个人数字助理(PDA))或可穿戴设备(例如,Google头戴式显示器)。客户端计算设备可以是通用个人计算机,作为例子,该通用个人计算机包括运行各种版本的MicrosoftApple和/或Linux操作系统的个人计算机和/或膝上型计算机。客户端计算设备可以是运行各种商用或包括但不限于各种GNU/Linux操作系统的类UNIX操作系统(诸如例如Google Chrome OS)中的任何一种的工作站计算机。可替代地或附加地,客户端计算设备602、604、606和608可以是能够经(一个或多个)网络610通信的任何其它电子设备,诸如瘦客户端计算机、启用因特网的游戏系统(例如,具有或不具有手势输入设备的Microsoft Xbox游戏控制台)和/或个人消息传送设备。
虽然示例性分布式系统600被示为具有四个客户端计算设备,但是任何数量的客户端计算设备都可以被支持。诸如具有传感器的设备等的其它设备可以与服务器612交互。
在分布式系统600中的(一个或多个)网络610可以是对本领域技术人员熟悉的、能够支持利用包括但不限于TCP/IP(传输控制协议/因特网协议)、SNA(系统网络体系结构)、IPX(因特网数据包交换)、AppleTalk等各种商用协议中的任何一种的数据通信的任何类型的网络。仅仅作为例子,(一个或多个)网络610可以是局域网(LAN),诸如基于以太网、令牌环等的网络。(一个或多个)网络610可以是广域网和因特网。它可以包括虚拟网络,包括但不限于虚拟专用网(VPN)、内联网、外联网、公共交换电话网(PSTN)、红外网络、无线网络(例如,在任何电气和电子协会(IEEE)802.11协议套件、蓝牙和/或任何其它无线协议下操作的网络);和/或这些和/或其它网络的任何组合。
服务器612可以由一个或多个通用计算机、专用服务器计算机(作为例子,包括PC(个人电脑)服务器、服务器、中档服务器、大型计算机、机架式服务器等)、服务器群、服务器集群或者任何其它适当的布置和/或组合组成。在各种实施例中,服务器612可以适于运行在上述公开内容中描述的一个或多个服务或软件应用。例如,服务器612可以对应于用于执行根据本公开内容的实施例的上述处理的服务器。
服务器612可以运行操作系统,包括任何以上讨论的操作系统,以及任何商用的服务器操作系统。服务器612也可以运行各种附加的服务器应用和/或中间层应用中的任何一种,该服务器应用和/或中间层应用包括HTTP(超文本传输协议)服务器、FTP(文件传递协议)服务器、CGI(公共网关接口)服务器、服务器、数据库服务器等。示例性数据库服务器包括但不限于来自Oracle、Microsoft、Sybase、IBM(国际商业机器公司)等的那些商用数据库服务器。
在一些实现中,服务器612可以包括一个或多个应用,以分析和整合从客户端计算设备602、604、606和608的用户接收到的数据馈送和/或事件更新。作为例子,数据馈送和/或事件更新可以包括但不限于,馈送、更新或者从一个或多个第三方信息源接收到的实时更新以及连续数据流,连续数据流可以包括与传感器数据应用、金融报价机、网络性能测量工具(例如,网络监视和流量管理应用)、点击流分析工具、汽车交通监视等相关的实时事件。服务器612也可以包括一个或多个应用来经由客户端计算设备602、604、606和608中的一个或多个显示设备显示该数据馈送和/或实时事件。
分布式系统600也可以包括一个或多个数据库614和616。数据库614和616可以驻留在各种位置。作为例子,数据库614和616中的一个或多个数据库可以驻留在服务器612本地的非临时性存储介质上(和/或驻留在服务器612中)。可替代地,数据库614和616可以远离服务器612,并且经由基于网络的或专用的连接与服务器612通信。在一组实施例中,数据库614和616可以驻留在存储区域网络(SAN)中。类似地,用于执行属于服务器612的功能的任何必要的文件可以按照需要本地存储在服务器612上和/或远程地存储。在一组实施例,数据库614和616可以包括适于响应于SQL格式的命令而存储、更新和检索数据的关系数据库,诸如由提供的数据库。
图7示出了服务可以通过其被提供为云服务的系统环境的实施例的框图。在示出的实施例中,系统环境700包括可以被用户使用来与提供云服务的云基础设施系统702(例如,网络服务计算机系统)交互的一个或多个客户端计算设备704、706和708(其可以包括用户计算机系统和/或开发者计算机系统)。客户端计算设备可以被配置为操作可以被客户端计算设备的用户使用来与云基础设施系统702交互以使用由云基础设施系统702提供的服务的客户端应用,诸如网络浏览器、私有客户端应用(例如,Forms)或一些其它应用。
应当认识到,在该图中绘出的云基础设施系统702可以具有除了所绘出的那些之外的其它部件。此外,在该图中示出的实施例只是可以结合本发明的实施例的云基础设施系统的一个例子。在一些其它实施例中,云基础设施系统702可以具有比在该图中示出的部件更多或更少的部件、可以组合两个或更多个部件、或者可以具有不同的部件配置或布置。
客户端计算设备704、706和708可以是与以上对于602、604、606和608描述的那些设备类似的设备。虽然示例性系统环境700被示为具有三个客户端计算设备,但是任何数量的客户端计算设备都可以被支持。诸如具有传感器的设备等的其它设备可以与云基础设施系统702交互。
(一个或多个)网络710可以促进客户端704、706和708与云基础设施系统702之间的通信和数据交换。每个网络可以是对本领域技术人员熟悉的、可以支持利用各种商业协议中的任何一种的数据通信的任何类型的网络,包括上述用于(一个或多个)网络610的那些网络。
云基础设施系统702可以包括一个或多个计算机和/或服务器,这可以包括上述用于服务器612的那些服务器。在某些实施例中,由云基础设施系统提供的服务可以包括可以让云基础设施系统的用户按需使用的托管的服务,诸如(除了之前描述的编译、执行和调试功能还有)在线数据存储和备份解决方案、基于网络的电子邮件服务、托管的办公套件和文档协作服务、数据库处理、管理的技术支持服务等。由云基础设施系统提供的服务可以动态地扩展,以满足其用户的需求。由云基础设施系统提供的服务的具体实例化在本文中称作为“服务实例”。一般地,来自云服务提供商的系统的、经由诸如因特网的通信网络对用户可用的任何服务被称为“云服务”。通常,在公共云环境中,构成云服务提供商的系统的服务器和系统与客户自己的办公场所服务器和系统不同。例如,云服务提供商的系统可以托管应用,并且用户可以经由诸如因特网的通信网络按需订购和使用该应用。
在一些例子中,在计算机网络云基础设施中的服务可以包括受保护对存储装置的计算机网络访问、托管数据库、托管网络服务器、软件应用或由云供应商提供给用户的其它服务、或者如以其它方式在本领域中已知的服务。例如,服务可以包括通过因特网对云上远程存储装置的受密码保护的访问。作为另一个例子,服务可以包括用于被联网开发者私人使用的基于网络服务的托管关系数据库和脚本语言中间件引擎。作为另一个例子,服务可以包括对在云供应商的网站上托管的电子邮件软件应用的访问。
在某些实施例中,云基础设施系统702可以包括以自助服务、基于订购、弹性可扩展、可靠、高可用性并且安全的方式交付给客户的一套应用、中间件和数据库服务产品。这种云基础设施系统的例子是由本受让人提供的公共云(Public Cloud)。
在某些实施例中,云基础设施系统702可以适于自动供给、管理和跟踪客户对由云基础设施系统702提供的服务的订购。云基础设施系统702可以经由不同的部署模型提供云服务。例如,服务可以根据公共云模型来提供,在该公共云模型中云基础设施系统702由销售云服务的组织拥有(例如,被Oracle拥有)并且使得服务对一般公众和不同行业的企业可用。作为另一个例子,服务可以根据私有云模型来提供,在该私有云模型中云基础设施系统702只为单个组织运营并且可以为该组织内的一个或多个实体提供服务。云服务也可以根据社区云模型来提供,在该社区云模型中云基础设施系统702和由云基础设施系统702提供的服务被相关社区中的若干个组织共享。云服务也可以根据混合云模型来提供,该混合云模型是两种或更多种不同模型的组合。
在一些实施例中,由云基础设施系统702提供的服务可以包括根据软件即服务(SaaS)类别、平台即服务(PaaS)类别、基础设施即服务(IaaS)类别、或包括混合服务的其它服务类别提供的一个或多个服务。客户经由订购订单可以订购由云基础设施系统702提供的一个或多个服务。云基础设施体系702然后执行处理,以提供在客户的订购订单中的服务。
在一些实施例中,由云基础设施系统702提供的服务可以包括但不限于,应用服务、平台服务和基础设施服务。在一些实例中,应用服务可以经由SaaS平台由云基础设施系统提供。SaaS平台可以被配置为提供落入SaaS类别中的云服务。例如,SaaS平台可以提供在集成开发和部署平台上构建和交付一套按需应用的能力。SaaS平台可以管理和控制用于提供SaaS服务的底层软件和基础设施。通过利用由SaaS平台提供的服务,客户可以利用在云基础设施系统上执行的应用。客户可以获取应用服务,而无需客户购买单独的许可和支持。可以提供各种不同的SaaS服务。例子包括但不限于,为大型组织提供用于销售绩效管理、企业整合和业务灵活性的解决方案的服务。
在一些实施例中,平台服务可以经由PaaS平台由云基础设施系统提供。PaaS平台可以被配置为提供落入PaaS类别中的云服务。平台服务的例子可以包括但不限于,使组织(诸如)能够在共享、公共的体系架构上整合现有应用以及利用由平台提供的共享服务构建新应用的能力的服务。PaaS平台可以管理和控制用于提供PaaS服务的底层软件和基础设施。客户可以获得由云基础设施系统提供的PaaS服务,而无需客户购买单独的许可和支持。平台服务的例子包括但不限于,Java云服务(JCS)、数据云服务(DBCS)以及其它服务。
通过利用由PaaS平台提供的服务,客户可以采用由云基础设施系统支持的编程语言和工具并且也可以控制所部署的服务。在一些实施例中,由云基础设施系统提供的平台服务可以包括数据库云服务、中间件云服务(例如,Oracle融合中间件服务)和Java云服务。在一种实施例中,数据库云服务可以支持使组织能够集中(pool)数据库资源并且以数据库云的形式为客户提供数据库即服务的共享服务部署模型。中间件云服务可以为客户提供平台来开发和部署各种业务应用,并且Java云服务可以为客户提供在云基础设施系统中部署Java应用的平台。
各种不同的基础设施服务可以由云基础设施系统中的IaaS平台提供。基础设施服务促进对诸如存储装置、网络和其它基本计算资源的底层计算资源的管理和控制,以便让客户利用由SaaS平台和PaaS平台提供的服务。
在某些实施例中,云基础设施系统702也可以包括用于提供用来向云基础设施系统的客户提供各种服务的资源的基础设施资源730。在一种实施例中,基础设施资源730可以包括诸如服务器、存储装置和网络资源的预先集成和优化的硬件组合,以便执行由PaaS平台和SaaS平台提供的服务。
在一些实施例中,在云基础设施系统702中的资源可以被多个用户共享并且动态地按需重新分配。此外,资源可以被分配给在不同时区的用户。例如,云基础设施系统730可以使在第一时区的第一组用户能够利用云基础设施系统的资源指定的小时数,并且然后使相同资源重新分配给位于不同时区的另一组用户,从而最大化资源的利用。
在某些实施例中,可以提供由云基础设施系统702的不同部件或模块以及由云基础设施系统702提供的服务共享的多个内部共享服务732。这些内部共享服务可以包括但不限于,安全和身份服务、集成服务、企业储存库服务、企业管理器服务、病毒扫描和白名单服务、高可用性、备份和恢复服务、用于启用云支持的服务、电子邮件服务、通知服务、文件传递服务等等。
在某些实施例中,云基础设施系统702可以提供在云基础设施系统中的云服务(例如,SaaS、PaaS和IaaS服务)的综合管理。在一种实施例中,云管理功能可以包括用于供给、管理和跟踪由云基础设施系统702接收到的客户的订购等的能力。
在一种实施例中,如在该图中所绘出的,云管理功能可以由一个或多个模块提供,诸如订单管理模块720、订单编制模块722、订单供给模块724、订单管理和监视模块726以及身份管理模块728。这些模块可以包括一个或多个计算机和/或服务器或者利用一个或多个计算机和/或服务器来提供,该一个或多个计算机和/或服务器可以是通用计算机、专用服务器计算机、服务器群、服务器集群、或任何其它适当的布置和/或组合。
在示例性操作734中,利用诸如客户端设备704、706或708的客户端设备的客户可以通过请求由云基础设施系统702提供的一个或多个服务和下订单用于订购由云基础设施系统702提供的一个或多个服务来与云基础设施系统702交互。例如,这种布置可以被客户/开发者使用,以便使网络服务计算机系统执行要被注入的开发者的代码的编译和执行。在某些实施例中,客户可以访问云用户接口(UI)(云UI 712、云UI 714和/或云UI 716)并且经由这些UI下订购订单。响应于客户下订单而被云基础设施系统702接收到的订单信息可以包括识别客户和客户希望订购的由云基础设施系统702提供的一个或多个服务的信息。在客户已经下订单之后,订单信息经由云UI712、714和/或716被接收。
在操作736,订单被存储在订单数据库718中。订单数据库718可以是由云基础设施系统718操作并且结合其它系统元素一起操作的若干个数据库之一。在操作738,订单信息被转发到订单管理模块720。在一些情况下,订单管理模块720可以被配置为执行与订单相关的计费和记帐功能,诸如验证订单以及在验证后预订该订单。在操作740,关于订单的信息被传送到订单编制模块722。订单编制模块722可以利用订单信息来编制对用于由客户所下的订单的服务和资源的供给。在一些情况下,订单编制模块722可以编制对资源的供给,以利用订单供给模块724的服务支持所订购的服务。
在某些实施例中,订单编制模块722使得能够管理与每个订单相关联的业务流程并且应用业务逻辑,以确定订单是否应该继续到供给。在操作742,当接收到对新订购的订单时,订单编制模块722发送请求到订单供给模块724,以分配资源和配置履行订购订单所需的那些资源。订单供给模块724使得能够分配用于客户订购的服务的资源。订单供给模块724在由云基础设施系统700提供的云服务和用于为了提供所请求的服务供给资源的物理实现层之间提供一层抽象。订单编制模块722可以因此与实现细节隔离,该实现细节诸如服务和资源是实际上在运行中被供给还是预先被供给并且只在请求时被分配/指定。
在操作744,一旦服务和资源被供给,所提供的服务的通知就可以通过云基础设施系统702的订单供给模块724发送给客户端设备704、706和/或708上的客户。在操作746,客户的订购订单可以被订单管理和监视模块726管理和跟踪。在一些情况下,订单管理和监视模块726可以被配置为收集对订购订单中的服务的使用统计数据,诸如使用的存储量、被传递的数据量、用户的数量、以及系统上线时间和系统停机时间的量。
在某些实施例中,云基础设施系统700可以包括身份管理模块728。身份管理模块728可以被配置为提供身份服务,诸如在云基础设施系统700中的访问管理和授权服务。在一些实施例中,身份管理模块728可以控制关于希望利用由云基础设施系统702提供的服务的客户的信息。这种信息可以包括认证这种客户的身份的信息和描述这些客户被授权执行相对于各种系统资源(例如,文件、目录、应用、通信端口、存储器段等等)的哪些行为的信息。身份管理模块728也可以包括关于每个客户的描述性信息和关于描述性信息可以如何以及由谁来访问和修改的管理。
图8示出了可以用来实现本文详细描述的各种实施例的计算机系统800的实施例,该计算机系统800诸如网络服务计算机系统、开发者计算机系统和用户计算机系统。应当理解,之前描述的计算机系统可以包括诸如计算机系统800的计算机的一个或多个实例。例如,一组服务器可以执行网络服务计算机系统的功能。如在该图中所示出的,计算机系统800包括经由总线子系统802与多个外围子系统通信的处理单元804。这些外围子系统可以包括处理加速单元806、I/O子系统808、存储子系统818和通信子系统824。存储子系统818包括有形计算机可读存储介质822和系统存储器810。
总线子系统802提供了用于让计算机系统800的各种部件和子系统按意图彼此通信的机制。虽然总线子系统802被示意性地示为单条总线,但是总线子系统的备选实施例可以利用多条总线。总线子系统802可以是若干种类型的总线结构中的任何一种,该若干种类型的总线结构包括存储器总线或存储器控制器、外围总线、以及利用各种总线体系结构中的任何一种的局部总线。例如,这种体系结构可以包括工业标准体系结构(ISA)总线、微通道体系结构(MCA)总线、增强型ISA(EISA)总线、视频电子标准协会(VESA)局部总线和外围部件互连(PCI)总线,该PCI总线可以被实现为按IEEE P1386.1标准制造的Mezzanine总线。
可以被实现为一个或多个集成电路(例如,常规微处理器或微控制器)的处理单元804控制计算机系统800的操作。一个或多个处理器可以被包括在处理单元804中。这些处理器可以包括单核或多核处理器。在某些实施例中,处理单元804可以被实现为一个或多个独立的处理单元832和/或834,其中在每个处理单元中包括单核或多核处理器。在其它实施例中,处理单元804也可以被实现为通过将两个双核处理器集成到单个芯片中形成的四核处理单元。
在各种实施例,处理单元804可以响应于程序代码执行各种程序并且可以维护多个并发执行的程序或进程。在任何给定时间,要被执行的程序代码中的一些或全部代码可以驻留在(一个或多个)处理器804中和/或存储子系统818中。通过适当的编程,(一个或多个)处理器804可以提供上述各种功能。计算机系统800可以附加地包括处理加速单元806,其可以包括数字信号处理器(DSP)、专用处理器等等。
I/O子系统808可以包括用户接口输入设备和用户接口输出设备。用户接口输入设备可以包括键盘、诸如鼠标或轨迹球的定点设备、结合到显示器中的触摸板或触摸屏、滚动轮、点击轮、拨盘、按钮、开关、键盘、具有语音命令识别系统的音频输入设备、麦克风以及其它类型的输入设备。用户接口输入设备可以包括例如运动感测和/或手势识别设备,诸如Microsoft运动传感器,其使得用户能够通过利用手势和语音命令的自然用户接口控制诸如的Microsoft360游戏控制器的输入设备并与之交互。用户接口输入设备也可以包括眼睛姿势识别设备,诸如从用户检测眼睛活动(例如,在拍摄照片和/或做出菜单选择的同时“眨眼”)并且将眼睛姿势转换为到输入设备(例如,Google)中的输入的Google眨眼检测器。此外,用户接口输入设备可以包括使用户能够通过语音命令与语音识别系统(例如,导航器)交互的语音识别感测设备。
用户接口输入设备也可以包括但不限于,三维(3D)鼠标、操纵杆或指向棒、游戏面板和绘图板,以及音频/视频设备,诸如扬声器、数码相机、数码摄像机、便携式媒体播放器、网络摄像头、图像扫描仪、指纹扫描仪、条形码阅读器3D扫描仪、3D打印机、激光测距仪和眼睛注视跟踪设备。此外,用户接口输入设备可以包括,例如医学成像输入设备,诸如计算机断层扫描、磁共振成像、正电子发射断层摄影术、医疗超声设备。用户接口输入设备也可以包括,例如诸如MIDI键盘、数字乐器等的音频输入设备。
用户接口输出设备可以包括显示子系统、指示灯或者诸如音频输出设备的非视觉显示器等等。显示子系统可以是阴极射线管(CRT)、诸如利用液晶显示器(LCD)或等离子显示器的平板设备、投影设备、触摸屏等等。一般而言,术语“输出设备”的使用意在包括用于从计算机系统800向用户或其它计算机输出信息的所有可能类型的设备和机制。例如,用户接口输出设备可以包括但不限于,在视觉上传达文字、图形和音频/视频信息的各种显示设备,诸如监视器、打印机、扬声器、耳机、汽车导航系统、绘图仪、语音输出设备以及调制解调器。
计算机系统800可以包括包含软件元素、被示为当前位于系统存储器810内的存储子系统818。系统存储器810可以存储能够加载并且能够在处理单元804上执行的程序指令,以及在这些程序的执行期间所产生的数据。
取决于计算机系统800的配置和类型,系统存储器810可以是易失性的(诸如随机存取存储器(RAM))和/或非易失性的(诸如只读存储器(ROM)、闪存存储器等等)。RAM通常包含可被处理单元804立即访问和/或目前正被处理单元804操作和执行的数据和/或程序模块。在一些实现方式中,系统存储器810可以包括多种不同类型的存储器,例如静态随机存取存储器(SRAM)或动态随机存取存储器(DRAM)。在一些实现方式中,诸如在启动期间,包含有助于在计算机系统800内的元件之间传递信息的基本例程的基本输入/输出系统(BIOS)通常可以被存储在ROM中。作为例子而非限制,系统存储器810也示出了可以包括客户端应用、网络浏览器、中间层应用、关系数据库管理系统(RDBMS)等的应用程序812,程序数据814以及操作系统816。作为例子,操作系统816可以包括各种版本的MicrosoftApple和/或Linux操作系统、各种商用或类UNIX操作系统(包括但不限于各种GNU/Linux操作系统、Google操作系统等等)和/或诸如iOS、Phone、OS、8OS和OS操作系统的移动操作系统。
存储子系统818也可以提供用于存储提供一些实施例的功能的基本编程和数据结构的有形计算机可读存储介质。当被处理器执行时提供上述功能的软件(程序、代码模块、指令)可以被存储在存储子系统818中。这些软件模块或指令可以被处理单元804执行。存储子系统818也可以提供用于存储根据本发明被使用的数据的储存库。
存储子系统818也可以包括可被进一步连接到计算机可读存储介质822的计算机可读存储介质读取器820。与系统存储器810一起并且可选地与其相结合,计算机可读存储介质822可以全面地表示用于临时和/或更持久地包含、存储、传送和检索计算机可读信息的远程、本地、固定和/或可移动存储设备加存储介质。
包含代码或代码的部分的计算机可读存储介质822也可以包括本领域已知或使用的任何适当的介质,包括存储介质和通信介质,诸如但不限于,以用于信息的存储和/或传输的任何方法或技术实现的易失性和非易失性、可移除和不可移除介质。这可以包括有形的计算机可读存储介质,诸如RAM、ROM、电可擦除可编程ROM(EEPROM)、闪存存储器或其它存储器技术、CD-ROM、数字多功能盘(DVD)或其它光学存储装置、磁带盒、磁带、磁盘存储装置或其它磁存储设备、或者其它有形的计算机可读介质。这也可以包括非有形的计算机可读介质,诸如数据信号、数据传输,或者可以被用来传送期望信息并且可以被计算机系统800访问的任何其它介质。
作为例子,计算机可读存储介质822可以包括从不可移除的非易失性磁介质读取或写到其的硬盘驱动器、从可移除的非易失性磁盘读取或写到其的磁盘驱动器、以及从可移除的非易失性光盘(诸如CD ROM、DVD和盘或其它光学介质)读取或写到其的光盘驱动器。计算机可读存储介质822可以包括但不限于,驱动器、闪存卡、通用串行总线(USB)闪存驱动器、安全数字(SD)卡、DVD盘、数字音频带等等。计算机可读存储介质822也可以包括:基于非易失性存储器的固态驱动器(SSD),诸如基于闪存存储器的SSD、企业闪存驱动器、固态ROM等;基于易失性存储器的SSD,诸如固态RAM、动态RAM、静态RAM,基于DRAM的SSD,磁阻RAM(MRAM)SSD;以及使用基于DRAM和闪存存储器的SSD的组合的混合SSD。盘驱动器及其相关联的计算机可读介质可以为计算机系统800提供计算机可读指令、数据结构、程序模块及其它数据的非易失性存储。
通信子系统824提供到其它计算机系统和网络的接口。通信子系统824用作用于从其它系统接收数据和从计算机系统800向其它系统传送数据的接口。例如,通信子系统824可以使计算机系统800能够经由因特网连接到一个或多个设备。在一些实施例中,通信子系统824可以包括用于访问无线语音和/或数据网络的射频(RF)收发器部件(例如,利用蜂窝电话技术、诸如3G、4G或EDGE(用于全球演进的增强型数据速率)的先进数据网络技术、Wi-Fi(IEEE802.11系列标准)、或其它移动通信技术、或其任意组合)、全球定位系统(GPS)接收器部件和/或其它部件。在一些实施例中,作为无线接口的附加或者替代,通信子系统824可以提供有线网络连接(例如,以太网)。
在一些实施例中,通信子系统824也可以代表可以使用计算机系统800的一个或多个用户接收结构化和/或非结构化数据馈送826、事件流828、事件更新830等形式的输入通信。
作为例子,通信子系统824可以被配置为实时地从社交网络和/或其它通信服务的用户接收数据馈送826,诸如馈送、更新、诸如丰富站点摘要(RSS)馈送的网络馈送和/或来自一个或多个第三方信息源的实时更新。
此外,通信子系统824也可以被配置为接收连续数据流形式的数据,这可以包括本质上可以是连续的或无界的没有明确终止的实时事件的事件流828和/或事件更新830。产生连续数据的应用的例子可以包括,例如传感器数据应用、金融报价机、网络性能测量工具(例如,网络监视和流量管理应用)、点击流分析工具、汽车流量监视等等。
通信子系统824也可以被配置为向一个或多个数据库输出结构化和/或非结构化数据馈送826、事件流828、事件更新830等等,这一个或多个数据库可以与耦合到计算机系统800的一个或多个流数据源计算机通信。
计算机系统800可以是各种类型之一,包括手持便携式设备(例如,蜂窝电话、计算平板、PDA)、可穿戴设备(例如,Google头戴式显示器)、PC、工作站、大型机、信息站(kiosk)、服务器机架或任何其它数据处理系统。
由于计算机和网络的不断变化的本质,在该图中绘出的计算机系统800的描述仅仅要作为具体的例子。具有比该图中绘出的系统更多或更少部件的许多其它配置是可能的。例如,定制的硬件也可以被使用和/或特定的元素可以用硬件、固件、软件(包括小程序(applets))或它们的组合来实现。另外,也可以采用到诸如网络输入/输出设备之类的其它计算设备的连接。基于本文提供的公开内容和示教,本领域普通技术人员将认识到实现各种实施例的其它方式和/或方法。
以上所讨论的方法、系统和设备是例子。各种配置可以适当地省略、替换或添加各种过程或部件。例如,在可替代的配置中,方法可以按与所述不同的次序执行,和/或各个阶段可以被添加、省略和/或组合。此外,关于某些配置所描述的特征可以在各种其它配置中组合。配置的不同方面和元素可以以类似的方式组合。此外,技术在发展,并且因此许多元素是例子并且没有限制本公开内容或权利要求的范围。
在描述中给出了具体细节,以提供对示例配置(包括实现方式)的透彻理解。但是,在没有这些具体细节的情况下,配置也可以被实践。例如,众所周知的电路、过程、算法、结构和技术在没有不必要的细节的情况下被示出,以避免使配置晦涩难懂。这种描述仅仅提供示例配置,而没有限制权利要求的范围、适用性或配置。相反,之前对配置的描述将为本领域技术人员提供用于实现所述技术的可行描述。在不背离本公开内容的精神或范围的情况下,可以对元素的功能和布置做出各种变化。
此外,配置可以被描述为过程,该过程被绘为流程图或框图。虽然每个配置都可以把操作描述为顺序过程,但是许多操作可以并行地或者并发地执行。此外,操作的次序可以被重新布置。过程可以具有图中没有包括的附加步骤。此外,方法的例子可以由硬件、软件、固件、中间件、微代码、硬件描述语言或其任意组合来实现。当用软件、固件、中间件或微代码实现时,执行必要任务的程序代码或代码片段可以被存储在诸如存储介质的非临时性计算机可读介质中。处理器可以执行所描述的任务。
图9示出了根据如上所述的本发明的原理配置的、用于调试代码的系统的实施例的功能框图。该设备的功能块可以通过硬件、软件、或者硬件和软件的组合来实现,以执行本发明的原理。本领域技术人员应当理解,图9中描述的功能块可以被组合或者被分离为子块来实现如上所述的本发明的原理。因此,本文的描述可以支持任何可能的组合或分离或本文所述的功能块的其它定义。
如在图9中所示出的,提供了用于调试代码的系统900。系统900可以包括网络服务计算机系统910。网络服务计算机系统910进一步可以包括编译器912、选择单元914、第一执行单元916和第一调试功能单元918。编译器912可以被配置为将代码编译为已编译代码,并且代码可以包括与第一任务流对应的第一部分和与第二任务流对应的第二部分。选择单元914可以被配置为经由网络(未示出)从开发者计算机系统(未示出)接收对第一任务流或第二任务流的选择。该选择可以指示第一任务流或第二任务流要被调试。第一执行单元916可以被配置为当第一任务流被选择时开始第一任务流的执行。第一调试功能单元918可以被配置为在第一执行单元916正在执行已编译代码的第一任务流的同时,经由网络向开发者计算机系统提供用于代码的第一部分的调试功能。
作为例子,网络服务计算机系统910还可以包括代码接收单元911,其可以被配置为在编译代码之前,经由网络浏览器接口和网络从开发者计算机系统接收用于编译的代码。
在例子中,网络服务计算机系统910还可以包括第二执行单元920,其可以被配置为执行第二任务流,其中未经由网络从开发者计算机系统接收到用于第二任务流的调试的选择,并且其中不向开发者计算机系统提供与代码的第二部分相关联的调试功能。在例子中,网络服务计算机系统910还可以包括接口提供单元922,其可以被配置为经由网络浏览器向开发者计算机系统提供允许在包括第一任务流和第二任务流的多个任务流中进行选择的接口。在例子中,网络服务计算机系统910还可以包括第三执行单元924,该第三执行单元924可以被配置为当选择单元914在第一任务流的执行期间从开发者计算机系统接收对第二任务流的选择时开始第二任务流的执行;以及第二调试功能单元926,该第二调试功能单元926被配置为:在第三执行单元正在执行已编译代码的第二任务流的同时,经由网络向开发者计算机系统提供用于代码的第二部分的调试功能。在例子中,第一执行单元916是由计算机系统执行的虚拟机,该虚拟机将已编译代码作为运行时线程执行。在例子中,在执行第一任务流的同时,虚拟机执行第二运行时线程,其中第二运行时线程不具有提供给任何用户的调试功能。在例子中,编译器912还可以包括代码修改单元(未示出),该代码修改单元被配置为在编译期间修改代码的第一部分和代码的第二部分,以包括附加代码,其中附加代码提供调试功能。在例子中,第一调试功能单元918和第二调试功能单元926分别包括:停止单元(未示出),该停止单元被配置为在开发者计算机系统处的代码的第一部分和第二部分内的断点处停止第一任务流和第二任务流的执行;输出单元(未示出),该输出单元被配置为在第一任务流和第二任务流的执行期间将来自代码的第一部分和第二部分内的变量值输出到开发者计算机系统;以及输入单元(未示出),该输入单元被配置为从开发者计算机系统接收触发代码的第一部分和第二部分中的各个表达式的处理发生的输入。
在一些实施例中,给出了用于调试代码的装置。这种装置可以包括:用于将代码编译为已编译代码的机构,其中代码的第一部分对应于第一任务流并且代码的第二部分对应于第二任务流。该装置可以包括用于经由网络从开发者计算机系统接收对第一任务流的选择的元件,其中该选择指示第一任务流要被调试。这种装置可以包括用于通过计算机系统开始第一任务流的执行的元件。这种装置可以包括,用于在计算机系统正在执行已编译代码的第一任务流的同时,经由网络向开发者计算机系统提供用于代码的第一部分的调试功能的元件。
已描述了若干示例配置的情况下,可以在不背离本公开内容的精神的情况下使用各种修改、替代性的构造和等价物。例如,以上元素可以是更大系统的部件,其中其他规则可以优先于本发明的应用或者以其他方式修改本发明的应用。同样,在考虑以上元素之前、期间或之后可以采取各种步骤。

Claims (18)

1.一种用于调试代码的方法,所述方法包括:
通过计算机系统将代码编译为已编译代码,其中所述代码的第一部分对应于第一任务流并且所述代码的第二部分对应于第二任务流;
通过所述计算机系统经由网络从开发者计算机系统接收对第一任务流的选择,其中所述选择指示第一任务流要被调试;
通过所述计算机系统开始第一任务流的执行;及
在所述计算机系统正在执行已编译代码的第一任务流的同时,通过计算机系统经由所述网络向所述开发者计算机系统提供用于所述代码的第一部分的调试功能,其中所述调试功能包括选自包括以下的组中的一个或多个特征:
在所述开发者计算机系统处的所述代码的第一部分内定义的断点处停止第一任务流的执行,
在第一任务流的执行期间,将来自所述代码的第一部分内的变量值输出到所述开发者计算机系统,及
接收来自所述开发者计算机系统的、触发所述代码的第一部分中的各个表达式的处理发生的输入。
2.如权利要求1所述的用于调试代码的方法,所述方法进一步包括:
在编译所述代码之前,通过所述计算机系统经由网络浏览器接口和所述网络从所述开发者计算机系统接收用于编译的所述代码,其中所述计算机系统是为多个开发者计算机系统提供编译服务的网络服务计算机系统。
3.如权利要求1所述的用于调试代码的方法,进一步包括:
通过所述计算机系统执行第二任务流,其中:
未经由所述网络从所述开发者计算机系统接收到用于第二任务流的调试的选择;及
不向所述开发者计算机系统提供与所述代码的第二部分相关联的调试功能。
4.如权利要求1所述的用于调试代码的方法,进一步包括:
通过所述计算机系统经由网络浏览器向所述开发者计算机系统提供允许在多个任务流中进行选择的接口,所述多个任务流包括第一任务流和第二任务流。
5.如权利要求4所述的用于调试代码的方法,进一步包括:
在第一任务流的执行期间,通过所述计算机系统从所述开发者计算机系统接收对第二任务流的选择;
通过所述计算机系统开始第二任务流的执行;及
在所述计算机系统正在执行已编译代码的第二任务流的同时,通过所述计算机系统经由所述网络向所述开发者计算机系统提供用于所述代码的第二部分的调试功能。
6.如权利要求1所述的用于调试代码的方法,其中通过所述计算机系统执行第一任务流是通过由所述计算机系统执行的虚拟机执行的,所述虚拟机将所述已编译代码作为运行时线程执行。
7.如权利要求6所述的用于调试代码的方法,还包括:
在执行第一任务流的同时,通过由所述计算机系统执行的虚拟机执行第二运行时线程,其中第二运行时线程不具有提供给任何用户的调试功能。
8.如权利要求1所述的用于调试代码的方法,其中将所述代码编译为所述已编译代码包括:
在编译期间修改所述代码的第一部分和所述代码的第二部分,以包括附加代码,其中所述附加代码提供调试功能。
9.一种用于调试代码的系统,所述系统包括:
网络服务计算机系统,包括:
一个或多个处理器;及
存储器,所述存储器与所述一个或多个处理器通信地耦合并能够被其读取并且具有在其中存储的处理器可读指令,所述处理器可读指令当被所述一个或多个处理器执行时,使得所述一个或多个处理器:
将代码编译为已编译代码,其中所述代码的第一部分对应于第一任务流并且所述代码的第二部分对应于第二任务流;
经由网络从开发者计算机系统接收对第一任务流的选择,其中所述选择指示第一任务流要被调试;
开始第一任务流的执行;及
在所述网络服务计算机系统正在执行所述已编译代码的第一任务流的同时,经由所述网络向所述开发者计算机系统提供用于所述代码的第一部分的调试功能,其中所述调试功能包括选自包括以下的组的一个或多个特征:
在所述开发者计算机系统处定义的、所述代码的第一部分内的断点处第一任务流的执行的停止,在第一任务流的执行期间来自所述代码的第一部分内的变量值到所述开发者计算机系统的输出,及提供来自所述开发者计算机系统的、触发所述代码的第一部分中的各个表达式的处理发生的输入的能力。
10.如权利要求9所述的用于调试代码的系统,其中所述处理器可读指令当被执行时,进一步使得所述一个或多个处理器:
在编译所述代码之前,经由网络浏览器接口和所述网络从所述开发者计算机系统接收用于编译的所述代码。
11.如权利要求9所述的用于调试代码的系统,其中所述处理器可读指令当被执行时,进一步使得所述一个或多个处理器:
执行第二任务流,其中:
未经由所述网络从所述开发者计算机系统接收到用于调试第二任务流的选择;及
不向所述开发者计算机系统提供与所述代码的第二部分相关联的调试功能。
12.如权利要求9所述的用于调试代码的系统,其中所述处理器可读指令当被执行时,进一步使得所述一个或多个处理器:
经由网络浏览器向所述开发者计算机系统提供允许在多个任务流中进行选择的接口,所述多个任务流包括第一任务流和第二任务流。
13.如权利要求12所述的用于调试代码的系统,其中所述处理器可读指令当被执行时,进一步使得所述一个或多个处理器:
在第一任务流的执行期间,从所述开发者计算机系统接收对第二任务流的选择;
开始第二任务流的执行;及
在计算机系统正在执行所述已编译代码的第二任务流的同时,经由所述网络向所述开发者计算机系统提供用于所述代码的第二部分的调试功能。
14.如权利要求9所述的用于调试代码的系统,其中第一任务流的执行是通过由计算机系统执行的虚拟机来执行的,所述虚拟机将所述已编译代码作为运行时线程执行。
15.如权利要求14所述的用于调试代码的系统,其中所述处理器可读指令当被执行时,进一步使得所述一个或多个处理器:
在执行第一任务流的同时,通过所述虚拟机执行第二运行时线程,其中第二运行时线程不具有提供给任何用户的调试功能。
16.如权利要求9所述的用于调试代码的系统,其中当被执行时使得所述一个或多个处理器将所述代码编译为所述已编译代码的所述处理器可读指令包括当被执行时使得所述一个或多个处理器执行以下步骤的处理器可读指令:
在编译期间修改所述代码的第一部分和代码的第二部分,以包括附加代码,其中所述附加代码提供调试功能。
17.一种用于调试代码的非临时性处理器可读介质,包括处理器可读指令,所述处理器可读指令配置为使得一个或多个处理器:
将代码编译为已编译代码,其中所述代码的第一部分对应于第一任务流并且所述代码的第二部分对应于第二任务流;
经由网络从开发者计算机系统接收对第一任务流的选择,其中所述选择指示第一任务流要被调试;
开始第一任务流的执行;及
在执行所述已编译代码的第一任务流的同时经由所述网络向所述开发者计算机系统提供用于所述代码的第一部分的调试功能,其中所述调试功能包括选自包括以下的组的一个或多个特征:
在所述代码的第一部分内的断点处第一任务流的执行的停止,所述断点被定义在所述开发者计算机系统处,在第一任务流的执行期间来自所述代码的第一部分内的变量值到所述开发者计算机系统的输出,及从所述开发者计算机系统提供触发所述代码的第一部分中的各个表达式的处理发生的输入的能力。
18.如权利要求17所述的用于调试代码的非临时性处理器可读介质,其中所述处理器可读指令进一步被配置为使得所述一个或多个处理器:
在编译所述代码之前,经由网络浏览器接口和所述网络从所述开发者计算机系统接收用于编译的所述代码,其中所述计算机系统是为多个开发者计算机系统提供编译服务的网络服务计算机系统。
CN201480046143.4A 2013-08-22 2014-07-25 针对基于云的调试 Active CN105493049B (zh)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201361868763P 2013-08-22 2013-08-22
US61/868,763 2013-08-22
US14/267,361 US9146834B2 (en) 2013-08-22 2014-05-01 Targeted cloud-based debugging
US14/267,361 2014-05-01
PCT/US2014/048100 WO2015026480A1 (en) 2013-08-22 2014-07-25 Targeted cloud-based debugging

Publications (2)

Publication Number Publication Date
CN105493049A CN105493049A (zh) 2016-04-13
CN105493049B true CN105493049B (zh) 2017-07-11

Family

ID=52481587

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201480046143.4A Active CN105493049B (zh) 2013-08-22 2014-07-25 针对基于云的调试

Country Status (5)

Country Link
US (1) US9146834B2 (zh)
EP (1) EP3036635B1 (zh)
JP (2) JP6643233B2 (zh)
CN (1) CN105493049B (zh)
WO (1) WO2015026480A1 (zh)

Families Citing this family (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9183113B2 (en) 2011-09-29 2015-11-10 Oracle International Corporation Debugging analysis in running multi-user systems
US9836387B1 (en) * 2014-11-13 2017-12-05 Marvell International Ltd. System and method for implementing a debugger as a server
US10678910B2 (en) * 2015-04-10 2020-06-09 Micro Focus Llc Modifying web page code to include code to protect output
US10521329B2 (en) * 2015-05-08 2019-12-31 Intergral GmbH Debugging system
US10318403B2 (en) 2016-05-17 2019-06-11 International Business Machines Corporation Code update based on detection of change in runtime code during debugging
US9946630B2 (en) 2016-06-17 2018-04-17 International Business Machines Corporation Efficiently debugging software code
CN107391111A (zh) * 2017-06-22 2017-11-24 刘武丰 人工智能协同开发框架及实现方法
US10216615B2 (en) * 2017-06-30 2019-02-26 Sap Se Debuggable instance code in a cloud-based instance platform environment
US10545853B2 (en) 2017-11-06 2020-01-28 Oracle International Corporation Stateless debugging of a script injected into a web application that is located in a mult-node cloud system
US10713145B2 (en) * 2018-01-05 2020-07-14 International Business Machines Corporation Automated debugging with combined static and dynamic analysis
US10579501B2 (en) 2018-04-04 2020-03-03 International Business Machines Corporation Testing and reproduction of concurrency issues
US11468134B2 (en) 2018-09-26 2022-10-11 International Business Machines Corporation Provisioning a customized software stack for network-based question and answer services
US11694090B2 (en) * 2019-04-10 2023-07-04 International Business Machines Corporation Debugging deep neural networks
WO2022087811A1 (zh) * 2020-10-27 2022-05-05 华为技术有限公司 模型推理异常处理方法及装置
CN114584802B (zh) * 2020-11-30 2024-03-08 腾讯科技(深圳)有限公司 多媒体处理方法、装置、介质以及电子设备
US11934294B2 (en) * 2021-07-28 2024-03-19 Sap Se Generating and debugging bytecode for a rule
CN113923144B (zh) * 2021-09-18 2023-09-01 北京奇艺世纪科技有限公司 业务的测试系统、方法、电子设备和存储介质
JP2023128052A (ja) * 2022-03-02 2023-09-14 株式会社東芝 情報処理システム

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1653430A (zh) * 2002-05-07 2005-08-10 甲骨文国际公司 编程对象简化的内存重新分配
US7873872B1 (en) * 2001-07-10 2011-01-18 Versata Development Group, Inc. System and method for remotely debugging application programs
US8250548B2 (en) * 2006-06-06 2012-08-21 Waseda University Method for controlling heterogeneous multiprocessor and multigrain parallelizing compiler

Family Cites Families (48)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5121498A (en) * 1988-05-11 1992-06-09 Massachusetts Institute Of Technology Translator for translating source code for selective unrolling of loops in the source code
US5339428A (en) * 1991-09-04 1994-08-16 Digital Equipment Corporation Compiler allocating a register to a data item used between a use and store of another data item previously allocated to the register
JPH07191876A (ja) * 1993-12-27 1995-07-28 Nec Corp プログラム試験装置とその使用方法
JPH0816428A (ja) * 1994-06-30 1996-01-19 Hitachi Software Eng Co Ltd オブジェクト指向プログラムのコンパイルシステム及びデバッグ方法
JPH09259002A (ja) * 1996-03-22 1997-10-03 Hitachi Ltd デバッグ支援装置
JPH09259004A (ja) * 1996-03-27 1997-10-03 Nippon Denki Ido Tsushin Kk デバッグ方法
US6516416B2 (en) 1997-06-11 2003-02-04 Prism Resources Subscription access system for use with an untrusted network
US7290288B2 (en) 1997-06-11 2007-10-30 Prism Technologies, L.L.C. Method and system for controlling access, by an authentication server, to protected computer resources provided via an internet protocol network
US6148402A (en) 1998-04-01 2000-11-14 Hewlett-Packard Company Apparatus and method for remotely executing commands using distributed computing environment remote procedure calls
US6157955A (en) * 1998-06-15 2000-12-05 Intel Corporation Packet processing system including a policy engine having a classification unit
KR20010072477A (ko) 1998-08-13 2001-07-31 썬 마이크로시스템즈, 인코포레이티드 가상 머신 환경에서 네이티브 코드를 변환하고 실행하는방법 및 장치
US6681384B1 (en) * 1999-12-23 2004-01-20 International Business Machines Corporation Multi-threaded break-point
US6915509B1 (en) * 2000-06-28 2005-07-05 Microsoft Corporation Method and system for debugging a program
US6966057B2 (en) 2001-03-30 2005-11-15 Intel Corporation Static compilation of instrumentation code for debugging support
US7577942B2 (en) * 2001-07-26 2009-08-18 International Business Machines Corporation Efficient monitoring of program variables under debug
US7996827B2 (en) * 2001-08-16 2011-08-09 Martin Vorbach Method for the translation of programs for reconfigurable architectures
US8332828B2 (en) 2002-11-20 2012-12-11 Purenative Software Corporation System for translating diverse programming languages
US7401323B2 (en) * 2003-04-21 2008-07-15 Microsoft Corporation Just-My-Code debugging
US7020852B2 (en) * 2003-05-08 2006-03-28 Lsi Logic Corporation Automation of the development, testing, and release of a flow framework and methodology to design integrated circuits
US7685570B2 (en) * 2003-06-09 2010-03-23 Microsoft Corporation Error/exception helper
US7225429B2 (en) * 2003-06-12 2007-05-29 International Business Machines Corporation Breakpoint groups based on control flow
US7774172B1 (en) * 2003-12-10 2010-08-10 The Mathworks, Inc. Method for using a graphical debugging tool
US7287243B2 (en) 2004-01-06 2007-10-23 Hewlett-Packard Development Company, L.P. Code verification system and method
US7343588B2 (en) * 2004-01-30 2008-03-11 International Business Machines Corporation Method of generating and utilizing debug history
US7624385B2 (en) 2005-03-30 2009-11-24 Alcatel-Lucent Usa Inc. Method for handling preprocessing in source code transformation
US7917894B2 (en) * 2005-06-03 2011-03-29 International Business Machines Corporation Constraining source code and objects for analysis tools
US20070055957A1 (en) 2005-09-07 2007-03-08 Richard Birenheide Remote debugging proxy
US7669186B2 (en) 2005-11-16 2010-02-23 Sun Microsystems, Inc. Debugging applications at resource constrained virtual machines using dynamically installable lightweight agents
US8104021B2 (en) * 2006-06-09 2012-01-24 Microsoft Corporation Verifiable integrity guarantees for machine code programs
US8255887B2 (en) * 2006-11-29 2012-08-28 International Business Machines Corporation Method and apparatus for re-using memory allocated for data structures used by software processes
US8418135B2 (en) 2007-05-31 2013-04-09 Red Hat, Inc. Method and apparatus to abstract away rule languages
US8677141B2 (en) 2007-11-23 2014-03-18 Microsoft Corporation Enhanced security and performance of web applications
JP2010033543A (ja) * 2008-06-24 2010-02-12 Smg Kk ソフトウエア動作監視システム、そのクライアントコンピュータおよびサーバコンピュータ、並びに、そのプログラム
EP2196934A1 (en) 2008-12-09 2010-06-16 Gemalto SA Method for securing java bytecode
US8392885B2 (en) * 2008-12-19 2013-03-05 Microsoft Corporation Low privilege debugging pipeline
US8627303B2 (en) 2009-11-30 2014-01-07 International Business Machines Corporation Memory optimization of virtual machine code by partitioning extraneous information
US9003380B2 (en) 2010-01-12 2015-04-07 Qualcomm Incorporated Execution of dynamic languages via metadata extraction
US20110313981A1 (en) 2010-06-17 2011-12-22 International Business Machines Corporation Data Privacy, Redaction and Integrity for Relational Databases
US8601453B2 (en) 2010-09-19 2013-12-03 Micro Focus (Us), Inc. COBOL to bytecode translation
JP2012079130A (ja) * 2010-10-01 2012-04-19 Fujitsu Ltd デバッグ支援プログラム、デバッグ支援装置、及びデバッグ支援方法
US8572438B2 (en) 2011-06-24 2013-10-29 Microsoft Corporation N-way runtime interoperative debugging
US8819649B2 (en) 2011-09-09 2014-08-26 Microsoft Corporation Profile guided just-in-time (JIT) compiler and byte code generation
US9183113B2 (en) 2011-09-29 2015-11-10 Oracle International Corporation Debugging analysis in running multi-user systems
US8782673B2 (en) 2011-10-24 2014-07-15 The Boeing Company Sharing of first class objects across multiple interpreted programming languages
US8863085B1 (en) * 2012-01-31 2014-10-14 Google Inc. Monitoring web applications
US8887138B2 (en) * 2012-05-25 2014-11-11 Telefonaktiebolaget L M Ericsson (Publ) Debugging in a dataflow programming environment
US9122794B2 (en) 2012-10-30 2015-09-01 Oracle International Corporation System and method for debugging domain specific languages
US8843901B2 (en) * 2013-02-12 2014-09-23 Concurix Corporation Cost analysis for selecting trace objectives

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7873872B1 (en) * 2001-07-10 2011-01-18 Versata Development Group, Inc. System and method for remotely debugging application programs
CN1653430A (zh) * 2002-05-07 2005-08-10 甲骨文国际公司 编程对象简化的内存重新分配
US8250548B2 (en) * 2006-06-06 2012-08-21 Waseda University Method for controlling heterogeneous multiprocessor and multigrain parallelizing compiler

Also Published As

Publication number Publication date
US20150058824A1 (en) 2015-02-26
JP6931684B2 (ja) 2021-09-08
WO2015026480A9 (en) 2016-02-25
JP6643233B2 (ja) 2020-02-12
EP3036635A1 (en) 2016-06-29
JP2016528650A (ja) 2016-09-15
EP3036635B1 (en) 2023-10-25
WO2015026480A1 (en) 2015-02-26
US9146834B2 (en) 2015-09-29
CN105493049A (zh) 2016-04-13
JP2020024717A (ja) 2020-02-13

Similar Documents

Publication Publication Date Title
CN105493049B (zh) 针对基于云的调试
US9825964B2 (en) External platform extensions in a multi-tenant environment
US10437566B2 (en) Generating runtime components
US10331463B2 (en) Dynamic role-based view definitions in a repository system
US9804887B2 (en) Process scheduling and execution in distributed computing environments
US10192175B2 (en) Navigating interactive visualizations with collaborative filtering
US9600342B2 (en) Managing parallel processes for application-level partitions
US9553990B2 (en) Recommended roster based on customer relationship management data
US20160092246A1 (en) Reverse dependency injection in a system with dynamic code loading
CN107431721A (zh) 划分用于不同电子设备的应用分发
CN108604278A (zh) 具有对共享数据表的支持的自描述配置
US20150161547A1 (en) Methods and systems to define and execute customer declarative business rules to extend business applications
US11709759B2 (en) Contextual drill back to source code and other resources from log data
US20160092245A1 (en) Data rich tooltip for favorite items
US9529702B2 (en) System to enable multi-tenancy testing of business data and validation logic on the cloud
US9785543B2 (en) Dual tagging between test and pods
CN114730258A (zh) 用于基础设施编排服务的用户界面技术
US9706013B2 (en) Mobile runtime conditional sections for surveys
Ahmad Formal Gathering Plus

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