CN104756086A - 用于调试依领域而定的语言的系统和方法 - Google Patents

用于调试依领域而定的语言的系统和方法 Download PDF

Info

Publication number
CN104756086A
CN104756086A CN201380056612.6A CN201380056612A CN104756086A CN 104756086 A CN104756086 A CN 104756086A CN 201380056612 A CN201380056612 A CN 201380056612A CN 104756086 A CN104756086 A CN 104756086A
Authority
CN
China
Prior art keywords
debugging
machine
code
dsl
developer
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.)
Granted
Application number
CN201380056612.6A
Other languages
English (en)
Other versions
CN104756086B (zh
Inventor
J·斯米亚尼克
S·维纳亚卡
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 CN104756086A publication Critical patent/CN104756086A/zh
Application granted granted Critical
Publication of CN104756086B publication Critical patent/CN104756086B/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/3624Software debugging by performing operations on the source code, e.g. via a compiler
    • 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

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)
  • Stored Programmes (AREA)

Abstract

提供了用于调试依领域而定的语言的系统和方法。根据实施例,一种这样的系统能够包括web服务器,该web服务器包括虚拟机、调试执行机器以及特定于依领域而定的语言(DSL)的工具接口。web服务器被配置为编译从开发人员计算机接收到的DSL代码。在编译过程中,DSL代码被仪表化为包括从开发人员计算机接收到的调试信息。web服务器还被配置为由虚拟机执行仪表化后的代码。在执行过程中,仪表化后的代码与调试执行机器通信,使得调试执行机器的状态镜像虚拟机的状态。

Description

