使用可修改的快照定义来对执行代码拍摄快照的制作方法_4

文档序号:9932639阅读:来源:国知局
交互式界面时,用户可以能够选择时间线的各种元素来查看底层数据。例如,用户可点击性能指示符406之一来查看在代表性时间段期间收集的性能数据。
[0119]所选的快照410可致使用户界面402如示出的那样被填充。所选的快照410可表示用户希望查看的特定快照,并且该选择可致使该快照从存储中被检索并被显示在用户界面402 中。
[0120]代码窗口 412可显示在快照时的应用的源代码。源代码可初始地被显示在快照被拍摄的位置处,并且用户可以能够向上遍历调用栈来查看在其中调用栈中的各个函数被调用的位置处的源代码。
[0121]在一些实施例中,源代码可被包括在快照定义中,而在其它实施例中,快照可包括对源代码的指针或其它链接。存储源代码的快照在其中源代码可快速地改变的系统中(诸如在开发环境中)可以是有用的。在这样的系统中,应用的完整源代码可能不可用于浏览,这是因为快照可能仅包括在调用栈中的函数附近的源代码。
[0122]断点指示符414可表示源代码中快照被拍摄的位置。代码窗口412中的代码可以是在断点附近的代码,并且用户可以能够在代码窗口 412中向上或向下滚动来查看更多。
[0123]代码窗口412中的变量可以是交互式元素。在实施例400的该示例中,所选的变量416可被突出显示。用户可通过点击、右击、或执行某个其它用于指示并选择变量的动作来选择这一变量。当变量被选择时,用户可以能够查看该变量的当前值,以及使用该变量来定义断点、向数据集合添加断点或从数据集合中移除断点以及其它使用。
[0124]在一些情况下,当所选的变量416的值已知时,所选的变量416可通过用户界面被突出显示。
[0125]调用栈视图418可用作用于查看变量值的工具以及代码导航工具。调用栈视图418可将每个被调用的函数显示为到顶层函数的子例程。当调用栈视图是交互式的时,用户可以能够选择并扩展调用栈中的特定帧。
[0126]调用栈帧的扩展可呈现针对调用栈的经扩展的层的局部变量。在实施例400的该示例中,帧“main”被显示在折叠的视图中,而帧“initialize_server”被显示在经展开的视图422中。在经展开的视图422中,局部变量424被显示。
[0127]调用栈视图418可被用于导航源代码。在一些实施例中,对特定调用栈帧的选择可致使代码窗口 412用在被调用栈帧表示的子例程调用附近的源代码来更新。
[0128]其它数据426可被显示为快照视图的一部分。其它数据426可以是元数据、外部数据或可与快照一起被收集的其它信息。
[0129]断点定义428可定义在其下快照被收集的条件。在实施例400的该示例中,当传入数据对象为“ping(查验)”、一周中的该天不是周一以及存储器的值大于或等于900MB时,快照被拍摄。断点定义428可以是交互式窗口,其中程序员可以能够添加、移除或修改针对快照的条件。
[0130]类似地,数据收集定义430可定义要被收集的数据。在许多情况下,快照系统可具有可被收集的默认数据集。在这样的情况下,数据收集定义430可通过添加或移除要被收集的值来定义对默认设置的改变。在许多情况下,数据收集定义430可包括元数据或其它可在快照的正常范围外部的信息。
[0131]如果断点定义428或数据收集定义430被更新,则程序员可通过使用启动按钮432来启动快照以供将来数据收集。通过启动快照,可用新的快照定义来完成将来对应用的执行。
[0132]一组导航按钮可被用于在各个快照中导航。向前按钮434和向后按钮438可被致动来分别选择前一和下一快照。当被选择时,快照可被显示在用户界面402中。标识符436可显示当前快照的日期和时间以供用户参考。
[0133]图5是示出用于收集快照实例的方法的实施例500的流程图示。用户界面502内的操作被示出在左列中,快照监视器504内的操作被示出在中间列中,并且执行环境506内的操作被示出在右列中。
[0134]其他实施例可使用不同的排序、更多或更少的步骤、以及不同的命名或术语来完成相似功能。在一些实施例中,各种操作或操作集合可与其他操作以同步或异步方式并行地执行。此处所选的步骤是为了以简化的形式例示出一些操作原理而被选出的。
[0135]实施例500示出显示快照部署和数据收集的总体方法。用户可使用用户界面502来创建快照定义,接着快照定义可被部署到快照监视器504。快照监视器504可致使快照被部署并通过与执行环境506结合工作来收集快照实例。
[0136]实施例500的该方法是可使用若干不同类型的机制来部署的一般方法。在一个机制中,程序员可手动地将快照代码插入在应用中。在其它机制中,快照代码可在执行之前或期间被插入在应用中。在其它实施例中,快照监视器504可以是可与执行环境506交互但不可改变应用代码的分开的进程。
[0137]在用户界面502中,在框508中,快照条件可被定义,并且在框510中,快照条件可被存储。快照条件可包括用于执行快照的条件以及要被收集的数据两者。在框512中,快照定义可被发送到快照监视器504,其可在框514中接收快照定义。
[0138]执行环境506可在框518中接收应用并在框520中开始执行。在应用在框522中执行的同时,快照监视器504可在框516中监视该执行。
[0139]在监视期间,快照监视器504可检查来确定在框524中针对快照的条件是否已经被满足。当条件没有被满足时,过程可返回到框516。
[0140]当针对快照的条件已经在框524中被满足时,快照监视器504可致使应用在框526中暂停执行,其可被传送到执行环境506,在此执行可在框528中被暂停。
[0141]在框530中,快照监视器504可收集在快照定义中定义的数据。数据收集的一部分可包括将请求传送到执行环境506,在框532中该请求可被接收。在框534中执行环境506可收集所请求的数据并在框538中将该数据传送到快照监视器504。
[0142]许多执行环境可具有调试应用编程接口或其它藉此各种数据可被收集的机制。典型的调试应用编程接口可以能够检索调用栈以及局部、全局和其它变量。
[0143]在框538中,该数据可由快照监视器504接收。附加的状态和元数据可在框540中在应用可被暂停的同时被收集,此后快照监视器504可致使应用在框542中恢复。在框544中执行环境506可接收恢复请求并在框546中恢复执行。执行环境的进程可返回到框522来继续执行。
[0144]快照监视器504可任选地在框550中存储快照实例之前在框548中加密快照数据。在一些实施例中,快照数据的某些部分或子集可被加密。
[0145]图6是示出用于将快照代码插入在应用中的简化方法的实施例600的流程图示。实施例600的该方法可以是手动或自动化的方法,其可通过在其中快照可能被拍摄的位置中插入快照代码来修改应用的代码。
[0146]其他实施例可使用不同的排序、更多或更少的步骤、以及不同的命名或术语来完成相似功能。在一些实施例中,各种操作或操作集合可与其他操作以同步或异步方式并行地执行。此处所选的步骤是为了以简化的形式例示出一些操作原理而被选出的。
[0147]快照代码可由用于收集快照的条件集以及用于收集快照数据并将快照数据存储为快照实例的代码来构成。当快照代码被执行时,应用实际上停止执行,直到快照代码已完成,接着应用可恢复处理。
[0148]在框602中可以接收源代码。源代码中针对快照的每个位置可在框604中被标识。
[0149]位置中的每一个可在框606中被处理。对于每个位置,在框608中针对快照的条件可被定义。在框610中,定义条件的表达式可被创建。表达式可以是具有与应用相同语言的可执行代码。
[0150]在一些实施例中,快照代码可用已经被用于该应用的高级编程语言来定义。在其它实施例中,快照代码可使用中间代码、机器语言或用与主应用不同的语言来定义。
[0151]在框612中,快照代码可被插入到应用中。在一些实施例中,快照可调用可收集、处理并存储快照实例的各个应用编程接口。
[0152]在处理位置中的每一个并在框606中的每个位置中插入快照代码后,经更新的源代码可在框614中被存储并在框616中被执行。
[0153]实施例600可由程序员以手动方式来实现。在这种情况下,程序员可手动地标识针对快照的位置并插入针对每个快照的代码。
[0154]在其它情况下,该方法可用自动化的方式来实现。一些实施例可处理应用的源代码来自动地扫描以发现源代码中针对快照的位置,接着自动地插入快照代码。这种自动化的系统可在源代码中插入快照代码,其可随后被编译或翻译。在一些情况下,该自动化的系统可插入具有中间代码形式的快照代码,其可随后在执行前在即时编译器中被编译,或可被翻译为中间形式。
[0155]实施例600的该方法可将快照代码放置在应用内预先定义的位置处。这样的实施例可推断针对快照的条件之一可以是将应用执行到快照代码的位置。
[0156]图7是示出用于收集快照实例的更加详细的方法的实施例700的流程图示。实施例700示出可被收集在快照中的数据的一个示例以及用于这些数据可被如何收集的示例方法。
[0157]其他实施例可使用不同的排序、更多或更少的步骤、以及不同的命名或术语来完成相似功能。在一些实施例中,各种操作或操作集合可与其他操作以同步或异步方式并行地执行。此处所选的步骤是为了以简化的形式例示出一些操作原理而被选出的。
[0158]实施例700可示出由针对快照实例执行的数据收集。在一些情况下,实施例700的操作可被体现在可被插入在应用中的可执行代码中。
[0159]在框702中,快照代码可被启动。
[0160]在框704中,调用栈可被检索。调用栈可具有多个帧,该多个帧中的每一个可定义调用子例程的调用函数。许多计算机语言可具有调用栈的概念,但是一些语言可使用不同的术语并且一些编程环境可在调用帧中存储更多或更少的数据元素。
[0161 ]在框706中,调用栈中的每个帧可被处理。对于每个帧,针对该帧的局部变量可在框708中被检索。在框710中,被传递到被调用的函数的参数的值可被检索。
[0162]在一些实施例中,快照可包括应用的源代码。当在框712中源代码可被包括在快照中时,在框71
当前第4页1 2 3 4 5 6 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1