使用轻量进程快照的功能评估的制作方法

文档序号:8207706阅读:261来源:国知局
使用轻量进程快照的功能评估的制作方法
【专利说明】
【背景技术】
[0001]对调试程序中的进程状态的检查传统上使用两种方法之一:进程外检查和进程内检查。在进程外检查中,调试程序通过读取被调试程序存储器或通过消费被调试程序上下文,获取变量的值。对于进程内检查,调试程序通过实际在被调试程序进程内执行属性函数,评估属性。此进程内检查在调试程序语法中叫做功能评估或“func-eval”。两个方法都具有优点和缺点。
[0002]在进程外检查模型中,调试程序不能损坏被调试程序的状态。开发人员看见被调试程序状态的原始视图,该视图倾向于处于比API设计人员计划的抽象更低级别。这是因为,调试程序只能在属性的备用值(backing values)在被调试程序存储器中可被访问的情况下,获取它们。例如,如果计算属性的值,则调试程序只能示出在计算中所使用的原始变量。
[0003]不能以此方式读取具有依赖于被调试程序的存储器外面的状态的值的属性,所述状态包括诸如与其他进程(在存储器中或在存储介质上)共享的状态,来自某种其他连接的设备、可移动存储器的状态,等等。不能以此方式读取的其他状态依赖的值是操作系统内核中的状态或跨机器实现的状态。进程外模型需要开发人员从作为原始变量可用的值中对API抽象的实现进行反向设计,这会是困难的,混淆的,或不可能进行。
[0004]对于进程内或func-eval模型,开发人员看见API设计人员计划的抽象的准确的视图。没有从实现到公共视图的映射是必需的。然而,在func-eval模型中,对于属性的实现的任何副作用都将影响被调试程序状态,这可能会导致开发人员混乱和不正确的被调试程序行为。被调试程序可能不在可以执行代码的状态,诸如接近内存不足的情况的高压力的进程或进程内的已经进入内核的线程。在此状态下,调试程序检查是不可能的。执行功能评估会导致被调试程序死锁或损坏。具体而言,如果属性的实现依赖于正在执行的其他线程。例如,如果一个属性试图获取另一线程持有的锁,则该属性不能执行,除非持有锁的线程释放它,导致死锁。
[0005]此外,在某些分布式环境所使用的代理/存根(stub)模型中,调用可能需要多个线程执行,以便允许另一线程“抽取”或处理来自正在执行func-eval的另一线程的传入的调用。允许进程中的其他线程运行(即,“错过”所述线程)是调试程序一般不能允许的事项,因为对于每一线程的实际执行点将在每一次func-eval时改变。这样的跨上下文调用会导致被调试程序的不可恢复的损坏,如果它们不能正确地完成。

【发明内容】