用于调试依领域而定的语言的系统和方法
背景技术
企业用户正在越来越多地被赋予通过云计算系统开发他们自己的定制软件的能力。典型的企业用户,比如会计师和经理,不是软件开发人员。因此,提供给企业用户以执行软件开发的资源一般被修改成适合特定的问题或业务领域。例如,企业用户可以利用依领域而定的语言(domain specific language,DSL),与诸如Java的通用编程语言相比,这种语言可以包括对于普通企业用户来说用起来更容易更直观的特定业务逻辑。
当软件开发人员编写代码时,开发人员能够在调试模式下编译和执行代码。调试模式允许开发人员通过窗口查看开发人员所写的代码如何执行。当代码在调试模式下执行时,开发人员通常能够:在执行过程中查看变量值、设置代码执行将在其暂停直到开发人员触发继续执行的断点和/或在逐行的基础上单步通过代码的执行。
将DSL用于云中的业务逻辑规范需要创建调试器以支持那些语言。随着基于云的开发增加,DSL及其调试器的数量也增加。如今的调试器的许多功能对所有语言是公用的。例如,调试器可视化控制流并支持机器变量的检查。但是,对于调试器的创建,没有通用的公共体系架构。这造成行业范围内创建调试器的重复工作并且使得在调试器之间缺乏兼容性。
发明内容
提供了用于调试依领域而定的语言的系统和方法。根据实施例,一种这样的系统能够包括web服务器,该web服务器包括虚拟机、调试执行机器以及特定于依领域而定的语言(DSL)的工具接口。web服务器被配置为编译从开发人员计算机接收到的DSL代码。在编译过程中,DSL代码被仪表化(instrument)成包括从开发人员计算机接收到的调试信息。web服务器还被配置为由虚拟机执行仪表化后的代码。在执行过程中,仪表化后的代码与调试执行机器通信,使得调试执行机器的状态镜像虚拟机的状态。本发明的实施例在本文中被描述为利用Java平台调试体系架构(Java Platform DebugArchitecture,JPDA)作为用于为DSL创建调试器的通用的公共体系架构。虽然在本文中具体地参考JPDA和Java平台,但是也可以类似地使用其它调试体系架构。
根据实施例,特定于DSL的工具接口是通过调试执行机器实现的。调试执行机器能够充当调试客户端与执行该代码的虚拟机之间的媒介(intermediary)。此外,调试执行机器能够实现监听器,其中监听器能够从开发人员计算机处的调试接口接收调试请求并向该调试接口发送调试事件。从开发人员计算机接收到的调试信息能够包括设置断点指令、对变量值的请求和继续执行指令中的一个或多个。
在一些实施例中,web服务器从开发人员计算机处的调试客户端接收调试信息,其中调试客户端通过调试接口向web服务器发送调试信息。根据实施例,调试接口能够是Java调试接口(Java DebugInterface,JDI),并且调试接口能够利用Java调试线协议(JavaDebug Wire Protocol,JDWP)与特定于DSL的工具接口通信。
根据实施例,提供了一种用于使一个或多个处理器实现用于调试依领域而定的语言(DSL)代码的方法的计算机程序。计算机程序使一个或多个处理器执行以下步骤:在web服务器处,从包括计算机可读介质和处理器的开发人员计算机接收DSL代码;编译从开发人员计算机接收到的DSL代码;在编译过程中,把DSL代码仪表化为包括从开发人员计算机接收到的调试信息;并且在虚拟机上执行仪表化后的代码,其中,在执行过程中,仪表化后的代码与调试执行机器通信,使得调试执行机器的状态镜像虚拟机的状态。
另一种实施例提供了一种用于调试依领域而定的语言代码的系统,包括:web服务器,该web服务器包括:调试执行机器;用于编译从开发人员计算机接收的DSL代码的编译器,其中,在编译过程中,DSL代码被仪表化为包括从开发人员计算机接收到的调试信息;以及用于执行仪表化后的代码的虚拟机,其中,在执行过程中,仪表化后的代码与调试执行机器通信,使得调试执行机器的状态镜像虚拟机的状态。
在一些实施例中,调试执行机器还包括特定于DSL的工具接口。
在一些实施例中,调试执行机器还包括监听器,该监听器能够被用来建立连接,以从调试接口接收调试请求并向该调试接口发送调试事件。
在一些实施例中,web服务器经由web服务器处的调试接口从开发人员计算机处的调试客户端接收调试信息。调试接口可以是Java调试接口(JDI)。调试接口可以利用Java调试线协议(JDWP)与特定于DSL的工具接口通信。
在一些实施例中,调试信息能够包括设置断点指令、对变量值的请求以及继续执行指令中的一个或多个。
在一些实施例中,web服务器是基于云的开发环境中的多个web服务器之一。
在一些实施例中,开发人员计算机可以利用客户端应用经网络访问基于云的开发环境中的web服务器。
在一些实施例中,调试信息是通过客户端应用经网络接收的。
附图说明
图1示出了用于利用JPDA调试Java代码的系统。
图2根据本发明的实施例示出了用于调试用依领域而定的语言编写的代码的通用调试体系架构。
图3根据本发明的实施例说明了被配置用于编译DSL代码的系统的实施例,其中该系统包括调试功能。
图4根据本发明实施例示出了利用通用调试体系架构进行调试的方法。
图5说明了计算机系统的实施例。
具体实施方式
出于解释的目的,在以下描述中阐述了具体细节,以便提供对本发明的实施例的透彻理解。但是,很显然,本发明实施例在没有这些具体细节的情况下也可以被实践。
企业用户越来越多地能够开发他们自己的软件,比如通过到在云计算环境中托管的开发环境的web接口。因为这些企业用户通常不是软件开发人员,所以软件开发一般是利用依领域而定的语言(DSL)来执行的。DSL提供了特定于特定问题或业务领域的专门功能。相对于诸如Java或C#的通用编程语言,DSL使企业用户能够在较高的层次编程,例如,利用更加用户友好和更容易学习的功能和方法。例如,DSL可以包括使特定于会计或保险的功能能够被执行的表达式。DSL能够利用诸如Groovy的其它语言或平台来开发,Groovy是Java的超集并且因此提供了标准Java实现连同DSL结构的所有功能。应当理解,如本文详细描述的类似的原理可以被应用到其它编程语言和非业务逻辑布置。
除了专用DSL的增殖,还需要附加的软件开发工具来支持企业用户软件开发,比如调试器。如今的调试器的许多功能对所有编程语言是公用的。例如,调试器可视化控制流并支持机器变量的检查。为每种DSL创建新的调试器是昂贵且冗余的行为(exercise)。因而,需要用于创建调试器的通用体系架构。
根据实施例,Java平台调试体系架构(JPDA)能够被定制为充当这种通用的调试器平台。虽然本发明的实施例是参考JPDA来讨论的,但是也能够使用其它调试体系架构。通过利用JPDA创建通用的调试体系架构,现有的JPDA工具也能够供DSL使用。JPFA提供底层体系架构,这使得例如开发人员计算机处的调试客户端(在本文中也被称为调试器)能够与例如web服务器上的虚拟机上执行的程序或过程通信、监视并控制该程序或过程。
图1示出了用于利用JPDA调试Java代码的系统。如图1中所示,系统100能够包括开发人员计算机系统102和web服务器104。JPDA使利用开发人员计算机系统102的开发人员能够调试在web服务器104处执行的代码。JPDA包括若干层:Java虚拟机工具接口(Java Virtual Machine Tooling Interface,JVM TI)106;Java调试线协议(JDWP)108;以及Java调试接口(JDI)110。
JVM TI 106是由虚拟机112实现的接口,被调试的应用在虚拟机112上执行。JVM TI 106定义虚拟机112为调试而提供的服务,比如对信息的请求(例如,当前堆栈帧)、动作(例如,设置断点)和通知(例如,当在执行过程中到达断点时)。在典型的Java调试器中,JVM TI定义用于与JVM交互的接口。在典型的Java开发环境中,执行开发中的代码的Java虚拟机将实现JVM TI,使得JVM能够接收并执行从开发人员系统接收的调试操作。
Java调试接口(JDI)110是由开发人员计算机系统102实现的Java接口,它在用户代码级别定义信息和请求,调试客户端114能够使用这些信息和请求来与虚拟机112通信。Java调试线协议(JDWP)108定义在调试中的程序或过程与调试客户端之间传送的信息和请求的格式。JDWP使调试中的代码116和调试客户端114能够在单独的虚拟机实现和/或在单独的平台上运行。
在图1所示的系统中,开发人员能够利用调试客户端114输入调试指令,例如,设置断点。这种指令从调试客户端传输到JDI 110,然后JDI 110能够利用JDWP 108经网络118把指令发送到web服务器104,在那里它被JVM TI 106接收。当代码116被编译器120编译时,能够利用调试信息仪表化代码116。当虚拟机112执行代码116时,虚拟机112能够检查断点并且当到达一个断点时,能够向开发人员返回通知。该通知能够利用JDWP 108从JVM TI 106发送到JDI 110,然后通过调试客户端114呈现给开发人员。调试客户端与web服务器之间的通信能够类似地继续,直到调试完成。
图2根据本发明的实施例示出了用于调试依领域而定的语言所编写的代码的通用调试体系架构。系统200能够包括与开发人员计算机系统204交互的web服务器202。根据实施例,系统200能够是包括多个开发人员计算机系统和多个web服务器的更大系统的一部分,每个web服务器为一个或多个不同的开发人员计算机系统服务。根据实施例,开发人员计算机系统204能够包括调试客户端208。此外,web服务器202能够包括虚拟机210、调试执行机器212和编译器214。虚拟机210能够执行在开发过程中的DSL代码218,并且调试执行机器212能够实现定制工具接口216和监听器220。开发人员计算机系统204能够经网络222与web服务器202通信。还能够提供调试接口206。根据实施例,调试接口206能够在web服务器202或开发人员计算机系统204上运行。
如图2中所示,DSL调试执行机器212实现像JVM TI的定制工具接口216。在图1所示的示例中,执行被调试的代码的虚拟机实现TI并直接从开发人员接收调试指令。但是,在图2所示的实施例中,调试执行机器212能够充当开发人员与执行代码的虚拟机210之间的媒介。通过实现定制工具接口216,调试执行机器能够与调试接口206和执行DSL代码218的单独执行机器(比如虚拟机210)通信。
根据实施例,通用调试体系架构能够使用JDWP 224作为在调试客户端208与调试执行机器212之间通信的协议。DSL调试器能够实现JDWP监听器220。当调试客户端208被启动时,它能够通过调试接口206建立到监听器的连接。调试执行机器212能够使用该连接从调试接口206接收调试请求并向所述调试接口发送调试事件。JDWP的使用为交互提供了正式的、经过测试的协议,连同在执行机器与任何其它JPDA调试客户端之间的兼容性。根据实施例,DSL调试器能够使用标准的JDI实现作为调试接口。这减少了编写调试客户端所需的工作量。
当DSL程序(比如代码218)被编译时,程序中的DSL指令能够用调试信息仪表化。例如,调试信息能够包括关于表达式执行的信息、或者向调试执行机器212发送诸如变量值的状态信息的指令。根据实施例,调试执行机器212是状态机,并且,当在开发过程中的代码被虚拟机210执行时,仪表化负责启动调试执行机器212中的状态切换。这样,调试执行机器镜像正在执行DSL程序的虚拟机的状态。此外,虚拟机210能够经由代码仪表化与调试执行机器212通信,从而通知调试执行机器212关于表达式评估和变量突变。调试执行机器212能够检查以查看是否为表达式请求了断点,并且如果请求了的话,就挂起虚拟机线程的执行并且利用JDWP通知调试接口206。照此,调试执行机器作为执行代码的虚拟机与开发人员之间的媒介运行。
根据实施例,调试执行机器和定制工具接口能够与一个DSL关联。定制的工具接口能够定义特定于该DSL的服务。为了对不同的DSL提供支持,能够实现特定于该不同DSL的第二调试执行机器和第二定制工具接口。
如上所述,根据实施例,调试客户端208能够经JDWP 224通过调试接口206向web服务器202发送调试信息。在一些实施例中,调试接口可以在开发人员计算机系统204上运行,并且经JDWP 224通过网络222与web服务器202通信。但是,在一些基于云的开发环境中,不是给定服务器的所有端口都可以打开,例如,web服务器202的JDWP端口可能不能打开,或者可用的端口可以从服务器到服务器变化。这在基于云的开发环境中在开发人员计算机系统204与web服务器202之间引起阻止调试指令传输的通信问题。为了解决这个通信问题并且适应这些开发环境,开发人员计算机处的调试客户端208能够经非JDWP应用协议(比如HTTP)通过网络222向在web服务器202中运行的调试接口实现206发送调试信息。web服务器202处的调试接口实现206能够打开与定制工具接口的本地JDWP连接,以便传输从开发人员计算机系统接收到的调试信息。
图3说明了被配置用于编译DSL代码的系统300的实施例,其中该系统包括调试功能。根据实施例,除非另外指出,否则系统300中所示的每个模块都可以是web服务器204的部分。因而,在至少一些实施例中,系统300可以被理解为系统200的一部分。系统300包括各种模块,每个模块都可以利用软件、固件和/或硬件实现。部件包括:代码源模块310、预编译模块315、解析器模块320、变换引擎330、编译器340、虚拟机350以及调试执行机器360。
代码源模块310可以用来接收DSL代码。这种代码可以按编程语言的语法来编写,使得该代码在被编译时,可以在语法树级别被编辑。例如,GROOVY可以用作DSL代码的编程语言。在一些实施例中,代码源模块310可以被配置为从远程计算机系统接收DSL代码,比如经如图2中给出的基于web的接口提交的代码。代码源模块310可以用来访问包括要编译的代码的文件。
预编译模块315可以完成由代码源模块310接收的DSL代码的编译过程的一部分。在一些实施例中,预编译模块315可以在由代码源模块310接收的DSL代码中插入一个或多个表达式。解析器模块320可以解析包含这些表达式的DSL代码,以创建语法树。该语法树可以是抽象语法树。在这个时候,在一些编程语言中有可能在字节码被编译之前修改语法树。
变换引擎330可以修改由解析器模块320创建的语法树。变换引擎330可以添加或修改语法树中的表达式中的一些或全部表达式。无论何时当变量值被修改时,语法树都可以被修改,使得该变量值被输出到调试执行机器360。因而,在执行过程中,调试执行机器360可以维持在DSL代码中存在的每个变量的当前值。开发人员的调试客户端,比如图2中所示的调试客户端208,可以请求变量的值,作为响应,调试执行机器360可以提供该值。可以添加表达式,使得在DSL代码中存在的每个表达式被执行之后,执行被暂停(例如,置于挂起或循环模式),直到从调试执行机器360接收到指令。另外,被执行或者要被执行的表达式的指示可以被提供给调试执行机器360。进而,调试执行机器360可以向开发人员的调试客户端提供什么表达式刚被执行或者要被执行的指示。在允许虚拟机350继续执行之前,调试执行机器360可以等待经由调试客户端来自开发人员的输入。如果开发人员没有指示对特定表达式的断点,则调试执行机器360可以允许DSL代码的执行继续,直到到达开发人员已经对其指示了断点的表达式。
依赖于所使用的DSL,编译器340可以把修改后的语法树编译成更低级别的可执行代码,比如字节码。由代码源模块310接收的DSL代码,作为被预编译模块315和变换引擎330修改过的,可以被编译器340修改。
与调试执行机器360通信的虚拟机350可以执行由编译器340编译过的字节码。对于被变换引擎330修改过的每个表达式,可以咨询调试执行机器360,以确定执行是否应当继续。调试执行机器360还可以从虚拟机350接收变量的值,比如每次当这种变量值可以被修改时。调试执行机器360还可以接收被执行或者要被执行的DSL代码的当前表达式的指示。这种信息可以由调试执行机器360接收。在允许字节码继续被执行之前,调试执行机器360可以请求来自开发人员计算机系统的输入,和/或信息可以经调试客户端由调试执行机器360输出到开发人员(诸如变量值)。
图4根据本发明的实施例示出了利用通用调试体系架构进行调试的方法。在步骤400,web服务器能够从包括计算机可读介质和处理器的开发人员计算机接收DSL代码。这种代码可以以开发人员经基于web的接口提供DSL代码的形式或者通过提供一个或多个包括未编译的DSL代码的文件而被接收。调试注释能够在DSL代码被编译之前添加到DSL代码。注释可以对编译器充当应当调用特定类的指示。注释可以由用户手动添加,或者比如由编译器自动添加。如果GROOVY被用作编程语言,则这种注释可以作为全局或局部变换添加,并且可以在编译步骤被触发,这种触发可以来自命令行,或者来自诸如GroovyShell.parse()的GROOVY API。在一些实施例中,可以使用某种其它触发机制来代替注释,比如:配置开关、属性文件或者环境变量。
在步骤402,DSL代码被编译。依赖于DSL代码的类型,编译能够包括创建语法树。语法树的每个节点可以对应于未编译的DSL代码中的表达式。依赖于所使用的DSL,所使用的DSL还可以允许在语法树被用来编译字节码(或机器代码)或者其它更低级的可执行代码之前编辑语法树。语法树的表达式可以通过解析语法树来识别。另外,可以附加地识别其中变量值可以被修改的表达式。
在步骤404,在编译过程中,DSL代码能够被仪表化。例如,对于每个识别出的表达式,可以添加修改后的表达式或附加的表达式。这种修改后的或者附加的表达式可以使执行被暂停,直到接收到来自调试执行机器的输入、修改后的变量值要被输出到调试执行机器、执行已经在其上开始的语句的指示应当被输出到调试执行机器、和/或语句执行已经完成的指示应当被输出到调试执行机器。一旦DSL代码已经被仪表化,DSL代码就能够完成编译。
在步骤406,编译后的仪表化后的代码能够被执行,例如在虚拟机上。在执行过程中,仪表化后的代码与调试执行机器通信,使得调试执行机器的状态镜像虚拟机的状态。由于从业务逻辑代码创建的语法树中表达式的修改和/或添加,调试功能可以被提供给开发人员。当仪表化后的代码在执行时,虚拟机可以与调试执行机器通信,以例如允许执行表达式并且把变量的值输出到调试执行机器。进而,调试执行机器可以(经定制工具化接口、JDWP和JDI)与开发人员正在使用的调试客户端通信,以访问该调试功能。
图5说明了计算机系统的实施例。如图5所说明的计算机系统可以作为之前描述的计算机化设备的一部分并入。例如,计算机系统500能够表示本申请中所讨论的web服务器、用户计算机系统和开发人员计算机系统的一些部件。图5提供了能够执行由各种实施例提供的方法的计算机系统500的一种实施例的示意性说明。应当注意,图5仅仅是要提供各种部件的普遍说明,这些部件当中任何一个或全部都可以适当地被使用。因此,图5广义地说明了单独的系统元件可以如何以相对分开的或相对更集成的方式来实现。
计算机系统500示为包括能够经由总线505进行电耦合的硬件元件(或者可以以其他方式适当地进行通信)。硬件元件可以包括一个或多个处理器510,包括但不限于一个或多个通用处理器和/或一个或多个专用处理器(比如数字信号处理芯片、图形加速处理器等);一个或多个输入设备515,能够包括但不限于鼠标、键盘等;以及一个或多个输出设备520,能够包括但不限于显示设备、打印机等。
计算机系统500还可以包括一个或多个非瞬时存储设备525(和/或与之通信),非瞬时存储设备525能够包括但不限于本地和/或网络可访问的储存装置,和/或能够包括但不限于盘驱动器、驱动器阵列、光学存储设备、诸如随机存取存储器(“RAM”)和/或只读存储器(“ROM”)的固态存储设备,这些存储设备能够是可编程的、可闪存更新的等。这种存储设备可以配置为实现任何适当的数据存储,包括但不限于各种文件系统、数据库结构等。
计算机系统500还可以包括通信子系统530,它能够包括但不限于调制解调器、网卡(无线或有线)、红外线通信设备、无线通信设备和/或芯片组(诸如BluetoothTM设备、802.11设备、WiFi设备、WiMax设备、蜂窝通信设施等)等等。通信子系统530可以允许与网络(举一个示例,诸如以下所述的网络)、其它计算机系统和/或本文所述的任何其它设备进行数据交换。在许多实施例中,计算机系统500还将包括工作存储器535,如上所述,它能够包括RAM或ROM设备。
计算机系统500还能够包括软件元件,示为当前位于工作存储器535中,包括操作系统540、设备驱动器、可执行库和/或诸如一个或多个应用程序545的其它代码,其中如本文所述,应用程序可以包括由各种实施例提供的计算机程序,和/或可以设计成实现由其它实施例提供的方法和/或配置由其它实施例提供的系统。仅仅作为示例,关于以上讨论的方法所描述的一个或多个过程可以实现为可由计算机(和/或计算机内的处理器)执行的代码和/或指令;然后,在一方面,这种代码和/或指令能够被用来配置和/或修改通用计算机(或其它设备),以执行根据所述方法的一个或多个操作。
这些指令和/或代码的集合可以存储在非瞬时计算机可读存储介质上,比如上述存储设备525。在某些情况下,存储介质可以并入计算机系统(比如计算机系统500)之中。在其它实施例中,存储介质可以与计算机系统分离(例如,可移动介质,比如光盘),和/或在安装包中提供,使得存储介质能够被用来利用存储在其上的指令/代码编程、配置和/或修改通用计算机。这些指令可以采取可由计算机系统500执行的可执行代码的形式,和/或可以采取源和/或可安装代码的形式,这些源和/或可安装代码当在计算机系统500上编译和/或安装时(例如,利用任意各种通常可得的编译器、安装程序、压缩/解压缩实用程序等),采取可执行代码的形式。
对本领域技术人员而言将很明显的是,可以根据具体需求进行实质性的变化。例如,也可以使用定制的硬件,和/或特定的元件可以以硬件、软件(包括诸如小应用程序的可移植软件等)或者二者来实现。另外,可以采用到诸如网络输入/输出设备的其它计算设备的连接。
如以上所提到的,在一方面,一些实施例可以采用计算机系统(诸如计算机系统500)来执行根据本发明的各种实施例的方法。根据一组实施例,此类方法的一些或全部过程由计算机系统500响应于处理器510执行包含在工作存储器535中的一条或多条指令的一个或多个序列(这些指令可以并入操作系统540和/或诸如应用程序545的其它代码中)而执行。这种指令可以从另一计算机可读介质(比如一个或多个存储设备525)读入工作存储器535中。仅仅作为示例,包含在工作存储器535中的指令序列的执行可能使处理器510执行本文所述方法的一个或多个过程。
如在本文所使用的,术语“机器可读介质”和“计算机可读介质”指参与提供使机器以具体方式操作的数据的任何介质。在利用计算机系统500实现的实施例中,各种计算机可读介质可以参与向处理器510提供指令/代码用于执行,和/或可以用来存储和/或承载此类指令代码。在许多实施方式中,计算机可读介质是物理的和/或有形的存储介质。这种介质可以采取非易失性介质或易失性介质的形式。非易失性介质包括例如光盘和/或磁盘,比如存储设备525。易失性介质包括但不限于动态存储器,比如工作存储器535。
物理的和/或有形的计算机可读介质的常见形式包括例如软盘、柔性盘、硬盘、磁带或者任何其它磁性介质,CD-ROM、任何其它光学介质、带孔卡片、纸带、任何其它带有孔图案的物理介质、RAM、PROM、EPROM、FLASH-EPROM、任何其它存储器芯片或盒式磁带,或者计算机能够从其读取指令和/或代码的任何其它介质。
各种形式的计算机可读介质可以参与把一条或多条指令的一个或多个序列运送到处理器510供执行。仅仅作为示例,指令最初可以装载在远程计算机的磁盘和/或光盘上。远程计算机可以把指令加载到其动态存储器中并且经传输介质把指令作为信号发送,以便由计算机系统500接收和/或执行。
通信子系统530(和/或其部件)一般将接收信号,然后总线505可以把信号(和/或由这些信号承载的数据、指令等)运送到工作存储器535,处理器510从工作存储器535检索并执行指令。由工作存储器535接收的指令可以可选地在被处理器510执行之前或之后存储在非瞬时存储设备525上。
以上所讨论的方法、系统和设备是示例。各种配置可以适当地略去、代替或添加各种过程或部件。例如,在备选配置中,方法可以按与所述不同的次序执行,和/或各个阶段可以被添加、略去和/或组合。而且,关于某些配置所述的特征可以在各种其它配置中组合。配置的不同方面和元件可以以类似的方式组合。而且,技术在发展,并且因此,许多元件是示例并且不限制本公开内容或权利要求的范围。
在描述中给出了具体的细节,以提供对示例配置(包括实施方式)的透彻理解。但是,配置在没有这些具体细节的情况下也可以被实践。例如,在没有不必要的细节的情况下,示出了众所周知的电路、过程、算法、结构和技术,以避免使配置不清楚。这种描述仅仅提供示例配置,而不限制权利要求的范围、适用性或配置。更确切地说,之前对配置的描述将为本领域技术人员提供用于实现所述技术的能够操作的描述(enabling description)。在不脱离本公开内容的精神或范围的情况下,可以对元件的功能和布置进行各种改变。
而且,配置可以描述为被绘制为流程图或框图的过程。虽然每种配置都把操作描述为顺序过程,但是许多操作可以并行地或者同时执行。此外,操作的次序可以重新布置。过程可以具有图中未包括的附加步骤。此外,方法的示例可以以硬件、软件、固件、中间件、微代码、硬件描述语言或者其任意组合来实现。当在软件、固件、中间件或微代码中实现时,执行必要任务的程序代码或代码片段可以存储在诸如存储介质的非瞬时计算机可读介质中。处理器可以执行所述任务。
在描述了若干示例配置之后,在不脱离本公开内容的精神的情况下,可以使用各种修改、备选构造和等价形式。修改包括所公开特征的任何相关组合。例如,以上元件可以是更大系统的部件,其中其它规则可以优先或者修改本发明的应用。而且,可以在考虑以上元件之前、期间或之后采取多个步骤。相应地,以上描述不约束权利要求的范围。

