基于客户端会话的调试的制作方法

文档序号:7612450阅读:296来源:国知局
专利名称:基于客户端会话的调试的制作方法
技术领域
本发明涉及远程应用技术,尤其涉及远程调试技术。
背景技术
随着网络通信和带宽可用性的增长,远程应用已经变成一种常见现象。代替在大量客户端设备上为相同的应用程序安装、维护、调试、更新并执行相似操作,应用程序可以改为在单个服务器中执行,客户端设备通过各个会话来访问该服务器。通过远程服务器上的单个应用程序来服务多个客户端的能力降低了维护成本、减轻了更新和问题解决操作的难度、并且减少了从客户端要求最小系统参数的需要。例如,现代应用程序代码与较早本版本的相比相对较大,需要供执行机器的较大的存储器和处理能力。另一方面,通过访问远程执行的应用程序,客户端设备可以不必具有如果应用程序在相同客户端设备上执行所需要的相同的系统资源。调试在远程服务器或服务上执行的应用程序可能是一个具有挑战的任务。如果服务处理来自客户端的多个并发请求,允许调试阻塞其他客户端可能使用户体验降级。可靠性和安全也是并发调试需要考虑的问题。在客户端进程的调试在线程或进程层面上执行时,调试操作可以影响对其他客户端的请求的服务。

发明内容
提供本发明内容是为了以简化的形式介绍将在以下具体实施方式
中进一步描述的一些概念。本发明内容并非旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于帮助确定所要求保护的主题的范围。各实施例涉及在执行服务器上处理客户端请求时在不中断其他客户端会话的执行的情况下对远程执行的共享应用程序(物理上的或进程级)在各个客户端会话上执行调试操作。根据某些实施例,远程调试客户端可以连接到在服务器上执行的调试引擎,以允许调试客户端来查看源代码、设置断点、查看客户端连接、以及当正被调试的客户端会话命中断点时接收回调或通知。多个客户端可以分开调试,并且它们的执行各自由分开的调试客户端来控制。通过阅读下面的“具体实施方式
”并参考相关联的图形,这些及其他特点和优点将变得显而易见。可以理解,前述一般描述和以下具体实施方式
均仅是说明性的,且不限制所要求保护的各方面。


