专利名称:调试流水线的制作方法
调试流水线背景计算机代码可以在各种环境中执行,例如,脚本代码由解释器执行,编程代码在运行时环境中执行,等等。而且,计算机代码的调试可以使用各种平台和协议以各种方式执行。通常,用户可以使用应用开发和执行框架来开发代码,其也可以包括用于调试代码的调试工具。或者,调试工具可以是被设计成在特定的编程或执行环境中以特定的计算机语言工作的分开的组件。此外,调试可以在执行期间执行,或者使用从代码执行创建的日志文件来执行。计算机程序应用的用户和开发者通常认为需要调试应用中的代码。例如,被设计成在主应用中运行的宏的开发者可能希望在发布或使用前调试代码。执行调试任务可由主应用的执行环境支持,但用户可能希望在执行环境之外使用调试工具。概述提供本概述以便以简化形式介绍将在以下的具体实施方式
中进一步描述的一些概念。本概述并不旨在标识出所要求保护的主题的关键因素或必要特征,也不旨在用于限定所要求保护的主题的范围。尽管调试工具可以提供计算机代码(例如,脚本代码、编程语言代码、中间语言代码和机器语言代码)的调试,但它们一般限于与特定类型的代码或语言和/或特定的平台一起操作。通常,主应用的用户可以开发要在主应用中运行的代码,例如宏,并且可能希望调试所开发的代码。现有的调试应用编程接口(API)通常需要用于相应的调试场景的自定义解决方案,而难以解决各种场景,例如,商业应用可能遭遇的情况。目前没有跨平台、操作系统和语言的标准化解决方案。这里提供了一个或个技术和/或系统用于便于可能在主应用的执行环境之外的调试工具对计算机代码进行调试,并且包括应用于和主应用的平台不同的平台的功能。例如,在计算机代码可能驻留在用于编译和执行主应用以得到所开发的代码的执行环境中时,这里提供的技术和系统可允许使用不同的执行环境专有的调试工具对计算机代码进行
调试ο在一实施例中,可以设计系统,以便于用主存在执行环境之外的调试工具对主存在该执行环境内的计算机代码进行调试。在一执行环境中,生产者(例如运行脚本代码引擎的浏览器)可以发布调试流水线,调试流水线实现一组调试协议以便在执行环境中对计算机代码进行调试。例如,用户可以书写要被脚本引擎编译和执行的脚本代码,脚本引擎可以发布流水线以实现用于用户代码的一组调试协议。而且,在该实施例中,调试流水线可以使用接口对象将调试流水线展示给执行环境之外的消费者。在生产者的执行环境之外的消费者(例如调试工具)可以使用调试流水线在执行环境中对计算机代码进行调试。此外,在该实施例中,该组协议可以允许消费者进行计算机代码的调试。协议可以包括语言不可知协议(例如独立于特定的计算机语言),语言不可知协议能提供语言中立调试,例如允许来自各种计算机语言的调试请求。而且,协议可以包括操作系统不可知协议(例如独立于特定的操作系统),操作系统不可知协议可以对相应的签名中的计算机代码语言类型进行处理而不展示操作系统特定的构造。此外,协议可以包括可以提供彼此隔离的多个调试流水线的隔离协议。为实现上述和相关目的,以下描述和附图阐述了各个说明性方面和实现。这些方面和实现仅指示可可以使用一个或多个方面的各种方式中的一些。结合附图阅读以下详细描述,则本发明的其他方面、优点、以及新颖特征将变得显而易见。附图描述
图1是便于用主存在执行环境之外的调试工具对主存在该执行环境内的计算机代码进行调试的示例性系统的组件图。图2是示出实现调试接口以便使生产者组件对于用户可调试的消费者组件的图。图3是示例性环境的说明,其中可以使用过滤器来链接远程的生产者和消费者。图4是示出可以实现这里描述的示例性系统的各方面的示例性环境的图。图5是便于用主存在执行环境之外的调试工具对主存在该执行环境内的计算机代码进行调试的示例性方法的流程图。图6是一示例性环境的说明,其中可以实现便于用主存在执行环境之外的调试工具对主存在该执行环境内的计算机代码进行调试的方法。图7是包括被配置成实施这里所阐述的供应中的一个或多个的处理器可执行指令的示例性计算机可读介质的图示。图8示出了其中可以实现此处所阐述的实施方式中的一种或多种的示例性计算环境。详细描述现在参考附图来描述所要求保护的主题,所有附图中使用相同的附图标记来指代相同的元素。在以下描述中,为解释起见,阐明了众多具体细节以提供对所要求保护的主题的全面理解。然而,很明显,所要求保护的主题可以在没有这些具体细节的情况下实施。在其他情况下,以框图形式示出了各个结构和设备以便于描述所要求保护的主题。图1是包括便于用主存在执行环境之外的调试工具对主存在该执行环境内的计算机代码(例如用户开发的脚本代码)进行调试的示例性系统100的组件图。例如,用户可以书写要由浏览器(例如hternet Explorer)中运行的脚本引擎(例如可以在运行时编译和执行脚本代码的脚本解释器)执行的脚本代码。在该实施例中,示例性系统100可用于促使调试工具(例如诸如应用开发平台的调试器等富客户端调试器引擎)能够调试脚本弓I擎所执行的用户脚本代码。应当理解,主存于执行环境中的计算机代码不限于用户开发的代码。例如,在一实施例中,计算机代码可由脚本书写引擎开发,用户或另一机器可能希望调试引擎所写的代码。在另一实施例中,第一用户可以开发要在执行环境中执行的代码,第二用户可能希望调试用户开发的代码。预期本领域的技术人员可以设计替代的实施例来使用这里描述的系统。系统和技术不限于上述实施例。在一实施例中,计算机代码可以主存在和调试工具在同一进程中操作的执行环境中。例如,用户可以书写要由主应用执行的宏的脚本代码,示例性系统100可便于使用调试器引擎对来自运行在同一机器上的分开的开发平台的用户脚本代码进行调试。在另一实施例中,主存计算机代码的执行环境可以操作在第一远程服务器上,调试工具可以位于第二远程服务器或用户的机器上。例如,在该实施例中,示例性系统100可便于使用调试工具对计算机代码进行远程调试。在图1中,示例性系统包括部署在执行环境102中的生产者组件104。生产者组件 104可以被配置成发布一调试流水线106,调试流水线106可以被配置成链接调试进程的各阶段。例如,调试流水线106可以是把生产者组件104(例如脚本代码解释器)和消费者组件112(例如调试工具)相链接154以便于调试用户开发的代码152的软件架构。应当理解,这里描述的技术和系统不限于上述实施例。预期本领域的技术人员可以设计替代的生产者组件,它们能充当使用户编译和执行所开发的代码的计算机应用或软件框架,还预期这里的技术和系统包括这些替代的生产者组件。例如,示例性系统100可以使用适配器、脚本代码调试器、应用转储文件阅读器和其他组件作为生产者组件。调试流水线106包括调试流水线接口对象110,其可以被配置成将调试流水线106 展示给执行环境102之外的消费者组件112。在一实施例中,生产者组件104可以通过使流水线接口对象110对消费者可用、来实现调试流水线106,消费者组件112可以通过使用调试流水线接口对象110以链接IM到流水线并在流水线内运作从而使用调试流水线106。例如,在该实施例中,生产者组件104可以在系统上发布调试流水线,使接口对象 110对该系统上的消费者组件112可用,诸如富客户端开发平台(如Visual Studio ). 在该例中,富客户端开发平台的用户可以标识哪些生产组件104发布了流水线(例如通过检查系统上的列表),并且通过使用流水线接口对象110把调试流水线使用到富客户端开发平台。这样,在该例中,生产者可以通过调试流水线106链接巧4到调试器,允许富客户端调试器在流水线内运作以便对用户开发的代码152进行调试。而且,调试流水线接口对象110可以被配置成实现一组调试协议108。调试协议 108被配置成用执行环境102之外的消费者组件112来定义该执行环境内的计算机代码 152的调试体验。例如,调试协议108可以是定义调试流水线106的配置文件,用于对链接在流水线中以便与用户代码102的特定要求一起操作的组件进行配置。该组调试协议108包括语言不可知协议114,语言不可知协议114可以被配置成允许在至少两个计算机脚本语言的至少一个中对计算机代码的调试请求进行处理。在一个实施例中,实现语言不可知协议114(例如独立于特定的计算机语言)可以允许消费者组件在语言语义级进行操作。在该实施例中,调试流水线接口对象110可以包括在比计算机语言高的抽象级别进行操作的应用编程接口(API)。例如,在该实施例中,在特定的语言可以使用特定代码在调试期间请求栈帧的情况下,API可以允许将调试请求抽象到其语义部分 (含义),并且“获得栈”和对于该请求返回“这里是栈”。该组调试协议108还包括操作系统不可知协议116(例如独立于特定的操作系统),操作系统不可知协议被配置成允许对相应的签名中的计算机代码语言类型进行处理而不展示操作系统特定的构造。在一个实施例中,实现操作系统不可知协议116可以允许将调试流水线106与诸如进程和线程等操作系统概念隔开。在该实施例中,调试流水线106 不会展示操作系统构造,诸如进程标识符和操作系统句柄。例如,调试流水线的第一实现可以对整个进程进行调试,而调试流水线的第二实现可以对单个线程、线程的子集或者产生多个进程的状态机(诸如分布式系统)进行调试。
该组调试协议108还包括隔离协议118,隔离协议118被配置成将第一调试流水线与一个或多个第二调试流水线隔开。在一个实施例中,单个调试流水线可以描述单状态机器,并且对计算机代码的目标调试之外的代码没有影响。这样,例如,用于对主应用中运行的用户开发的代码进行调试的调试流水线不会影响在主存该用户代码的机器上运行的其他应用,并且不影响主进程。在图1中,示例性系统100还包括消费者组件112,消费者组件112位于生产者组件104的执行环境102之外并且可以被配置成在执行环境102中对计算机代码152进行调试154。例如,消费者组件112可以是向计算机代码提供某种形式的调试体验的工具类型。 在该例中,调试工具可以使用流水线接口 110 (例如,从URL提取接口并且将其连线到调试工具中的控件)以便链接到生产者组件104所实现的调试流水线106,从而使用调试协议 108对计算机代码152进行调试154。在一个实施例中,消费者组件112可以是作为富客户端应用开发平台的一部分的调试工具。例如,开发平台的用户可以将富客户端应用开发平台的调试工具“连线(wire up)”到流水线接口,从而将调试工具连线到生产者104。在另一实施例中,消费者组件112 可以是包括调试工具的浏览器。例如,用户可以使用浏览器以链接到流水线接口,以便将来自浏览器的调试工具与生产者相链接以便用该工具进行调试。应当理解,这里描述的技术和系统不限于上述实施例。预期本领域的技术人员可以设计能充当调试流水线的调试工具的替代消费者组件,并且这里描述的技术和系统包括这些替代的消费者组件。例如,示例性系统100可以使用命令行外壳、自动化工具、进程中控件和其他组件作为消费者组件。—方面,使用调试流水线来从执行计算机代码的组件链接到调试工具可允许各种进程对于各种工具来说可调试。例如,用户可以使用本地浏览器来访问在云服务器上运行的应用。云应用可以是生产者将URL中的链接发布给流水线接口,它可被浏览器插件控件所拾取(例如被浏览器的用户)。在该例中,通过使用流水线,与浏览器插件相关联的调试工具现在可以查询云应用以获得对于云应用中运行的计算机代码的调试信息。图2是示出各种消费者组件222可如何实现与调试浏览器相关联的调试接口 210 以便使各种生产者组件212对于用户来说可调试的图200。目前,存在用于相应的调试场景、用于相应的专有执行平台、甚至用于相应的计算机语言的调试协议。然而,通过使用具有调试接口 210的调试流水线,可以组合各组件以得到调试体验。例如,常用的生产者组件212可以包括脚本解释器208,后者可以在运行时在执行环境中实现以便编译和执行用户脚本代码。而且,生产者212可以包括日志文件阅读器 206,用户可以访问后者以便在他们的代码已被执行后进行调试。此外,生产者可以包括现有调试协议上的适配器202。消费者组件222可被用作生产者212的调试工具,如果消费者组件222使用所发布的调试流水线212,他们可能没有兼容的调试协议。在一实施例中,调试流水线可由生产者(例如所发布的)用方法(例如,对于》1约有三十种方法)来实现,所述方法向生产者 212提供消费者组件222调试功能。例如,富客户端调试引擎216(例如Visual Mudio 调试器)可以使用调试接口以链接到调试流水线210。流水线210可以包括适当数目的方法,它们允许富客户端调试引擎216对于脚本解释器(例如Jav必cript 解释器)中运行的计算机代码的调试体验。而且,在另一例中,基于浏览器的调试插件218或命令行外壳220可以链接到调试流水线210 以便对生产者所使用的计算机代码进行调试。此外,可以应用过滤器组件214以便将调试流水线从第一条件变换到第二条件。 例如,过滤器214可以接收226由生产者212所发布的调试流水线210,向其应用变换(例如添加或删除内容),并且返回新的流水线实现224。从消费者组件的观点,过滤器214可以仅仅是另一个生产者,在从生产者212或从过滤器214获得流水线之间不存在区别。可以出于各种目的使用过滤器,例如,用于将流水线远程连接至代理服务器、创建安全“只读” 过滤器、或者删除应用的特定部分对消费者的可访问性。一方面,调试流水线接口允许创建在流水线周围的过滤器。在一实施例中,调试对象可能不需要到其父辈的反向指针。例如,这使过滤器能够与其原始流水线共享调试对象, 而无须完整地包裹整个流水线接口表面。在另一实施例中,过滤器可以创建在相应的数据片段周围的代理,并将代理上的请求转发至底层真实对象。然后,代理可以无视期望的行为,例如通过使可以修改诸如设置值等目标的API发生故障。在一实施例中,在这一方面,流水线可以使用过滤器来远程连接。图3是示例性环境300的说明,其中可以使用过滤器来链接远程的生产者和消费者。在该示例环境中,远程连接流水线302可以在流水线边界308的生产者一侧上运行自定义的过滤器310。过滤器 310可以在将数据发送至流水线边界308的消费者一侧上的远程代理312之前,预先过滤该流水线。例如,过滤器310可用于筛选出不期望的调试事件或者处理有条件的断点,以及将数据远程连接至远程代理312。在示例环境300中,远程过滤器310消费来自生产者304的流水线接口。过滤器 310可以对远程代理312使用专用远程连接协议以便跨过远程连接边界308。在一实施例中,专用协议可以被设计成减少“网络闲谈(chattiness) ”并且与远程代理312中的高速缓存状态协作。例如,可以在远程连接过滤器中实现“发布”和“连接”功能,它们共享允许任意的渴望获取和高速缓存的专用协议。然后,远程代理312可以将流水线接口展示给消费者306,后者可以实现该接口以便在远程连接流水线302内操作的调试流水线中运作。在另一方面,如上面图1所述,调试流水线接口对象被配置成实现一组调试协议。 调试协议被配置成用执行环境之外的消费者组件来定义该执行环境内的计算机代码的调试体验。调试协议还可以包括位置协议,后者可被配置成使计算机代码中的位置在调试期间被引用而无须知道底层的被调试者操作。例如,流水线可以在源文件抽象级操作,并且提供没有显式的符号概念的源文件内容。一般而言,例如,编译器知道源文件如何已被编译、产生大映射文件、以及CPU可以如何映射回源级状态。在该例中,可能由调试器来找到原始源文件并且进行映射。在一实施例中,可以使用“源跨度”的概念来解决引用。在该实施例中,可以使用“文档”来引用源单元,“跨度”是指“文档”中的特定位置。在该实施例中,“文档”可能有它们自身的语义标志,提供它们自身的内容,并且可以引用磁盘或存储器中的文本流上的位置。而且,“跨度”可以是调试流水线接口对象(例如流水线API)引用用户代码的位置的通用方式。跨度可以具有到它被包含其内的文件的反向指针,给定一文件,可以查找该文件内的跨度。在该实施例中,调用栈可以提供跨度,流水线可以允许有效源文件的枚举。因此,例如,消费者可以在源级调试计算机代码,而无须知道底层的被调试者操作是什么,诸如中间语言代码、本机代码、解释器状态。图4是示出可以实现“跨度106的示例性环境400的图。主存控件402可能希望能诸如在断点处显示源文件,以便突出显示映射到该断点的源行。调试流水线知道它是否到达了断点(例如,在它引起调试事件时),例如,因此它知道线程并且能枚举帧410。从帧 410可以检取452跨度406,跨度406能告知帧410所对应的用户代码中的当前位置。如上所述,在示例性环境400中,跨度406具有到它所位于的文档404的反向指针 456,还使用该反向指针在其在文档中的位置处检取文档内容454。在跨度406位置处的文档404的内容可以为控件402示出458,例如,突出显示跨度406的文档的当前行。而且,在该示例性环境400中,脚本引擎408可以向用户代码中的相应文档404提供访问功能450。例如,跨度可以是用于引用用户代码中的位置的“方式”。在该实施例中, 跨度可以是自描述的,它可能不需要接触文件的内容以检取源信息。在该例中,该特征在 “运行时(on-the-fly) ”创建时是有用的,可能没有可用于检取的文件。在这一方面,调试协议还包括类型-总体不可知协议,后者可被配置成允许数据检查调试请求返回所请求的数据,而不展示数据布局或数据类型。当前的调试API可能需要调试器理解数据的底层布局以及描述该数据的类型系统。例如,典型的调试器可能需要知道数据片段是阵列类型(例如,与原语类型或复合类型相对)。而且,在该例中,调试器可能需要具有富API以便对用户代码中的数据的类型总体特别地解码。然而,在一实施例中,使用类型-总体不可知协议使得调试流水线接口对象(例如接口 API)更为抽象并且以自描述的方式呈现数据,而无须类型-总体。例如,所检查的相应的值可以被呈现为字符串,并且枚举它们的子值。因此,在该例中,不需要数据类型,因为值仅仅是包括为检查而请求的值而无须数据类型的字符串。另一方面,在一实施例中,调试流水线接口对象可以包括调试工具功能实现器,后者可被配置成实现来自调试工具的一个或多个调试工具功能,用于对执行环境中的计算机代码进行调试。例如,尽管消费者组件可以是调试工具,但可以使用调试流水线接口对象来实现调试工具的对计算机代码的调试功能。在一实施例中,调试工具功能可以包括一般由调试工具的用户使用的那些功能, 诸如被配置成提供调试事件的同步流的功能;用于在调试期间停止和继续被调试者;用于在调试期间异步停止事件;用于在状态机内枚举线程;检查值;执行控件操作;枚举线程的调用栈;检查相应栈帧中的本地值;获取源文件;以及表达式求值。应当理解,这里描述的技术和系统不限于上面枚举的调试功能。预期本领域的技术人员可以设计替代的调试功能用于在调试流水线接口对象中实现。例如,大多数调试工具包括比上面列出的多得多的调试功能。可以设计这样的一种方法,其中用户能够使用来自执行环境之外的调试工具对该环境中执行的计算机代码进行调试。图5是便于用主存在执行环境之外的调试工具对主存在该执行环境内的计算机代码进行调试的示例性方法500的流程图。示例性方法500在 502开始,并且包括在504实现链接一组件的调试流水线,用户可能希望该组件对于调试工具是可调试的。例如,如果用户正在脚本解释器中执行用户开发的代码,他们可能希望使用在利用该解释器的当前执行环境中不可用的调试工具来调试该代码。在该例中,可以实现调试流水线以便把解释器链接到期望的调试工具。在506,实现调试流水线包括从期望被调试的第一组件(例如用户开发的代码的执行平台)创建调试流水线接口对象的实例。例如,用户希望它为可调试的第一组件可以通过使调试流水线接口对象的实例可用(例如,经由网页上的URL使其可用),来发布流水线。在508,实现调试流水线包括消费所述调试流水线接口对象(例如,拾取接口)的第二组件,包括期望的调试工具。例如,为了在期望被调试的组件和调试工具之间创建链接,调试工具可以从期望被调试的组件拾取调试流水线接口对象。在示例性方法500中,在510,实现用于调试体验的调试流水线协议。例如,为了使用调试流水线来调试计算机代码,实现特定的流水线协议。在512,使用语言不可知体系结构来允许对至少两种计算机语言的至少一种的计算机代码的调试请求进行处理。例如,使用该体系结构允许对各种计算机语言和脚本代码中的任一种的计算机代码进行调试,而无论流水线中链接的调试工具。在514,使用操作系统不可知体系结构来允许对相应的签名中的计算机代码语言类型进行处理,而不展示操作系统特定的构造。例如,使用该体系结构创建了操作系统(OS) 特定的构造以上的抽象级;从而允许OS不可知方案,其中为特定OS设计的调试工具可以允许对在不同的OS中执行的计算机代码进行调试。在516,使用隔离协议来将第一调试流水线与一个或多个第二调试流水线隔离开。 例如,将一个流水线与另一个流水线隔离可以包括描述单状态机的单个流水线,各单独的流水线保持分开。这样,在该例中,流水线可能不干扰调试体验以外的代码。在示例性方法500中,在518,使用调试流水线所链接的调试工具在主存于执行环境中的计算机代码内执行调试功能。例如,一旦在执行计算机代码的组件和执行环境之外的调试工具之间链接了流水线,用户就可以使用该调试工具对它们的代码执行调试请求, 在调试流水线中实现调试协议。在一实施例中,可以对调试流水线应用过滤。在该实施例中,过滤可以包括使过滤组件来消费调试流水线接口对象(例如,而不是此点处的调试工具)。一旦过滤器消费了调试流水线接口对象,它就可以通过将流水线从第一条件改变为第二条件来向流水线应用变换。例如,用户可能希望允许第二人对某些用户开发的代码执行调试。在该例中,用户可能不希望第二人浏览应用的特定元素,或者可能不希望他们对代码作出任何改变。用户可以应用过滤器,该过滤器可以变换流水线以便仅允许对系统特定部分的访问,或者可能仅允许“只读”功能。在该实施例中,在应用变换之后,过滤器可以向诸如调试工具这样的消费者组件展示经变换的调试流水线接口对象。这样,过滤器组件对于流水线的消费者来说可能看上去仅仅是调试流水线生产组件。在一例中,过滤器可以是远程连接代理,它可以应用远程连接协议以便将流水线接口对象展示给远程代理。这样,在该例中,在远程连接代理的另一侧,远程代理然后可以向诸如调试工具等消费者组件展示流水线接口对象。另一方面,调试流水线可以包括可以实现调试工具的调试功能的一系列方法。例如,对于调试常用的、并且可由调试流水线实现的一些调试功能包括提供调试事件的同步流;调试期间被调试者的停止和继续;调试期间事件的异步停止;值的检查;以及控制操作的执行。应当理解,调试流水线可以实现许多替代的调试特征来为例如计算机代码提供期望的调试体验。另一方面,在一实施例中,实现调试流水线协议还可以包括使用源位置不可知体系结构以便在调试期间引用计算机代码中的位置、而无须知道底层被调试者操作。例如,调试器可以使用跨度来标识文档中的代码,而不是依赖于大映射文件和底层源级状态。在该例中,较高的抽象级允许跨度是自描述的,使得能仅仅从一个帧检取数据,而无须接触源文件的内容。而且,在另一实施例中,实现调试流水线协议还可以包括使用类型-总体不可知体系结构,使数据检查调试请求返回所请求的数据,而不展示数据布局或数据类型。在该实施例中,例如,调试协议允许以自描述的方式呈现数据,而无须知道数据类型。在该例中,对位置中的数据的请求可以将该数据返回为字符串,而无须知道它是否是特定类型。另一方面,可以将两个或更多调试流水线合成到一个调试流水线中,以便为相应的流水线呈现统一的调试体验。合成两个或更多个流水线可以包括创建父流水线,父流水线对相应的子调试流水线的相应特征进行合成。例如,“Compose () ”功能可以创建新的流水线实现(Parent (父)),后者对调试流水线接口对象的实现将接口所展示的相应调试特征的相应“子流水线”进行合成。在一实施例中,Parent可以返回一调试事件流,其中Parent可以自旋相应的 ChiIdren (子)的线程,使Children等待调试事件,并且当一个Child(子)获得调试事件时,Parent可以对其他的子进行异步断开请求,然后将从相应的子收集到的调试事件返回至请求的调用者。其他实施例可以包括对源文件或线程、统一的线程和调用栈等等的枚举。另一方面,调试适配器可以通过用轻量应用编程接口(API)操纵现有的解释器来创建。在一实施例中,可以将包括少量调试功能的API操纵到现有的解释器中,以创建可产生全调试流水线的适配器。功能可以包括诸如语句间的步进、插入对回迹的回调等基本调试特征,并且使解释器能容易地被操纵并且通过实现API的流水线消费者获得全调试支持。图6是一示例性环境600的说明,其中可以实现便于用主存在执行环境之外的调试工具对主存在该执行环境内的计算机代码进行调试的方法。用户610可以经由因特网 606、使用他们的本地机器608来访问主存在远程应用服务器602上的应用。例如,用户610 可以开发要在远程服务器602上的主应用中运行的宏,并且可能希望使用位于他们的本地机器608上的调试工具来调试该宏。在该示例性环境中,远程应用服务器(例如生产者)可以通过放置到网站604上的调试流水线接口对象的链接,来发布调试流水线。然后,用户610可以通过将控件从他们的本地机器608上的调试工具“连线至”位于网站604上的接口对象,经由因特网606来实现流水线接口对象。这样,通过使用位于用户的本地机器608上的调试工具,可以向用户 610提供用于他们在远程服务器602上运行的宏的调试工具。再一实施例涉及包括被配置成实现此处所呈现的技术中的一种或多种的处理器可执行指令的计算机可读介质。可以用这些方式设计的一种示例性计算机可读介质在图7 中示出,其中实现700包括其上编码有计算机可读数据706的计算机可读介质708(例如, CD-R、DVD-R、或硬盘驱动器盘片)。该计算机可读数据706又包括被配置成根据此次阐述的原理中的一个或多个来操作的一组计算机指令704。在一个这样的实施例702中,处理器可执行指令704可被配置成执行一种方法,诸如例如,图5的示例性方法500。在另一个这样的实施例中,处理器可执行指令704可被配置成实现一种系统,诸如例如,图1的示例性系统100。本领域普通技术人员可以设计可被配置成根据此处描述的技术操作的许多这样的计算机可读介质。尽管用结构特征和/或方法动作专用的语言描述了本主题,但可以理解,所附权利要求书中定义的主题不必限于上述具体特征或动作。更确切而言,上述具体特征和动作是作为实现权利要求的示例形式公开的。如在本申请中所使用的,术语“组件”、“模块”、“系统”、“接口 ”等等一般旨在表示计算机相关的实体,其可以是硬件、硬件和软件的组合、软件、或运行中的软件。例如,组件可以是,但不限于是,在处理器上运行的进程、处理器、对象、可执行码、执行的线程、程序和 /或计算机。作为说明,运行在控制器上的应用程序和控制器都可以是组件。一个或多个组件可以驻留在进程和/或执行线程中,并且组件可以位于一个计算机内和/或分布在两个或更多的计算机之间。此外,所要求保护的主题可以使用产生控制计算机以实现所公开的主题的软件、 固件、硬件或其任意组合的标准编程和/或工程技术而被实现为方法、装置或制品。如这里所使用的术语“制品”可以包含可以从任何计算机可读的设备、载体或介质进行访问的计算机程序。当然,本领域的技术人员将会认识到,在不背离所要求保护的主题的范围或精神的前提下可以对这一配置进行许多修改。图8以及下面的讨论提供了用于实现这里所阐述的供应中的一个或多个的实施方式的合适计算环境的简要概括描述。图8的操作环境只是合适的操作环境的一个示例, 并且不旨在对操作环境的使用范围或功能提出任何限制。示例计算设备包括,但不限于,个人计算机、服务器计算机、手提式或膝上型设备、移动设备(诸如移动电话、个人数字助理 (PDA)、媒体播放器等等)、多处理器系统、消费电子产品、小型计算机、大型计算机、包括上面的系统或设备的中的任何一种的分布式计算环境等等。尽管并非必需,但各实施例在由一个或多个计算设备执行的“计算机可读指令”的一般上下文中描述。计算机可读指令可以通过计算机可读介质来分发(下面将讨论)。计算机可读指令可被实现为执行特定任务或实现特定抽象数据类型的程序模块,诸如函数、 对象、应用程序编程接口(API)、数据结构等等。通常,计算机可读指令的功能可按需在各个环境中组合或分布。图8示出了包括被配置成实现此处所提供的一个或多个实施例的计算设备812的系统810的示例。在一种配置中,计算设备812包括至少一个处理单元816和存储器818。 取决于计算设备的确切配置和类型,存储器818可以是易失性的(如RAM)、非易失性的(如 ROM、闪存等)或是两者的某种组合。该配置在图8中由虚线814来例示。在其它实施例中,设备812可以包括附加特征和/或功能。例如,设备812还可以包括附加存储(例如,可移动和/或不可移动),其中包括但不限于磁存储、光存储等等。这样的另外的存储在图8中由存储820示出。在一个实施例中,用于实现此处所提供的一个或多个实施例的计算机可读指令可以在存储820中。存储820还可以储存实现操作系统、 应用程序等的其它计算机可读指令。可以在存储器818中加载计算机可读指令以供例如处理单元816执行。
此处所使用的术语“计算机可读介质”包括计算机存储介质。计算机存储介质包括以用于存储诸如计算机可读指令或其他数据之类的信息的任何方法或技术实现的易失性和非易失性、可移动和不可移动介质。存储器818和存储820都是计算机存储介质的示例。计算机存储介质包括,但不限于,RAM、R0M、EEPR0M、闪存或其他存储技术,CD-ROM、数字多功能盘(DVD)或其他光存储、磁带盒、磁带、磁盘存储或其他磁存储设备,或可以用来存储所需信息并可以被计算设备812访问的任何其他介质。任何这样的计算机存储介质可以是设备812的一部分。设备812还可以包括允许设备812与其他设备进行通信的通信连接826。通信连接拟6可以包括,但不限于,调制解调器、网络接口卡(NIC)、集成网络接口、射频发射机/接收机、红外线端口、USB连接,或用于将计算设备812连接到其他计算设备的其他接口。通信连接拟6可以包括有线连接或无线连接。通信连接拟6可以发送和/或接收通信介质。术语“计算机可读介质”可以包括通信介质。通信介质通常以诸如载波或其他传输机制等“已调制数据信号”来体现计算机可读指令或其他数据,并包括任何信息传送介质。 术语“已调制数据信号”可以包括以对信号中的信息进行编码的方式设置或改变其一个或多个特征的信号。设备812可以包括输入设备824,诸如键盘、鼠标、笔、语音输入设备、触摸输入设备、红外照相机、视频输入设备、和/或任何其他输入设备。设备812还可以包括输出设备 822,诸如一个或多个显示器、扬声器、打印机、和/或任何其他输出设备。输入设备拟4和输出设备822可以通过有线连接、无线连接、或其任何组合来连接到设备812。在一个实施方式中,可以使用来自另一计算设备的输入设备或输出设备作为计算设备812的输入设备 824或输出设备822。计算设备812的组件可以通过诸如总线之类的各种互连来连接。这样的互连可以包括诸如PCI Express之类的外围部件互连(PCI)、通用串行总线(USB)、火线(IEEE1394)、 光学总线结构等等。在另一实施方式中,计算设备812的组件可以通过网络互连。例如,存储器818可以包括位于通过网络互连的不同物理位置的多个物理存储器单元。本领域的技术人员将认识到,用来存储计算机可读指令的存储设备可以分布在网络上。例如,可经由网络拟8访问的计算设备830可以存储计算机可读指令来实现这里所提供的一个或多个实施方式。计算设备812可以访问计算设备830,并下载计算机可读指令的一部分或全部以便执行。或者,计算设备812可以根据需要下载计算机可读指令的一部分,或者一些指令可以在计算设备812上执行而一些指令则在计算设备830上执行。这里提供了实施方式的各种操作。在一个实施方式中,所描述的操作中的一个或多个可以组成存储在一个或多个计算机可读介质上的计算机可读指令,这些指令如果由计算设备执行则使得计算设备执行所描述的操作。描述一些或所有操作的顺序不应该被解释为暗示这些操作一定是依赖于顺序的。从本说明书获益的本领域技术人员将认识到替换顺序。此外,应该理解,并非所有的操作都一定存在于这里所提供的每一个实施方式中。此外,在此使用词语“示例性”意指用作示例、实例或说明。这里作为“示例性”所描述的任何方面或设计不必被解释为由于其他方面或设计。相反,使用词语“示例性”旨在以具体的方式呈现各个概念。如本申请中所使用的,术语“或”意指包括性的“或”而非互斥性的“或”。即,除非另有指定或从上下文可以清楚,“X使用A或B”意指任何自然的包括性排列。即,如果X使用A ;X使用B^X使用A和B两者,则在任何以上情况下,都满足“X 使用A或B。”此外,本申请中和所附权利要求书所使用的冠词“一”和“一个”一般可以解释为“一个或多个”,除非另有指定或从上下文可以清楚是指单数形式。
同样,虽然参考一个或多个实现示出并描述了本发明,但本领域技术人员基于对本说明书和附图阅读和理解,可以想到各种等效更改和修改。本发明包括所有这样的修改和更改,并且仅由所附权利要求书的范围来限定。特别地,对于由上述组件(例如,元素、资源等)执行的各种功能,除非另外指明,否则用于描述这些组件的术语旨在对应于执行所描述的执行此处在本发明的示例性实现中所示的功能的组件的指定功能(例如,功能上等效)的任何组件,即使这些组件在结构上不等效于所公开的结构。此外,尽管可相对于若干实现中的仅一个实现来公开本发明的一个特定特征,但这一特征可以如对任何给定或特定应用所需且有利地与其他实现的一个或多个其他特征相组合。此外,就在“具体实施方式
” 或者权利要求书中使用术语“包括”、“具有”、“带有”或其变体而言,这些术语旨在以与术语 “包括”相似的方式为包含性的。
权利要求
1.一种用主存在计算机系统上的执行环境之外的调试工具对主存在所述执行环境中的计算机代码进行调试的系统(100),包括部署在执行环境(10 中的生产者组件(104)被配置成发布调试流水线(106);调试流水线(106)被配置成链接调试进程的各阶段,并且包括调试流水线接口对象(110);所述调试流水线接口对象(110)被配置成向所述执行环境(10 之外的消费者组件(11 展示所述调试流水线(106);以及实现一组调试协议(108),所述一组调试协议(108)被配置成为在所述执行环境(102) 之外的消费者组件(11 定义执行环境(10 中计算机代码的调试,所述协议包括被配置成允许对至少两种计算机语言的至少一种的计算机代码的调试请求进行处理的语言不可知协议(114);被配置成允许对相应的签名中的计算机代码语言类型进行处理、而不展示操作系统特定的构造的操作系统不可知协议(116);以及被配置成将第一调试流水线与一个或多个第二调试流水线隔离的隔离协议(118);以及部署在所述执行环境(10 之外的消费者组件(112),被配置成对所述执行环境(102) 中的计算机代码进行调试。
2.如权利要求1所述的系统,其特征在于,所述调试流水线接口对象包括调试工具功能实现器,后者被配置成对执行环境中的计算机代码实现来自调试工具的一个或多个调试工具功能。
3.如权利要求2所述的系统,其特征在于,所述调试工具功能包括以下的一个或多个 被配置成提供调试事件的同步流的同步功能;被配置成在调试期间提供被调试者的停止和继续的断开功能; 被配置成在调试期间提供异步停止事件的异步功能; 被配置成检查值的值检查功能; 被配置成提供执行控制操作的执行控制功能; 被配置成在状态机中枚举线程的线程枚举功能; 被配置成枚举线程的调用栈的线程调用栈功能; 被配置成检查相应的栈帧中的本地值的本地检查功能; 被配置成获取源文件的获取功能;以及被配置成求值表达式的表达式求值功能。
4.如权利要求1所述的系统,其特征在于,所述一组调试协议包括被配置成提供计算机代码中的位置供调试期间被引用、而无须知道底层被调试者操作的位置协议;以及被配置成允许数据检查调试请求返回所请求的数据、而无须展示数据布局或数据类型的类型-总体不可知协议。
5.如权利要求4所述的系统,其特征在于,所述位置协议包括被配置成以下操作的源文件地址实现组件使用自描述跨度以弓丨用源文件中的位置;以及使用自描述文档以引用源文件单元。
6.如权利要求1所述的系统,包括过滤组件,过滤组件被配置成将调试流水线接口对象从第一条件变换为第二条件。
7.如权利要求6所述的系统,所述过滤组件被配置成应用远程连接协议以便向远程代理展示调试流水线接口组件。
8.—种用主存在执行环境之外的调试工具对主存在所述执行环境中的计算机代码进行调试的方法(500),包括实现调试流水线以便链接一个期望对于调试工具可调试的组件(504),包括 从期望被调试的第一组件创建调试流水线接口对象的实例(506);以及包括期望调试工具的第二组件应用所述调试流水线接口对象(508);实现用于调试 (510)的调试流水线协议,包括使用语言不可知体系结构来允许对至少两种计算机语言的至少一种的计算机代码的调试请求进行处理(512);使用操作系统不可知体系结构来允许对相应的签名中的计算机代码语言类型进行处理,而不展示操作系统特定的构造(514);以及使用隔离协议来将第一调试流水线与一个或多个第二调试流水线隔离(516);以及。 使用所述调试流水线所链接的调试工具来执行主存在所述执行环境中的计算机代码中的一个或多个调试功能(518)。
9.如权利要求8所述的方法,包括过滤调试流水线,包括 流水线过滤组件应用所述调试流水线接口对象;使用过滤组件向调试流水线应用变换;以及向第二组件展示经变换的调试流水线接口对象。
10.如权利要求9所述的方法,过滤调试流水线包括应用远程连接协议以便向远程代理展示所述流水线接口对象;以及所述远程代理向第二组件展示所述流水线接口对象。
11.如权利要求8所述的方法,使用所述调试流水线接口对象以实现来自所述调试工具的一个或多个调试工具功能用于调试计算机代码,包括实现以下调试事件的同步流; 调试期间的被调试者的停止和继续; 调试期间事件的异步停止; 值的检查;以及控制操作的执行。
12.如权利要求8所述的方法,实现用于调试的调试流水线协议包括使用源位置不可知体系结构来提供计算机代码中的位置供调试期间被引用、而无须知道底层被调试者操作;以及使用类型-总体不可知体系结构来允许数据检查调试请求返回所请求的数据、而无须展示数据布局或数据类型。
13.如权利要求8所述的方法,包括将两个或更多调试流水线合成到一个调试流水线中以呈现用于相应的流水线的统一调试体验,包括创建对相应的子调试流水线的相应特征进行合成的父流水线。
14.如权利要求8所述的方法,包括产生调试适配器,包括用轻量应用编程接口(API) 来操纵现有的解释器,包括将回调插入回迹方法; 插入用于在语句间步进的代码;以及插入用于检查值的代码。
15.如权利要求8所述的方法,包括调试流水线将位于第一服务器上的执行环境与位于第二服务器上的调试工具相链接,所述第二服务器位于所述第一服务器远程。
全文摘要
通过使用执行环境之外的调试工具,可以开发调试流水线以便为执行环境中操作的计算机代码创建调试体验。生产者可以发布调试流水线,调试流水线被配置成通过向消费者展示调试流水线接口对象来把生产者链接至消费者(例如调试工具)。调试流水线可以实现一组调试协议,包括用于处理对至少两种计算机语言的至少一种的计算机代码的调试请求的协议;被配置成处理相应的签名中的计算机代码语言类型而不展示操作系统特定的构造的协议;以及用于将第一调试流水线与一个或多个第二调试流水线隔离的协议。此外,消费者组件可以在执行环境中对计算机代码进行调试。
文档编号G06F9/38GK102265264SQ200980152909
公开日2011年11月30日 申请日期2009年12月11日 优先权日2008年12月23日
发明者B·R·克劳福德, J·M·斯托尔 申请人:微软公司