Claims (20)

1.一种用于调试依领域而定的语言代码的系统,包括:
web服务器,包括计算机可读介质和处理器,其中所述web服务器包括虚拟机、调试执行机器以及特定于依领域而定的语言(DSL)的工具接口,其中所述web服务器被配置为:
编译从开发人员计算机接收到的DSL代码,其中,在编译过程中,所述DSL代码被仪表化为包括从所述开发人员计算机接收到的调试信息,及
由所述虚拟机执行仪表化后的代码,其中,在执行过程中,所述仪表化后的代码与所述调试执行机器通信,使得所述调试执行机器的状态镜像所述虚拟机的状态。
2.如权利要求1所述的系统,其中特定于DSL的工具接口是由所述调试执行机器实现的。
3.如权利要求1或2所述的系统,其中所述调试执行机器实现监听器,其中所述监听器能够被用来建立连接,以从调试接口接收调试请求并向所述调试接口发送调试事件。
4.如权利要求1至3中任何一项所述的系统,其中所述web服务器经所述web服务器处的调试接口从所述开发人员计算机处的调试客户端接收所述调试信息。
5.如权利要求4所述的系统,其中所述调试接口是Java调试接口(JDI)。
6.如权利要求5所述的系统,其中所述调试接口利用Java调试线协议(JDWP)与所述特定于DSL的工具接口通信。
7.如权利要求1至6中任何一项所述的系统,其中所述调试信息能够包括设置断点指令、对变量值的请求和继续执行指令当中的一个或多个。
8.如权利要求1至7中任何一项所述的系统,其中所述web服务器是基于云的开发环境中的多个web服务器之一。
9.如权利要求8所述的系统,其中所述开发人员计算机利用客户端应用经网络访问所述基于云的开发环境中的web服务器。
10.如权利要求9所述的系统,其中所述调试信息是通过所述客户端应用经所述网络接收的。
11.一种用于调试依领域而定的语言(DSL)代码的方法,包括:
在web服务器处,从包括计算机可读介质和处理器的开发人员计算机接收DSL代码;
编译从所述开发人员计算机接收的所述DSL代码;
在编译过程中,把所述DSL代码仪表化为包括从所述开发人员计算机接收到的调试信息;及
在虚拟机上执行仪表化后的代码,其中,在执行过程中,所述仪表化后的代码与调试执行机器通信,使得所述调试执行机器的状态镜像所述虚拟机的状态。
12.如权利要求11所述的方法,其中所述调试执行机器实现监听器,其中所述监听器能够从所述开发人员计算机处的调试接口接收调试请求并向所述调试接口发送调试事件。
13.如权利要求12所述的方法,其中所述调试执行机器实现特定于DSL的工具接口。
14.如权利要求11至13中任何一项所述的方法,其中所述web服务器经所述web服务器处的调试接口从所述开发人员计算机处的调试客户端接收所述调试信息。
15.如权利要求14所述的方法,其中所述调试接口是Java调试接口(JDI)。
16.如权利要求15所述的方法,其中所述调试接口利用Java调试线协议(JDWP)与所述特定于DSL的工具接口通信。
17.如权利要求11至16中任何一项所述的方法,其中所述调试信息能够包括设置断点指令、对变量值的请求和继续执行指令当中的一个或多个。
18.如权利要求11至16中任何一项所述的方法,其中所述web服务器是基于云的开发环境中的多个web服务器之一。
19.如权利要求18所述的方法,其中所述开发人员计算机利用客户端应用经网络访问所述基于云的开发环境中的web服务器。
20.如权利要求19所述的方法,其中所述调试信息是通过所述客户端应用经所述网络接收的。
CN201380056612.6A 2012-10-30 2013-10-30 用于调试依领域而定的语言的系统和方法 Active CN104756086B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/664,106 US9122794B2 (en) 2012-10-30 2012-10-30 System and method for debugging domain specific languages
US13/664,106 2012-10-30
PCT/US2013/067523 WO2014070902A1 (en) 2012-10-30 2013-10-30 System and method for debugging domain specific languages