图1是示出客户端设备访问服务器上的远程执行的应用程序的概念图;图2是示出多个客户端设备通过会话访问服务器上的远程执行的应用程序的另一概念图;图3是示出根据各实施例的附连到服务器的、用于调试在服务器上执行的不同客户端代码的两个不同的调试客户端的图;图4示出根据各实施例的用于执行基于客户端会话的调试的服务器-客户端系统的不同组件之间的交互;图5是其中可实现根据各实施例的系统的联网环境;图6是其中可实现各实施方式的示例计算操作环境的框图;以及图7示出根据各实施例的执行基于客户端会话的调试的过程的逻辑流程图。
具体实施例方式如前简述,基于客户端会话的调试可以通过采用在服务器上执行的调试客户端来执行,从而在不中断其他客户端会话的执行的情况下能够调试各个客户端会话。如本文所述,远程执行的应用程序指的是在物理上分开的进程以及在逻辑上分开的进程。因此,客户端会话可以与另一客户端会话在相同的机器上执行但作为分开的进程的一部分并且实现各实施例。在以下详细描述中,参考了构成了详细描述的一部分并作为说明示出了各具体实施方式
或示例的附图。可组合些方面,可利用其他方面,并且可以做出结构上的改变而不背离本发明的精神或范围。因此,以下具体实施方式
并不旨在限制,并且本发明的范围由所附权利要求及其等效方案来限定。虽然在结合在个人计算机上的操作系统上运行的应用程序执行的程序模块的一般上下文中描述了各实施方式,但是本领域技术人员会认识到各方面也可以结合其他程序模块实现。一般而言,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、组件、数据结构和其他类型的结构。此外,如本领域技术人员理解的,各实施例可以用其他计算机系统配置来实施,包括手持式设备、多处理器系统、基于微处理器或可编程消费者电子产品、小型计算机、大型计算机以及类似计算设备。各实施方式还能在任务由通过通信网络链接的远程处理设备来执行的分布式计算环境中实现。在分布式计算环境中,程序模块可以位于本地和远程存储器存储设备中。各实施例可被实现为计算机实现的过程(方法)、计算系统、或者如计算机程序产品或计算机可读介质等制品。计算机程序产品可以是计算机系统可读并且编码包括用于使得计算机或计算系统执行示例过程的指令的计算机程序的计算机存储介质。例如,计算机可读存储介质可经由易失性计算机存储器、非易失性存储器、硬盘驱动器、闪存驱动器、软盘或紧致盘和类似介质中的一个或多个来实现。贯穿本说明书,术语“平台”可以是用于管理远程应用程序服务和有关网络通信的软件和硬件组件的组合。平台的示例包括但不限于,在多个服务器上执行的主存服务、在单个服务器上执行的应用程序以及类似系统。术语“服务器”一般指通常在联网环境中执行一个或多个软件程序的计算设备。然而,服务器还可被实现为视作网络上的服务器的、在一个或多个计算设备上执行的虚拟服务器(软件程序)。关于这些技术和示例操作的更多细节在以下提供。图1包括示出客户端设备访问服务器上的远程执行的应用程序的概念图100。如本文所述,远程执行的应用程序指的是在物理上分开的进程以及在逻辑上分开的进程。因此,客户端会话可以与另一客户端会话在相同的机器上执行但作为分开的进程的一部分并且实现各实施例。与在客户端机器上安装并完全地执行的常规应用程序不同,远程执行的应用程序,诸如应用程序112可以由可能仍然在同一机器上的多个客户端共享。在虚拟化环境中,每一客户端在逻辑上可以是远程的在每一虚拟机中,但在物理上在同一机器上。远程执行的应用程序112在服务器116的操作系统114的框架内执行。客户端设备106可以通过网络110连接到服务器116并建立会话。因此,对于客户端设备106的用户,可能看上去就像是应用程序112在操作系统104上运行为应用程序102 (由虚线指示), 而客户端设备106不必用诸如存储器、处理能力、寄存器等传统系统资源来支持该应用程序。除了对用于执行远程应用程序的系统资源的缩减需求之外,应用程序112可由多个客户端同时访问(执行)。类似地,客户端设备106结合操作系统104可以用系统资源的一小部分并且在不必安装、维护或更新各个应用程序的情况下提供对多个远程应用程序的访问ο图2包括示出多个客户端设备通过会话访问服务器上的远程执行的应用程序的另一概念图200。如上所述,远程执行的应用程序可由多个客户端共享。在根据各实施例的系统中,每一客户端可以建立具有其远程应用程序的分开会话,可以在不中断其他会话的执行的情况下使用该会话来调试所执行的代码。在图200的示例场景中,服务器220执行应用程序222和224。客户端234和236 通过它们各自的会话来共享应用程序222。应用程序224由客户端2沈、2观、230和232通过它们各自的会话来共享。服务器220上执行的调试引擎可以使得客户端代码(代表每一客户端在服务器上执行的代码)能够报告它们的状态并且还使得一个或多个远程调式客户端能够附连到各个会话并控制各个会话。因此,在具有多个客户端会话的服务器中,可以中断正被调试的特定会话的执行,这与常规的每线程或每进程中断不同。可以用安全的方式远程地同时调试多个客户端会话。此外,可以设置全局断点以使得调试客户端能够基于预定义断点(而非客户端会话)来找到要中断哪个客户端会话。图3是示出根据各实施例的附连到服务器的用于调试在服务器上执行的不同客户端代码的两个不同的调试客户端的图。图300示出服务器340如上所讨论地执行一个或多个远程应用程序。客户端342、344和346可以通过各自的会话来访问服务器340。调试客户端348和350也可以通过各自的调试会话来访问服务器340。在根据各实施例的系统中,每一会话可以单独地调试以允许其他会话在不中断的情况下继续执行。在服务器上执行的调试引擎可以使得客户端代码能够通过由客户端代码建立的会话对象将它们的状态报告给调试引擎。可以向远程调试客户端,诸如调试客户端 348或350,提供执行代码的状态(例如,断点)和附加信息以使得远程调试客户端能够控制调试进程。在图300的示例场景中,三个客户端(342、344和346)和两个调试客户端(348和 350)被连接到服务器340。如果调试客户端A348附连到客户端A (346)的会话而调试客户端B350附连到客户端B(344)的会话,则调试客户端A348可以控制、检查、和/或分析客户端会话A在服务器340上的执行。调试客户端B350可以对客户端会话B进行同样的动作。 因此,客户端C342不受任一个调试客户端的影响。图4示出根据各实施例的用于执行基于客户端会话的调试的服务器-客户端系统的不同组件之间的交互。虽然图400示出一个服务器和在客户端机器上执行的一个调试客户端,但根据各实施例的系统可以包括多个服务器和/或客户端。服务器452可以执行服务器代码妨4和/或客户端代码462,服务器代码妨4是客户端不可访问的代码或者是不应该被调试的代码(例如,调试器引擎本身或框架代码的其他部分)。客户端代码462是代表特定客户端在服务器上执行的代码。执行应用程序编程接口(API)458可以由服务器本身暴露且由在客户端会话的上下文中代表客户端的客户端代码462来调用。调试引擎456可以暴露由远程调试客户端464调用的调试客户端API 460。客户端代码462可以调用执行API 458上的kssionStart (会话开始)方法一次并建立用于记住会话/客户端并将其与其他会话/客户端进行区分的会话对象。可以将会话对象作为该调用的结果返回到客户端代码462。随后,客户端代码462可以周期性地调用执行API 458上的MatementHit (语句命中)方法以通过会话对象来通知调试引擎456关于代码的位置及其相关联的客户端会话。StatementHit方法通常可以在执行每一逻辑语句之前调用,并且可以通过工具将调用本身插入或导入到代码中。StatementHit方法随后可以确定调试客户端464是否附连到给定连接。该方法还可以确定执行是否应该是“断点”(即,如果已经在给定语句上设置了断点并且任何相关联的条件的求值为真)或调试客户端464在各个语句中步进。如果调试机器456确定应该中断,则可以通知相关联的远程调试客户端464。根据某些实施例,执行可以不返回至进行调用的代码直到调试客户端发出“继续”命令。根据其他实施例,可以在MatementHit的实现过程中计算调用栈、变量、执行历史以及类似信息,并使得这些信息在请求时对调试客户端可用。调试客户端API 460使得外部调式客户端464能够连接到调试引擎456。该API可以使得调试客户端464能够执行以下动作中的一个或多个查看在服务器上执行的客户端会话列表;选择要调试的客户端会话;设置断点,可任选地附加条件;当命中断点时接收通知;查询代码相对于原始、未经操纵的源代码的当前位置;以及查询调用栈、变量值、执行历史和有关的元数据。虽然上述动作中的许多被“锁定”至单个客户端会话中,但某些可被允许是“全局” 的。因此,根据其他实施例,命中特定断点/条件的任何客户端/会话可以触发给定的动作。 这可以在期望调试客户端采取动作但预先不知道要调试哪个客户端的情况下采用。已经用具体的服务器、客户端设备、软件模块和交互描述了图1、2、3和4中的示例系统。各实施例不限于根据这些示例配置的系统。基于客户端会话的调试可以在采用更少或更多组件并执行其他任务的配置中实现。此外,已经结合描述以上实施例讨论了具体的协议和接口。各实施例也不限于这些示例。可以使用此处描述的原理用相似的方式来实现其他协议、交换和接口。图5是可以实现各实施方式的示例联网环境。提供远程应用程序服务的平台可经由诸如托管服务等在一个或多个服务器516上执行的软件来实现。该平台可以通过网络 510来与诸如台式计算机511、膝上型计算机512、智能电话513、或手持式计算设备514(‘客户端设备’)等各个计算设备上的客户端应用程序进行通信。如上所讨论的,用户可以通过客户端设备511-514来访问在服务器516中的一个或多个上远程执行的应用程序。在服务器516上执行的调试引擎可以暴露执行API和调试客户端API,其可以在不中断其他客户端的客户端代码的执行的情况下实现服务器上的会话级的客户端代码的调试。远程执行的应用程序可以直接从数据存储518检索必要数据或通过数据库服务器519来检索必要数据。网络510可包括服务器、客户端、因特网服务供应商、以及通信介质的任何拓扑结构。根据各实施例的系统可具有静态或动态拓扑结构。网络510可包括诸如企业网络等安全网络、诸如无线开放网络等非安全网络、或因特网。网络510还可通过诸如公共交换电话网络(PSTN)或蜂窝网络等其他网络来协调通信。此外,网络510可包括诸如蓝牙或类似网络等短程无线网络。网络510提供此处描述的节点之间的通信。作为示例而非限制,网络 510可包括诸如声学、RF、红外线和其他无线介质等无线介质。可以采用计算设备、应用程序、数据源和数据分发系统的许多其它配置来实现基于客户端会话的调试的框架。此外,图5中所讨论的联网环境仅用于说明目的。各实施方式不限于示例应用程序、模块、或过程。图6及相关联的讨论旨在提供对其中可实现各实施方式的合适计算环境的简要概括描述。参考图6,示出了根据各实施例的、诸如计算设备600等用于应用程序的示例计算操作环境的框图。在基本配置中,计算设备600可以是根据各实施例的实现基于客户端会话的调试的、执行远程应用程序的并包括至少一个处理单元602和系统存储器604的服务器。计算设备600还可包括协作执行程序的多个处理单元。取决于计算设备的确切配置和类型,系统存储器604可以是易失性的(诸如RAM)、非易失性的(诸如ROM、闪存等)或是两者的某种组合。系统存储器604通常包括适于控制平台操作的操作系统605,诸如来自华盛顿州雷德蒙市的微软公司的WINDOWS 操作系统。系统存储器604还可包括一个或多个软件应用程序,诸如程序模块606、应用程序622、客户端代码6 和调试引擎624。应用程序622可以是远程地在计算设备600上执行的并可由一个或多个客户端设备访问的应用程序。应用程序622可以包括服务器代码和客户端代码,服务器代码不可由客户端设备访问(即不可调试的)。客户端代码可以如先前所述地采用调试引擎拟6来调试。该基本配置在图6中由虚线608内的组件示出。计算设备600可具有附加特征或功能。例如,计算设备600还可包括附加数据存储设备(可移动和/或不可移动),诸如例如磁盘、光盘或磁带。在图6中通过可移动存储 609和不可移动存储610示出了这样的附加存储。计算机可读介质可包括以用于存储诸如计算机可读指令、数据结构、程序模块或其它数据等信息的任何方法或技术实现的易失性和非易失性、可移动和不可移动介质。系统存储器604、可移动存储609和不可移动存储610 都是计算机可读介质的示例。计算机可读介质包括,但不限于,RAM、R0M、EEPR0M、闪存或其它存储器技术、CD-ROM、数字多功能盘(DVD)或其它光存储、磁带、磁盘存储或其它磁存储设备、或能用于存储所需信息且可以由计算设备600访问的任何其它介质。任何这样的计算机可读介质都可以是计算设备600的一部分。计算设备600也可具有输入设备612,诸如键盘、鼠标、笔、语音输入设备、触摸输入设备和类似输入设备。还可包括输出设备614,诸如显示器、扬声器、打印机和其他类型的输出设备。这些设备在本领域中公知并且无需在此处详细讨论。计算设备600还可包含通信连接616,该通信连接允许该设备诸如通过分布式计算环境中的有线或无线网络、卫星链接、蜂窝链接、短程网络和类似机制来与其他设备618进行通信。其他设备618可包括执行通信应用程序的计算机设备、其他web服务器和类似设备。通信连接616是通信介质的一个示例。通信介质可在其中包括计算机可读指令、数据结构、程序模块或其它数据。作为示例而非限制,通信介质包括有线介质,如有线网络或直接线连接,以及诸如声学、射频(RF)、红外线及其他无线介质之类的无线介质。各示例实施例还包括各种方法。这些方法可以用任何数量的方式,包括本文中所描述的结构来实现。一种此类方式是通过本文中描述的类型的设备的机器操作。另一可任选方式是结合一个或多个人类操作者执行该方法的各个操作中的某一些来执行该方法的一个或多个操作。这些人类操作者无需彼此同在一处,而是其每一个可以仅与执行程序的一部分的机器同在一处。图7示出根据各实施例的执行基于客户端会话的调试的过程700的逻辑流程图。 过程700可作为执行远程应用程序的服务器的一部分来实现。过程700从操作710开始,在那里在由调试引擎暴露的执行API处从客户端代码接收到MatementHit方法之后,可以为客户端建立会话对象。会话对象可以记住会话/客户端并将其与其他会话/客户端进行区分。在操作720处,客户端代码可以通过会话对象来通知调试引擎代码的位置及其相关联的客户端会话。客户端代码可以通过通常在执行每一逻辑语句之前调用MatementHit 方法来实现以上操作。在判定操作730处,StatementHit方法可以确定是否有调试客户端附连到给定连接。如果附连了调试客户端,则在操作740处还可以确定执行是否是断点。如果引擎确定应该中断,则可以通知相关联的调试客户端。执行可以等待返回至进行调用的客户端代码直到调试客户端发出继续命令。可以在MatementHit的实现过程中计算包括调用栈、变量、执行历史等的信息并在操作750处在请求时将其提供给调试客户端。包括在过程700内的各操作仅出于说明目的。基于客户端会话的调试可以使用此处所述的各原理通过具有更少或更多步骤的相似过程、以及不同的操作次序来实现。以上说明书、示例和数据提供了对各实施方式组成的制造和使用的全面描述。尽管用结构特征和/或方法动作专用的语言描述了本主题,但可以理解,所附权利要求书中定义的主题不必限于上述具体特征或动作。相反,上述具体特征和动作是作为实现权利要求和各实施方式的示例形式而公开的。
权利要求
1.一种至少部分地在计算设备中执行的用于执行基于客户端会话的调试的方法,所述方法包括在调试引擎处接收与在服务器上执行的客户端代码的会话相关联的标识信息; 确定是否有调试客户端附连到所述会话;如果附连了调试客户端,则确定是否到达所述客户端代码的执行中的断点;以及如果到达断点,则将客户端代码信息提供给所附连的调试客户端以使得所述调试客户端能够在不中断所述服务器上的客户端代码的任何其他会话的情况下控制调试进程。
2.如权利要求1所述的方法,其特征在于,还包括响应于来自所述客户端代码的方法调用来建立会话对象,其中采用所述会话对象来记住所述会话并将所述会话与所述客户端代码的其他会话进行区分;以及将所述会话对象返回至所述进行调用的客户端代码。
3.如权利要求2所述的方法,其特征在于,使用所述会话对象通过来自所述客户端代码的周期调用来接收所述客户端代码信息,并且所述会话对象中包括的所述标识信息与所述客户端代码的位置以及相关联的会话相关联。
4.如权利要求1所述的方法,其特征在于,确定是否到达断点包括 确定是否在特定语句上设置了断点;以及确定至少一个相关联的条件是否为真。
5.如权利要求1所述的方法,其特征在于,还包括计算以下一组中的至少一个调用栈、一个或多个变量、以及执行历史;以及在请求时将所计算的信息提供给所述调试客户端。
6.如权利要求1所述的方法,其特征在于,使所述调试客户端能够执行以下一组动作中的至少一个查看在所述服务器上执行的客户端会话列表;选择要调试的客户端会话; 设置断点;接收关于断点的通知;查询所述客户端代码的当前位置;将条件附连到断点以及查询以下各项中的至少一个调用栈、变量值、执行历史以及相关元数据。
7.如权利要求1所述的方法,其特征在于,所述断点被定义为全局的从而使得到达所述断点的所述客户端代码的任何会话被附连到所述调试客户端。
8.一种用于执行共享应用程序并提供基于客户端会话的调试的系统,所述系统包括 存储可执行指令的存储器;耦合到所述存储器的处理器,所述处理器执行客户端代码的多个会话和调试引擎,其中所述调试引擎被配置为通过会话对象从所述客户端代码接收所述客户端代码的位置和相关联的会话标识; 确定是否有调试客户端附连到所标识的会话;如果附连了调试客户端,则确定是否到达所述客户端代码的执行中的断点; 如果到达所述断点,则确定与所述断点相关联的至少一个条件是否为真;以及如果所述至少一个条件为真,则将所述客户端代码的位置和所述相关联的会话标识提供给所附连的调试客户端,以使得所述调试客户端能够在不中断所述服务器上的客户端代码的任何其他会话的情况下控制调试进程。
9.如权利要求8所述的系统,其特征在于,所述调试引擎还被配置为响应于通过执行应用程序编程接口(API)来自所述客户端代码的方法调用来建立所述会话对象,并通过所述执行API从所述客户端代码接收带有所述客户端代码的位置和相关联的会话标识的周期方法调用。
10.如权利要求8所述的系统,其特征在于,所述调试引擎还被配置成通过调试客户端API通知所附连的调试客户端关于到达所述断点的所述客户端代码的位置和所述相关联的会话标识;以及接收与以下一组中的至少一个相关联的信息要调试的客户端会话的选择、断点的设置、将条件附连到断点、以及通过所述调试客户端API向所述调试客户端查询所述客户端代码的当前位置。
11.如权利要求8所述的系统,其特征在于,所述处理器被配置为执行多个应用程序, 每一应用程序由客户端共享。
12.如权利要求8所述的系统,其特征在于,所述处理器被配置为执行不可由任何客户端访问的服务器代码,所述服务器代码包括以下两项中的至少一个调试引擎和框架代码。
13.一种其上存储有用于基于客户端会话的调试的指令的计算机可读存储介质,所述指令包括响应于来自客户端代码的初始方法调用在调试引擎处建立会话对象,其中采用所述会话对象来记住所述客户端代码的会话并将所述会话与所述客户端代码的其他会话进行区分;将所述会话对象返回至所述进行调用的客户端代码;通过来自所述客户端代码的周期方法调用接收与所述客户端代码的位置及相关联的会话相关联的信息;确定是否有调试客户端附连到所述会话;如果附连了调试客户端,则确定是否到达所述客户端代码的执行中的断点并且与所述断点相关联的至少一个条件是否为真;以及如果到达所述断点并且所述条件为真,则暂停所述客户端代码的执行直到从所述调试客户端接收到继续命令,以及将所接收的客户端代码信息提供给所附连的调试客户端以使得所述调试客户端能够在不中断所述服务器上的客户端代码的任何其他会话的情况下控制调试进程。
14.如权利要求13所述的计算机可读介质,其特征在于,来自所述客户端代码的调用通过暴露给所述客户端代码的内部执行API来接收,而来自所述调试客户端的调用通过暴露给所述远程调试客户端的外部调试客户端API来接收。
15.如权利要求13所述的计算机可读介质,其特征在于,所述周期调用用工具插入到所述客户端代码中。
全文摘要
本发明描述了基于客户端会话的调试。在执行服务器上处理客户端请求时,能够在不中断其他客户端会话的执行的情况下对远程执行的共享应用程序的各个客户端会话执行调试操作。远程调试客户端可以连接到在服务器上执行的调试引擎,以允许调试客户端查看源代码、设置断点、查看客户端连接、以及当正在调试的客户端会话命中断点时接收回调或通知。调试客户端还可以通过在客户端代码中的步进来控制执行以能够同时调试多个客户端。
文档编号H04L29/06GK102195970SQ20111006590
公开日2011年9月21日 申请日期2011年3月9日 优先权日2010年3月10日
发明者J·斯泰尔斯, T·赫杰斯伯格 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1