[0006]提供本
【发明内容】
是为了以精简的形式介绍将在以下详细描述中进一步描述的一些概念。本
【发明内容】
并不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于限制所要求保护的主题的范围。
[0007]使用操作系统中的轻量进程快照支持,调试程序创建被调试程序目标进程的副本,并针对副本执行func-eval检查。这使目标进程中的大多数被调试程序状态保留原样,因为由func-eval作出的任何更改都是快照副本本地的。在func-eval期间任何灾难性故障,诸如死锁被调试程序进程,具有最小的影响,因为原始进程未被触及,可以简单地扔掉并重新创建快照。可以对进程快照执行对于被调试程序进程来说太过破坏性的调试程序操作,而不会威胁真正的进程。例如,在func-eval期间错过所有线程是一个这样的情况。
[0008]例如,在在其中对象之间的调用可以遍历线程边界的分布式环境中,诸如COM中的单线程套间,需要错过所有线程。对这样的对象执行普通func-eval将死锁一并可能损坏一被调试程序进程,因为目标线程将不会运行。然而,允许所有线程运行(“错过”)意味着,在func-eval完成之后,进程的状态可能急剧地改变。此外,在错过线程时产生的诸如断点或异常之类的重要的调试程序事件,可能被忽略,因为调试程序此时将不希望进入中断状态。进程快照允许调试程序在错过所有线程的同时时执行func-eval,并且不丢失原始被调试程序进程的实际状态。
[0009]调试程序使用轻量进程快照来隔离func-eval的副作用。当func-eval副作用不再反映目标进程时,或快照被损坏以致于它不再能被使用时,调试程序还可以创建目标被调试程序进程的新的轻量进程快照。
[0010]在一个实施例中,调试程序使用目标被调试程序进程的轻量进程快照,并针对该快照执行func-eval。调试程序使用目标被调试程序进程的轻量进程快照以用于func-eval ο调试程序很可能不错过线程,除非必需,诸如如果func-eval不会足够快完成并且必须被中止,在这样的情况下,可能尝试错过。调试程序可以允许进程快照中的所有线程在功能评估期间执行(错过),以便避免当遇到线程间的依赖性时死锁被调试程序进程。
[0011]调试程序还可以使用真正的被调试程序机器的轻量机器快照,并针对该机器快照执行func-eval,以进一步隔离内核副作用,及其他更全局性的副作用,诸如文件写入。调试程序可以使用被调试程序机器的轻量机器快照,并允许目标进程中的所有线程在func-eval期间执行(错过),以便避免当遇到线程间的依赖性时死锁被调试程序机器。调试程序可以使用轻量机器快照来隔离func-eval的副作用。当func-eval副作用不再反映原始进程时,或快照被损坏以致于它不再能被使用时,调试程序创建新的轻量机器快照。
[0012]附图简述
[0013]为进一步阐明本发明的各实施例的上述及其他优点和特征,将参考附图,呈现对本发明的各实施例的更具体的描述。可以理解,这些附图只描绘了本发明的各典型实施例,并且因此不被认为是对其范围的限制。将通过使用附图并利用附加特征和细节来描述和解释本发明,在附图中:
[0014]图1示出了通过轻量进程快照的历史调试。
[0015]图2示出了根据一实施例的轻量进程快照。
[0016]图3是示出了根据一实施例的用于针对轻量进程快照执行功能评估的方法的流程图。
[0017]图4示出了根据一实施例的当允许真正的被调试进程继续运行的同时调试程序针对轻量进程快照执行功能评估。
[0018]图5示出了根据一实施例的当允许真正的被调试进程继续在主机上运行时调试程序针对轻量机器快照执行功能评估。
[0019]图6示出了使用轻量进程快照的进程内的调试会话。
[0020]图7示出了用于使用轻量进程快照的进程内的调试的合适的计算和网络环境的示例。
[0021]详细描述
[0022]功能评估(func-eval)是现代的调试程序检测被调试程序状态的较佳机制。它允许由API作者计划的原始抽象精确匹配开发人员在调试程序中看到的状态。然而,如上文所描述的,func-eval具有多个缺点,包括副作用、死锁,以及被调试程序损坏。
[0023]调试和诊断系统允许用户取得实况被调试程序进程的轻量进程快照,如此,用户可以在稍后的时间分析那些快照。在生产情况下,可以使用调试和存储器诊断系统,因为它最小化对生产系统的中断,同时仍允许用户捕捉进程状态的快照。轻量进程快照允许对进程的调用堆栈、变量值、存储器、模块列表、线程列表等等进行检查,同时允许原始进程继续执行。
[0024]快照机制允许诊断工具将原始进程与一个或多个进程快照进行比较,或将一系列进程快照中的任何一个彼此进行比较。快照机制进一步允许用户检测进程存储器的快照,而同时允许原始进程以最小的影响继续运行。
[0025]如此处所使用的术语“轻量进程快照”或“快照”是指可以有效率地创建进程的副本而无需创建进程的执行或存储器的全部轨迹。在典型的实施例中,操作系统在虚拟存储器模型顶上实现快照机制,并使用共享存储器页面和写入时复制技术,避免创建进程的完整的副本的需求。写入时复制允许操作系统快速地将原始进程的整个地址空间的实际页面映射到第二进程快照。为提供较高级别的隔离,可以使用虚拟机,诸如微软公司的Drawbridge微微进程(picoprocess)(它是可以运行轻量进程快照的轻量的、安全隔离容器),创建进程快照。
[0026]使用轻量进程快照或轻量机器快照,如此处所描述的,调试程序可以通过针对真正的被调试程序进程的进程快照或针对被调试程序在其上运行的整个机器的基于虚拟机的快照,运行全部func-eval,避免这些问题。可以在需要时随时丢弃和/或重新创建这些快照。
[0027]各实施例创建轻量进程快照或创建轻量机器快照,以允许在调试程序检查中进行功能评估,而不会有损坏或死锁被调试程序进程的风险,同时最小化执行检
当前第1页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1