Publications (2)

Publication Number Publication Date
CN104756086A true CN104756086A (zh) 2015-07-01
CN104756086B CN104756086B (zh) 2017-12-26

Family

ID=49582819

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201380056612.6A Active CN104756086B (zh) 2012-10-30 2013-10-30 用于调试依领域而定的语言的系统和方法

Country Status (5)

Country Link
US (1) US9122794B2 (zh)
EP (1) EP2915047B1 (zh)
JP (1) JP6280126B2 (zh)
CN (1) CN104756086B (zh)
WO (1) WO2014070902A1 (zh)

Cited By (6)

* 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
CN107092963A (zh) * 2017-03-15 2017-08-25 中山大学 一种基于无模式数据的家电电控知识表达及应用系统
CN110457209A (zh) * 2019-07-16 2019-11-15 阿里巴巴集团控股有限公司 用于调试应用的方法和系统
CN111930478A (zh) * 2020-06-08 2020-11-13 北京每日优鲜电子商务有限公司 基于动态字节码的服务调用方法及装置
CN112765018A (zh) * 2021-01-12 2021-05-07 武汉光庭信息技术股份有限公司 一种仪器仪表调试系统及方法
CN113254164A (zh) * 2021-07-07 2021-08-13 北京航天驭星科技有限公司 卫星测控过程执行任务状态的监控方法及系统、测控系统

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9798524B1 (en) * 2007-12-04 2017-10-24 Axway, Inc. System and method for exposing the dynamic web server-side
US9122794B2 (en) 2012-10-30 2015-09-01 Oracle International Corporation System and method for debugging domain specific languages
US9146834B2 (en) 2013-08-22 2015-09-29 Oracle International Corporation Targeted cloud-based debugging
US10397051B1 (en) 2014-06-20 2019-08-27 Amazon Technologies, Inc. Configuration and testing of network-based service platform resources using a service platform specific language
CN104536838A (zh) * 2014-12-18 2015-04-22 中国电子科技集团公司第三十八研究所 一种具有异步监视功能的远程调试方法及系统
US9471463B1 (en) * 2015-04-16 2016-10-18 International Business Machines Corporation Debug management using dynamic analysis based on state information
US9582294B1 (en) * 2015-08-26 2017-02-28 Mckesson Financial Holdings Apparatuses, methods, and computer program products for automatic internationalization of grammatical output
US10037260B2 (en) 2016-05-31 2018-07-31 Red Hat, Inc. System for expression evaluation at debug time
US10521286B2 (en) * 2017-03-23 2019-12-31 Rathinasabapathy Arumugam System and method for interoperable cloud DSL to orchestrate multiple cloud platforms and services
CN107943690A (zh) * 2017-11-16 2018-04-20 郑州云海信息技术有限公司 一种部署兼容性测试环境的平台及方法
CN108255737A (zh) * 2018-02-27 2018-07-06 郑州云海信息技术有限公司 基于多版本操作系统测试方法、系统及设备和存储介质
US11307964B2 (en) * 2018-11-26 2022-04-19 Red Hat Israel, Ltd. Multi-level debugger
CN111290757B (zh) * 2018-12-10 2023-07-07 阿里巴巴(上海)有限公司 基于Weex的在线代码编译方法、装置及设备
CN111381935A (zh) * 2020-03-17 2020-07-07 北京九州云动科技有限公司 一种基于dsl配置表达式的功能实现方法及系统
CN111752845A (zh) * 2020-06-30 2020-10-09 江苏恒宝智能系统技术有限公司 一种调试工具及其调试方法和系统
US11966343B2 (en) 2021-07-19 2024-04-23 Samsung Electronics Co., Ltd. Universal mechanism to access and control a computational device

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070055957A1 (en) * 2005-09-07 2007-03-08 Richard Birenheide Remote debugging proxy
US20070113218A1 (en) * 2005-11-16 2007-05-17 Sun Microsystems, Inc. Debugging applications at resource constrained virtual machines using dynamically installable lightweight agents
CN101719097A (zh) * 2009-12-24 2010-06-02 深圳市金蝶移动互联技术有限公司 自动化测试脚本的调试方法、系统和自动化应用服务器
US20120185850A1 (en) * 2011-01-18 2012-07-19 Hyeong-Seok Oh Code rearranger and method for rearranging code for a virtual machine

Family Cites Families (50)

* 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
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
WO2001086372A2 (en) 2000-05-12 2001-11-15 Xtreamlok Pty. Ltd. Information security method and system
US6915509B1 (en) 2000-06-28 2005-07-05 Microsoft Corporation Method and system for debugging a program
US6826746B2 (en) * 2001-03-08 2004-11-30 International Business Machines Corporation Debugger probe for object oriented programming
US6966057B2 (en) * 2001-03-30 2005-11-15 Intel Corporation Static compilation of instrumentation code for debugging support
US7873872B1 (en) 2001-07-10 2011-01-18 Versata Development Group, Inc. System and method for remotely debugging application programs
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
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
EP1891520B1 (en) 2005-06-07 2017-09-13 VMware, Inc. Constraint injection system for immunizing software programs against vulnerabilities and attacks
JP4936517B2 (ja) 2006-06-06 2012-05-23 学校法人早稲田大学 ヘテロジニアス・マルチプロセッサシステムの制御方法及びマルチグレイン並列化コンパイラ
US8104021B2 (en) 2006-06-09 2012-01-24 Microsoft Corporation Verifiable integrity guarantees for machine code programs
CN101192193A (zh) 2006-11-27 2008-06-04 国际商业机器公司 用于实现观察点的方法和系统
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
US9686288B2 (en) 2008-01-25 2017-06-20 Ntt Docomo, Inc. Method and apparatus for constructing security policies for web content instrumentation against browser-based attacks
US8555380B2 (en) 2008-02-28 2013-10-08 Intel Corporation Automatic modification of executable code
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
US8839209B2 (en) 2010-05-12 2014-09-16 Salesforce.Com, Inc. Software performance profiling in a multi-tenant environment
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
US9064049B2 (en) 2010-12-14 2015-06-23 Microsoft Technology Licensing, Llc Remote debugging of server side code without blocking or high-level privileges
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
US9027075B2 (en) 2011-09-29 2015-05-05 Oracle International Corporation Enforcing security rules at runtime
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 (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070055957A1 (en) * 2005-09-07 2007-03-08 Richard Birenheide Remote debugging proxy
US20070113218A1 (en) * 2005-11-16 2007-05-17 Sun Microsystems, Inc. Debugging applications at resource constrained virtual machines using dynamically installable lightweight agents
CN101719097A (zh) * 2009-12-24 2010-06-02 深圳市金蝶移动互联技术有限公司 自动化测试脚本的调试方法、系统和自动化应用服务器
US20120185850A1 (en) * 2011-01-18 2012-07-19 Hyeong-Seok Oh Code rearranger and method for rearranging code for a virtual machine

Cited By (9)

* 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
US9514026B2 (en) 2011-09-29 2016-12-06 Oracle International Corporation Debugging analysis in running multi-user systems
CN107092963A (zh) * 2017-03-15 2017-08-25 中山大学 一种基于无模式数据的家电电控知识表达及应用系统
CN110457209A (zh) * 2019-07-16 2019-11-15 阿里巴巴集团控股有限公司 用于调试应用的方法和系统
CN111930478A (zh) * 2020-06-08 2020-11-13 北京每日优鲜电子商务有限公司 基于动态字节码的服务调用方法及装置
CN112765018A (zh) * 2021-01-12 2021-05-07 武汉光庭信息技术股份有限公司 一种仪器仪表调试系统及方法
CN112765018B (zh) * 2021-01-12 2022-09-13 武汉光庭信息技术股份有限公司 一种仪器仪表调试系统及方法
CN113254164A (zh) * 2021-07-07 2021-08-13 北京航天驭星科技有限公司 卫星测控过程执行任务状态的监控方法及系统、测控系统
CN113254164B (zh) * 2021-07-07 2021-10-08 北京航天驭星科技有限公司 卫星测控过程执行任务状态的监控方法及系统、测控系统

Also Published As

Publication number Publication date
US9122794B2 (en) 2015-09-01
WO2014070902A1 (en) 2014-05-08
JP6280126B2 (ja) 2018-02-14
US20140123116A1 (en) 2014-05-01
JP2015533007A (ja) 2015-11-16
EP2915047A1 (en) 2015-09-09
EP2915047B1 (en) 2019-12-11
CN104756086B (zh) 2017-12-26

Similar Documents

Publication Publication Date Title
CN104756086A (zh) 用于调试依领域而定的语言的系统和方法
US10841185B2 (en) Platform-integrated IDE
US8166448B2 (en) Rapid development of distributed web service
US20080320071A1 (en) Method, apparatus and program product for creating a test framework for testing operating system components in a cluster system
US20160188450A1 (en) Automated application test system
CN105260315A (zh) 一种在嵌入式系统进程中调试日志的方法
CN102667730A (zh) 设计时调试
US9965257B2 (en) Automatic configuration of project system from project capabilities
WO2023061874A1 (en) Checking source code validity at time of code update
US9223683B1 (en) Tool to analyze dependency injection object graphs for common error patterns
CN109901985B (zh) 分布式测试装置及方法、存储介质和电子设备
CN112148278A (zh) 可视化的区块链智能合约框架及智能合约开发部署方法
US8762781B2 (en) Method and apparatus useful in manufacturing test case operations
US8359579B2 (en) Monitoring dynamic aspect oriented applications at execution time
US11263115B2 (en) Problem diagnosis technique of memory corruption based on regular expression generated during application compiling
US11182272B2 (en) Application state monitoring
Andersson et al. XP with Acceptance-Test Driven Development: A rewrite project for a resource optimization system
US11947966B2 (en) Identifying computer instructions enclosed by macros and conflicting macros at build time
KR20130020135A (ko) 통합 개발 환경에서의 코드 동시 개발자 리스트 제공 시스템 및 방법
WO2023038715A1 (en) Hot reloading a running application with an unsaved source code change
US20220058004A1 (en) Source code analysis to map analysis perspectives to events
Kudrjavets et al. Who Ate My Memory? Towards Attribution in Memory Management
Shereda et al. DAAP (Data Analytics Application Profiling)
CN114647413A (zh) 一种代码处理方法以及相关设备
CN117785141A (zh) 一种基于公共目录的项目开发方法、装置、设备及介质

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