CN104520820B - 使用轻量进程快照的功能评估 - Google Patents

使用轻量进程快照的功能评估 Download PDF

Info

Publication number
CN104520820B
CN104520820B CN201380041514.5A CN201380041514A CN104520820B CN 104520820 B CN104520820 B CN 104520820B CN 201380041514 A CN201380041514 A CN 201380041514A CN 104520820 B CN104520820 B CN 104520820B
Authority
CN
China
Prior art keywords
snapshot
lightweight
target process
functional assessment
debugged
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.)
Active
Application number
CN201380041514.5A
Other languages
English (en)
Other versions
CN104520820A (zh
Inventor
J·戴维斯
T·H·金
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.)
Microsoft Technology Licensing LLC
Original Assignee
Microsoft Technology Licensing LLC
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 Microsoft Technology Licensing LLC filed Critical Microsoft Technology Licensing LLC
Publication of CN104520820A publication Critical patent/CN104520820A/zh
Application granted granted Critical
Publication of CN104520820B publication Critical patent/CN104520820B/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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3089Monitoring arrangements determined by the means or processing involved in sensing the monitored data, e.g. interfaces, connectors, sensors, probes, agents
    • G06F11/3096Monitoring arrangements determined by the means or processing involved in sensing the monitored data, e.g. interfaces, connectors, sensors, probes, agents wherein the means or processing minimize the use of computing system or of computing system component resources, e.g. non-intrusive monitoring which minimizes the probe effect: sniffing, intercepting, indirectly deriving the monitored data from other directly available data
    • 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/3636Software debugging by tracing the execution of the program
    • 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/366Software debugging using diagnostics

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Computing Systems (AREA)
  • Debugging And Monitoring (AREA)

Abstract

调试程序创建被调试程序目标进程的轻量进程快照,并针对副本执行进程内的或功能评估(func‑eval)检查。这允许被调试程序进程中的大多数状态保持原样,因为由func‑eval作出的更改是进程快照本地的。可以对进程快照执行对原始被调试程序进程来说太过破坏性的调试程序操作,而不会威胁真正的进程。进程快照允许调试程序在隔离被调试程序进程并且不丢失原始被调试程序进程的实际状态的同时执行func‑eval。当当前快照由于func‑eval副作用而损坏时,创建被调试程序进程的新进程快照。调试程序还可以使用主机被调试程序机器的轻量机器快照,并针对该机器快照执行func‑eval,以进一步隔离内核及其他副作用。

Description

使用轻量进程快照的功能评估
技术领域
本发明涉及功能评估,尤其涉及使用轻量进程快照的功能评估。
背景技术
对调试程序中的进程状态的检查传统上使用两种方法之一:进程外检查和进程内检查。在进程外检查中,调试程序通过读取被调试程序存储器或通过消费被调试程序上下文,获取变量的值。对于进程内检查,调试程序通过实际在被调试程序进程内执行属性函数,评估属性。此进程内检查在调试程序语法中叫做功能评估或“func-eval”。两个方法都具有优点和缺点。
在进程外检查模型中,调试程序不能损坏被调试程序的状态。开发人员看见被调试程序状态的原始视图,该视图倾向于处于比API设计人员计划的抽象更低级别。这是因为,调试程序只能在属性的备用值(backing values)在被调试程序存储器中可被访问的情况下,获取它们。例如,如果计算属性的值,则调试程序只能示出在计算中所使用的原始变量。
不能以此方式读取具有依赖于被调试程序的存储器外面的状态的值的属性,所述状态包括诸如与其他进程(在存储器中或在存储介质上)共享的状态,来自某种其他连接的设备、可移动存储器的状态,等等。不能以此方式读取的其他状态依赖的值是操作系统内核中的状态或跨机器实现的状态。进程外模型需要开发人员从作为原始变量可用的值中对API抽象的实现进行反向设计,这会是困难的,混淆的,或不可能进行。
对于进程内或func-eval模型,开发人员看见API设计人员计划的抽象的准确的视图。没有从实现到公共视图的映射是必需的。然而,在func-eval模型中,对于属性的实现的任何副作用都将影响被调试程序状态,这可能会导致开发人员混乱和不正确的被调试程序行为。被调试程序可能不在可以执行代码的状态,诸如接近内存不足的情况的高压力的进程或进程内的已经进入内核的线程。在此状态下,调试程序检查是不可能的。执行功能评估会导致被调试程序死锁或损坏。具体而言,如果属性的实现依赖于正在执行的其他线程。例如,如果一个属性试图获取另一线程持有的锁,则该属性不能执行,除非持有锁的线程释放它,导致死锁。
此外,在某些分布式环境所使用的代理/存根(stub)模型中,调用可能需要多个线程执行,以便允许另一线程“抽取”或处理来自正在执行func-eval的另一线程的传入的调用。允许进程中的其他线程运行(即,“错过”所述线程)是调试程序一般不能允许的事项,因为对于每一线程的实际执行点将在每一次func-eval时改变。这样的跨上下文调用会导致被调试程序的不可恢复的损坏,如果它们不能正确地完成。
发明内容
提供本发明内容是为了以精简的形式介绍将在以下详细描述中进一步描述的一些概念。本发明内容并不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于限制所要求保护的主题的范围。
使用操作系统中的轻量进程快照支持,调试程序创建被调试程序目标进程的副本,并针对副本执行func-eval检查。这使目标进程中的大多数被调试程序状态保留原样,因为由func-eval作出的任何更改都是快照副本本地的。在func-eval期间任何灾难性故障,诸如死锁被调试程序进程,具有最小的影响,因为原始进程未被触及,可以简单地扔掉并重新创建快照。可以对进程快照执行对于被调试程序进程来说太过破坏性的调试程序操作,而不会威胁真正的进程。例如,在func-eval期间错过所有线程是一个这样的情况。
例如,在在其中对象之间的调用可以遍历线程边界的分布式环境中,诸如COM中的单线程套间,需要错过所有线程。对这样的对象执行普通func-eval将死锁—并可能损坏—被调试程序进程,因为目标线程将不会运行。然而,允许所有线程运行(“错过”)意味着,在func-eval完成之后,进程的状态可能急剧地改变。此外,在错过线程时产生的诸如断点或异常之类的重要的调试程序事件,可能被忽略,因为调试程序此时将不希望进入中断状态。进程快照允许调试程序在错过所有线程的同时时执行func-eval,并且不丢失原始被调试程序进程的实际状态。
调试程序使用轻量进程快照来隔离func-eval的副作用。当func-eval副作用不再反映目标进程时,或快照被损坏以致于它不再能被使用时,调试程序还可以创建目标被调试程序进程的新的轻量进程快照。
在一个实施例中,调试程序使用目标被调试程序进程的轻量进程快照,并针对该快照执行func-eval。调试程序使用目标被调试程序进程的轻量进程快照以用于func-eval。调试程序很可能不错过线程,除非必需,诸如如果func-eval不会足够快完成并且必须被中止,在这样的情况下,可能尝试错过。调试程序可以允许进程快照中的所有线程在功能评估期间执行(错过),以便避免当遇到线程间的依赖性时死锁被调试程序进程。
调试程序还可以使用真正的被调试程序机器的轻量机器快照,并针对该机器快照执行func-eval,以进一步隔离内核副作用,及其他更全局性的副作用,诸如文件写入。调试程序可以使用被调试程序机器的轻量机器快照,并允许目标进程中的所有线程在func-eval期间执行(错过),以便避免当遇到线程间的依赖性时死锁被调试程序机器。调试程序可以使用轻量机器快照来隔离func-eval的副作用。当func-eval副作用不再反映原始进程时,或快照被损坏以致于它不再能被使用时,调试程序创建新的轻量机器快照。
附图简述
为进一步阐明本发明的各实施例的上述及其他优点和特征,将参考附图,呈现对本发明的各实施例的更具体的描述。可以理解,这些附图只描绘了本发明的各典型实施例,并且因此不被认为是对其范围的限制。将通过使用附图并利用附加特征和细节来描述和解释本发明,在附图中:
图1示出了通过轻量进程快照的历史调试。
图2示出了根据一实施例的轻量进程快照。
图3是示出了根据一实施例的用于针对轻量进程快照执行功能评估的方法的流程图。
图4示出了根据一实施例的当允许真正的被调试进程继续运行的同时调试程序针对轻量进程快照执行功能评估。
图5示出了根据一实施例的当允许真正的被调试进程继续在主机上运行时调试程序针对轻量机器快照执行功能评估。
图6示出了使用轻量进程快照的进程内的调试会话。
图7示出了用于使用轻量进程快照的进程内的调试的合适的计算和网络环境的示例。
具体实施方式
功能评估(func-eval)是现代的调试程序检测被调试程序状态的较佳机制。它允许由API作者计划的原始抽象精确匹配开发人员在调试程序中看到的状态。然而,如上文所描述的,func-eval具有多个缺点,包括副作用、死锁,以及被调试程序损坏。
调试和诊断系统允许用户取得实况被调试程序进程的轻量进程快照,如此,用户可以在稍后的时间分析那些快照。在生产情况下,可以使用调试和存储器诊断系统,因为它最小化对生产系统的中断,同时仍允许用户捕捉进程状态的快照。轻量进程快照允许对进程的调用堆栈、变量值、存储器、模块列表、线程列表等等进行检查,同时允许原始进程继续执行。
快照机制允许诊断工具将原始进程与一个或多个进程快照进行比较,或将一系列进程快照中的任何一个彼此进行比较。快照机制进一步允许用户检测进程存储器的快照,而同时允许原始进程以最小的影响继续运行。
如此处所使用的术语“轻量进程快照”或“快照”是指可以有效率地创建进程的副本而无需创建进程的执行或存储器的全部轨迹。在典型的实施例中,操作系统在虚拟存储器模型顶上实现快照机制,并使用共享存储器页面和写入时复制技术,避免创建进程的完整的副本的需求。写入时复制允许操作系统快速地将原始进程的整个地址空间的实际页面映射到第二进程快照。为提供较高级别的隔离,可以使用虚拟机,诸如微软公司的Drawbridge微微进程(picoprocess)(它是可以运行轻量进程快照的轻量的、安全隔离容器),创建进程快照。
使用轻量进程快照或轻量机器快照,如此处所描述的,调试程序可以通过针对真正的被调试程序进程的进程快照或针对被调试程序在其上运行的整个机器的基于虚拟机的快照,运行全部func-eval,避免这些问题。可以在需要时随时丢弃和/或重新创建这些快照。
各实施例创建轻量进程快照或创建轻量机器快照,以允许在调试程序检查中进行功能评估,而不会有损坏或死锁被调试程序进程的风险,同时最小化执行检查的副作用。轻量进程快照,此处也被称为进程快照,是有效率地被创建的进程的副本,而无需创建进程的执行或存储器的全部轨迹。通常,操作系统在其虚拟存储器模型顶上实现快照机制,并使用共享存储器页面和写入时复制技术,避免创建进程的完整的副本。相反,写入时复制允许操作系统快速地将原始进程的整个地址空间的实际页面映射到第二进程快照。在创建快照之后,向任意进程的任何存储器写入导致为执行写入的进程创建该对应的存储器页面的副本。如此,为存储器写入实现了副作用隔离。
针对轻量进程快照使用基于func-eval的检查模型的调试程序应用下列算法:
首先,当调试程序进入中断模式时,调试程序要求操作系统创建原始进程的新的轻量快照。此快照必须准确地反映原始进程,包括通过写入时复制,映射被调试程序进程存储器,复制进程内的线程,复制进程内的任何句柄,以及在进程中加载相同模块。调试程序必须能够执行进程快照内的代码,以便执行func-eval。
其次,当调试程序需要执行func-eval时,它在轻量进程快照进程内,而非在原始进程内这么做。这提供了与针对原始进程运行func-eval等同的结果,因为快照是原始进程的克隆,因此,在进程快照内执行func-eval将与在原始被调试程序进程内执行func-eval等同。
值得注意的是,取决于操作系统支持的复制的级别,使用此模型,可能不能隔离某些副作用。例如,将实际产生对外部实体的副作用,诸如在func-eval期间的文件写入。此外,如果操作系统不能够复制全部进程,对未被复制的任何事物(诸如共享的内核对象)的副作用,可能会实际影响原始进程。
再其次,当在快照进程内执行func-eval时,调试程序可以选择错过在真正的被调试程序进程中的所有线程。这允许真正的被调试程序进程中的所有线程执行。这降低了在被调试程序进程跨分布式环境(诸如COM套间边界)作出调用或允许可能被其他线程持有的锁被释放的情况下死锁该被调试程序进程的可能性。如果调试程序执行允许线程错过的评估,则调试程序将需要在评估完成之后创建原始进程的新的快照。这是必需的,因为进程快照的状态在评估之后已显著变化,并可能不再是当前真正的被调试程序进程的准确的表示。
第四,当进程快照中的func-eval发生错误时—例如,由于死锁的功能评估,它超时,或来自开发人员希望撤消的以前的评估有明显的副作用—调试程序可以简单地删除旧快照并创建新的快照。新进程快照再次是原始进程的复制。
在某些情况下,调试程序将知道自动地创建新进程快照。例如,调试程序在处于运行模式之后进入中断模式时将总是需要创建新的进程快照。这是需要的,因为被调试程序状态将很可能在中断状态之间急剧地变化。然而,有时,用户可能需要强制创建新的快照。这可以通过调试程序用户界面启用。
图1示出了通过轻量进程快照的历史调试。调试程序进程101被用于调试被调试程序进程102。调试程序进程101具有允许用户分析被调试程序进程的组件的用户界面。例如,用户界面可以提供示出调用堆栈103、模块104、线程105,以及变量检查106的窗口。被调试程序进程102包括,例如,线程107、模块108,以及虚拟存储器页面表109。虚拟存储器109指向由操作系统的虚拟存储器管理器111管理的物理存储器页面110。
在调试会话期间,创建轻量进程快照112和113。这些是在特定的时间取得的被调试程序进程102的快照。快照112、113可以由用户手动地启动,或当观察到特定事件或触发器时或以某些间隔,调试程序101可以自动地生成快照112、113。
快照112包括线程表114和模块表115,它们是在快照112被创建时的时间(T1)的调试程序101的内部表的副本。虚拟存储器页面表116指向在当快照112被创建的时间T1时正在使用的物理存储器页面110。最初,虚拟存储器109和虚拟存储器116将等同;然而,随着被调试程序进程继续运行,虚拟存储器109将随着其页面表指向更新的存储器位置110而变化。
类似地,在另一个时间(T2),响应于用户选择或由调试程序进程101观察到的事件或触发器的发生,创建进程快照113。快照113包括在当快照被创建的时间T2时的线程表117和模块表118的副本,以及当时的虚拟存储器页面表119的副本。
快照112、113允许调试程序进程101或用户回头看在快照112、113被创建的时间(T1,T2)时被调试程序进程102看来像什么,尽管被调试程序进程102在此期间变化。此外,调试程序进程还可以比较被调试程序进程102和/或进程快照112、113之间的状态,以生成在不同的时间的不同的进程状态之间的差异,以便用户可以看出进程什么部分变化以及如何变化。
在其他实施例中,可以创建快照112,并且原始被调试程序进程102可以被允许没有干扰地运行。然后,可以针对进程快照112进行测试,以观察对进程有何影响。如果进程快照112失败或由于测试而有其他问题,那么,那些问题将不会影响真正的运行中的进程102。
图2示出了根据一实施例的轻量进程快照。原始进程201包括指向存储在物理存储器203中的数据的页面表202。例如,进程201可以将变量X存储在指向实际存储了变量X的值的物理存储器位置205的页面表条目204中。
当从原始进程201创建进程快照206时,作为快照页面表207,复制原始页面表202。快照页面表207的内容与原始页面表202的内容相同,因为它在创建快照时就存在。例如,在进程快照206中,变量X指向快照页面表207(与原始页面表202一样,指向存储了变量X的值的物理存储器位置205)中的条目208。
原始进程201可以在创建快照之后继续运行。原始进程可以为变量X生成新的值,该新的值再次存储在原始页面表202的条目204中。然而,变量X的新的值存储在物理存储器203中的新的位置209。相应地,原始页面表202被更新,以指向物理存储器位置209,但是,快照页面表207维护其快照状态,并指向变量X的原始值仍驻留在那里的存储器位置205。
快照机制可以允许破坏性较小的调试检查。通常,当在调试进程时在中断模式下时,被调试程序进程被操作系统停止。这意味着,被调试程序进程内的代码不执行。这对于检测被调试程序状态是理想的,因为当进程被停止时该状态不能变化。然而,在某些情况下,停止进程会导致死锁或其他系统不稳定性。例如,当在其他进程之间共享被调试程序进程时,其他进程可能企图与处于中断模式中的共享的被调试程序进程进行通信。在最佳情况下,这会在其他进程中导致延迟,在最坏的情况下,导致死锁、进程损坏,以及不稳定性。轻量快照模型通过允许调试程序检测共享进程的轻量进程快照,而并非真正的进程,以在这样的情况下启用调试。真正的进程被允许在此检查期间继续执行。
图3是示出了根据一实施例的用于执行针对轻量进程快照的功能评估的方法的流程图。在步骤301中,当调试被调试程序进程时,调试程序进入中断模式。调试程序请求操作系统创建被调试程序进程的进程快照。在步骤302中,调试程序针对进程快照执行功能评估。调试程序可以通过循环回步骤302,针对进程执行多次功能评估。如果调试程序在功能评估中标识出问题,则它移到步骤303,并丢弃进程快照。
在步骤304中,调试程序请求操作系统创建被调试程序进程的新进程快照。过程返回到步骤302,针对新进程快照,执行附加功能评估。然后,调试程序可以通过返回到步骤302,对新进程快照再次执行功能评估。可另选地,在步骤305中,调试程序可以在对新进程快照执行功能评估时错过被调试程序进程中的线程。如果功能评估失败或遇到诸如死锁之类的问题,那么,过程返回到步骤303,以丢弃死锁的进程快照,并返回到步骤304,以创建另一个新进程快照。
可以理解,图3中所示出的过程的步骤301-305可以同时和/或按顺序执行。进一步可以理解,每一步骤都可以以任何顺序执行,可以执行一次或反复地执行。
图4示出了根据一实施例的在允许真正的被调试进程继续运行的同时调试程序针对轻量进程快照执行功能评估。调试程序进程401被用于调试被调试程序进程402。调试程序进程401具有允许用户与被调试程序过程的组件进行交互并分析它们的用户界面403和调试程序引擎404。例如,用户界面可以提供示出调用堆栈、模块、线程,以及变量值的窗口。被调试程序进程502包括,例如,线程405、模块406,以及虚拟存储器页面表407。虚拟存储器407指向由操作系统的虚拟存储器管理器409管理的物理存储器页面408。
调试程序进程401控制被调试程序进程402的执行,并可以挂起进程或允许进程运行。当用户希望对被调试程序进程执行功能评估时,调试程序进程401请求操作系统创建被调试程序进程402的轻量进程快照410。快照410包括线程表411和模块表412,它们是当创建快照410时被调试程序进程402上的线程和模块列表的副本。虚拟存储器页面表413指向在当快照410被创建时正在使用的物理存储器页面408。最初,虚拟存储器413和虚拟存储器407将等同。
然后,调试程序进程在错过在被调试程序进程402上的线程的同时针对进程快照410执行功能评估。如果进程快照410失败或由于功能评估具有其他问题,那么,那些问题将不会影响真正的被调试程序进程402。如果产生问题,则调试程序进程401会丢弃进程快照410,并请求操作系统创建新进程快照。
在操作系统支持创建、引导,以及恢复虚拟机的情况下,调试程序可以生成包含正在运行被调试程序进程的机器的完整的副本的新的虚拟机。然后,调试程序可以针对在虚拟机上运行的进程快照执行func-eval。这将允许完全隔离的外部状态,诸如内核句柄和文件写入。可以,例如,使用微软公司的Drawbridge微微进程创建轻量虚拟机来创建虚拟机,在轻量虚拟机中,操作系统实现驻留在被调试程序进程内,这允许内核状态被隔离。
调试程序可以使用虚拟机技术来针对正在运行被调试程序进程的机器的整个副本执行func-eval以代替仅针对进程快照。这允许隔离只使用进程快照不可能隔离的内核模式副作用以及外部副作用,诸如文件写入。此模型在此被称为“机器快照”。此模型需要支持非常快地创建、引导,以及回退虚拟机的极快的虚拟机技术。一个这样的新兴技术是微软公司的Drawbridge虚拟机模型。
如此处所使用的,轻量机器快照涵盖主机的宽泛的范围的副本,被调试程序进程需要变化的隔离和主机数据量。在一个实施例中,轻量机器快照是被调试程序主机的完全快照或副本。在其他实现中,机器快照可以是被调试程序进程以及内核的大部分的副本,而不是系统上别的事物。其他实现可以使用:单一被调试程序进程的快照,带有内核状态的进程快照,被调试程序机器上的一切,或多个主机。
图5示出了根据一实施例的在允许真正的被调试机器继续在主机上运行的同时调试程序针对轻量机器快照执行功能评估。主机501正在运行调试程序进程502,该调试程序进程502被用于调试也在主机501上运行的被调试程序进程503。用户界面以及调试程序进程501上的调试程序引擎允许用户与被调试程序进程503的组件进行交互并分析它们。被调试程序进程503中的虚拟存储器指向由操作系统的虚拟存储器管理器505管理的物理存储器页面504。
调试程序进程502控制被调试程序进程503的执行,并可以挂起进程或允许进程运行。当用户希望对被调试程序进程执行功能评估时,调试程序进程502请求操作系统创建虚拟机快照506。
虚拟机快照506是正在运行被调试程序进程503的主机501的完整的副本。虚拟机快照506包括进程快照507,该进程快照507是在虚拟机快照被创建时被调试程序进程503的完整的副本。进程快照506包括线程表模块表,这些表是当创建机器快照506时被调试程序进程503上的线程和模块列表的副本。虚拟存储器页面表507不指向主机存储器中的物理存储器页面504,而是指向虚拟机上的存储器页面508。虚拟机快照还包括内核状态509和从主机501复制的文件510。
在错过被调试程序进程503上的线程的同时,调试程序进程502针对虚拟机快照506执行功能评估。如果机器快照506失败或由于功能评估具有其他问题,那么,那些问题将不会影响真正的被调试程序进程503或在主机501上运行的任何其他进程。任何内核模式副作用或外部副作用,诸如文件写入,与虚拟机快照506隔离。如果产生问题,则调试程序机器502会丢弃机器快照506,并请求操作系统创建新机器快照。
图6示出了使用轻量进程快照的进程内的调试会话。调试程序进程601启动与被调试程序进程603的调试会话(602)。调试程序601请求(604)操作系统605创建被调试程序603的第一进程快照606。
调试程序601对进程快照606执行func-eval(607),它执行功能(608)并返回结果(609)。
然后,调试程序601对进程快照606执行损坏func-eval(610),它执行功能(611)并返回结果(612)。在执行功能(611)之后,进程快照606损坏。如此,调试程序601丢弃进程快照606,并请求(613)操作系统605创建第二进程快照614。
在没有错过的情况下执行func-eval608和611之后,在第一进程快照606死锁之后调试程序601创建第二进程快照614。然后,调试程序601对进程快照614执行线程错过func-eval(615),它在所有线程正在在被调试程序进程602中错过时执行功能(616)。快照进程614返回结果(617)。由于在快照进程614执行功能的同时被调试程序进程603中的所有线程已错过,因此,快照进程614不再是被调试程序进程603的准确的副本。相应地,调试程序601丢弃进程快照614,并请求(618)操作系统605创建第三进程快照619。
然后,调试程序601对进程快照619执行func-eval(620),它执行功能(621)并返回结果(622)。用户可以指示(623)调试程序601丢弃进程快照619,并创建新的快照。然后,调试程序601丢弃进程快照619,并请求(624)操作系统605创建第四进程快照625。
调试程序601对进程快照625执行线程错过func-eval(626),它在所有线程正在在被调试程序进程602中错过的同时执行功能(627)。快照进程625返回结果(628)。
当func-eval完成时,调试程序601结束调试(629)。
如果操作系统605支持虚拟机快照的创建,那么,进程快照606、614、609以及625可以被替换为轻量机器快照,以进一步保护并隔离被调试程序603。
图7示出了在其上面可以使用轻量进程快照来实现用于进程内的调试的图1-6的示例的合适的计算和网络环境700的示例。计算系统环境700只是合适计算环境的一个示例,而非意在暗示对本发明使用范围或功能有任何限制。本发明可用各种其他通用或专用计算系统环境或配置来操作。适用于本发明的公知的计算系统、环境和/或配置的示例包括,但不仅限于:个人计算机、服务器计算机、手持式或膝上型设备、平板计算机设备、多处理器系统、基于微处理器的系统、机顶盒、可编程消费电子产品、网络PC、小型计算机、大型计算机、包括上面的系统或设备中的任何一种的分布式计算环境等等。
本发明可在诸如程序模块等由计算机执行的计算机可执行指令的通用上下文中描述。一般而言,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。本发明也可以在其中任务由通过通信网络链接的远程处理设备执行的分布式计算环境中实现。在分布式计算环境中,程序模块可以位于包括存储器存储设备在内的本地和/或远程计算机存储介质中。
参考图7,用于实现本发明的各方面的示例性系统可包括计算机700形式的通用计算设备。组件可以包括,但不仅限于,各种硬件组件,诸如处理单元701、诸如系统存储器之类的数据存储器702,以及将包括数据存储器702的各种系统组件耦合到处理单元701的系统总线703。系统总线703可以是若干类型的总线结构中的任一种,包括使用各种总线体系结构中的任一种的存储器总线或存储器控制器、外围总线、以及局部总线。作为示例而非限制,这样的体系结构包括工业标准体系结构(ISA)总线、微通道体系结构(MCA)总线、增强型ISA(EISA)总线、视频电子标准协会(VESA)局部总线,以及也称为夹层(Mezzanine)总线的外围部件互连(PCI)总线。
计算机700通常包括各种计算机可读介质。计算机可读介质704可以是能由计算机700访问的任何可用介质,并包含易失性和非易失性介质以及可移动、不可移动介质,但是,不包括传播的信号。作为示例而非限制,计算机可读介质704可包括计算机存储介质和通信介质。计算机存储介质包括以存储诸如计算机可读的指令、数据结构、程序模块或其他数据之类的信息的任何方法或技术实现的易失性和非易失性、可移动和不可移动介质。计算机存储介质包括,但不仅限于,RAM、ROM、EEPROM、闪存或其他存储器技术、CD-ROM、数字多功能盘(DVD)或其他光盘存储、磁带盒、磁带、磁盘存储或其他磁存储设备,或可以用来存储所需信息并可以被计算机700访问的任何其他介质。通信介质通常以诸如载波或其他传输机制的已调制数据信号来体现计算机可读指令、数据结构、程序模块或其他数据,并包括任意信息传送介质。术语“已调制数据信号”是指其一个或多个特征以这样的方式设置或改变以便在信号中对信息进行编码的信号。作为示例而非限制,通信介质包括诸如有线网络或直接线连接之类的有线介质,以及诸如声学、RF、红外及其他无线介质之类的无线介质。上面各项中的任何项的组合也包括在计算机可读介质的范围内。计算机可读介质可以作为计算机程序产品,诸如存储在计算机存储介质上的软件,来实现。
数据存储器或系统存储器702包括易失性和/或非易失性存储器形式的计算机存储介质,如只读存储器(ROM)和随机存取存储器(RAM)。基本输入/输出系统(BIOS)通常存储在ROM中,包含了诸如在启动过程中帮助在计算机700内的元件之间传输信息的基本例程。RAM通常包含处理单元701可立即访问和/或目前正在由处理单元701操作的数据和/或程序模块。作为示例而非限制,数据存储器702保存了操作系统、应用程序、以及其它程序模块和程序数据。
数据存储器702也可以包括其他可移动/不可移动、易失性/非易失性计算机存储介质。仅作为示例,数据存储器702可以是从不可移动、非易失性磁介质中读取或向其写入的硬盘驱动器,从可移动、非易失性磁盘中读取或向其写入的磁盘驱动器,以及从诸如CDROM或其他光学介质等可移动、非易失性光盘中读取或向其写入的光盘驱动器。可在示例性操作环境中使用的其他可移动/不可移动、易失性/非易失性计算机存储介质包括但不限于,磁带盒、闪存卡、数字多功能盘、数字录像带、固态RAM、固态ROM等。以上描述并在图7中示出的驱动器及其相关联的计算机存储介质为计算机700提供了对计算机可读指令、数据结构、程序模块和其他数据的存储。
用户可通过用户界面705或诸如平板或者电子数字化仪、话筒、键盘和/或定点设备(通常指的是鼠标、跟踪球或触摸垫)之类的其他输入设备输入命令和信息。其他输入设备可以包括操纵杆、游戏手柄、圆盘式卫星天线、扫描仪等。另外,声音输入,使用手或手指的手势输入,或其他天然的用户界面(NUI)也可以与诸如麦克风、摄像机、平板、触摸板、手套,之类的输入设备,或其他传感器一起使用。这些及其他输入设备常常通过耦合到系统总线703的用户输入接口705连接到处理单元701,但是,也可以通过其他接口和总线结构,如并行端口、游戏端口、通用串行总线(USB)端口来进行连接。监视器706或其他类型的显示设备也通过诸如视频接口之类的接口连接至系统总线703。监视器706也可以与触摸屏面板等集成。注意到监视器和/或触摸屏面板可以在物理上耦合至其中包括计算设备700的外壳,诸如在平板型个人计算机中。此外,诸如计算设备700等计算机还可以包括其他外围输出设备,诸如扬声器和打印机,它们可以通过输出外围接口等连接。
计算机700可以使用到一个或多个远程设备(如远程计算机)的逻辑连接,以在联网或云计算环境中操作。远程计算机可以是个人计算机、服务器、路由器、网络PC、对等设备或其他公共网络节点等等,并通常包括上文参考计算机700所描述的许多或全部元件。图7中所示的逻辑连接包括一个或多个局域网(LAN)和一个或多个广域网(WAN),但也可以包括其他网络。这些联网环境在办公室、企业范围计算机网络、内联网和因特网中是常见的。
当用于联网的或云计算环境中时,计算机700通过网络接口或适配器707连接到公众或专用网络。在某些实施例中,还有调制解调器或用于通过网络建立通信的其他装置。可为内置或可为外置的调制解调器可以经由网络接口707或其他合适的机制连接至系统总线703。诸如包括接口和天线的无线网络组件可以通过诸如接入点或对等计算机之类的合适的设备连接到网络。在联网环境中,参考计算机700所描述的程序模块,或其某些部分,可以存储在远程存储器存储设备中。可以理解,所示的网络连接是示例性的,也可以使用在计算机之间建立通信链路的其他手段。
尽管用结构特征和/或方法动作专用的语言描述了本主题,但可以理解,所附权利要求书中定义的主题不必限于上述具体特征或动作。相反,上述具体特征和动作是作为实现权利要求的示例形式公开的。

Claims (9)

1.一种在计算环境中调试目标进程的方法,所述方法包括:
从所述目标进程生成轻量进程快照,所述轻量进程快照和目标进程被允许独立地运行,其中所述生成包括使用共享存储器页面以避免创建所述目标进程的完整的副本的需求;
针对所述轻量进程快照,执行功能评估;
当执行所述功能评估时检测死锁;
从所述目标进程生成第二轻量进程快照;以及
针对所述第二轻量进程快照执行功能评估,同时允许所有线程在所述功能评估期间执行,其中,所述目标进程中的所述线程被允许执行以避免当遇到线程间的依赖性时死锁所述目标进程。
2.如权利要求1所述的方法,其特征在于,所述轻量进程快照的所述功能评估的副作用与所述目标进程隔离。
3.如权利要求1所述的方法,还包括:
标识何时所述轻量进程快照由于所述功能评估的副作用或因为所述轻量进程快照已被损坏而不再表示所述目标进程;以及
创建所述目标进程的新的轻量进程快照。
4.如权利要求1所述的方法,还包括:
允许所述轻量快照进程中的所有线程在所述功能评估期间执行以避免死锁所述快照进程。
5.如权利要求1所述的方法,还包括:
创建主存所述目标进程的机器的轻量机器快照;
在所述轻量机器快照上运行所述轻量进程快照;
针对在所述轻量机器快照上运行的所述轻量进程快照,执行所述功能评估;以及
允许所述目标进程中的所有线程在所述功能评估期间执行以避免当遇到线程间的依赖性时死锁所述目标进程。
6.如权利要求5所述的方法,其特征在于,所述功能评估对所述轻量机器快照的副作用与所述目标进程并与所述目标进程的内核隔离。
7.在计算环境中,一种包括用于调试目标进程的功能的计算机系统,所述计算机系统包括:一个或多个处理器;一个或多个计算机可读介质;实现为存储在所述计算机可读介质上的计算机可执行指令的一个或多个计算机模块,所述计算机可执行指令在由一个或多个处理器执行时,导致所述处理器执行下列各项:
从所述目标进程生成轻量进程快照,所述轻量进程快照和目标进程被允许独立地运行,其中所述生成包括使用共享存储器页面以避免创建所述目标进程的完整的副本的需求;
针对所述轻量进程快照,执行功能评估;
当执行所述功能评估时检测死锁;
从所述目标进程生成第二轻量进程快照;以及
针对所述第二轻量进程快照执行功能评估,同时允许所有线程在所述功能评估期间执行,其中,所述目标进程中的所述线程被允许执行以避免当遇到线程间的依赖性时死锁所述目标进程。
8.如权利要求7所述的计算机系统,其特征在于,还包括:
标识何时所述轻量进程快照由于所述功能评估的副作用或当所述轻量进程快照已被损坏而不再表示所述目标进程;以及
创建所述目标进程的新的轻量进程快照。
9.如权利要求7所述的计算机系统,其特征在于,还包括:
创建主存所述目标进程的机器的轻量机器快照;
在所述轻量机器快照上运行所述轻量进程快照;以及
针对在所述轻量机器快照上运行的所述轻量进程快照,执行所述功能评估。
CN201380041514.5A 2012-08-04 2013-08-01 使用轻量进程快照的功能评估 Active CN104520820B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/567,036 2012-08-04
US13/567,036 US9710357B2 (en) 2012-08-04 2012-08-04 Function evaluation using lightweight process snapshots
PCT/US2013/053111 WO2014025595A1 (en) 2012-08-04 2013-08-01 Function evaluation using lightweight process snapshots

Publications (2)

Publication Number Publication Date
CN104520820A CN104520820A (zh) 2015-04-15
CN104520820B true CN104520820B (zh) 2018-02-06

Family

ID=48980341

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201380041514.5A Active CN104520820B (zh) 2012-08-04 2013-08-01 使用轻量进程快照的功能评估

Country Status (5)

Country Link
US (1) US9710357B2 (zh)
EP (2) EP2880537B1 (zh)
CN (1) CN104520820B (zh)
BR (1) BR112015002451B1 (zh)
WO (1) WO2014025595A1 (zh)

Families Citing this family (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8909990B2 (en) 2012-08-04 2014-12-09 Microsoft Corporation Historical software diagnostics using lightweight process snapshots
US9317349B2 (en) 2013-09-11 2016-04-19 Dell Products, Lp SAN vulnerability assessment tool
US9396200B2 (en) * 2013-09-11 2016-07-19 Dell Products, Lp Auto-snapshot manager analysis tool
US10223230B2 (en) 2013-09-11 2019-03-05 Dell Products, Lp Method and system for predicting storage device failures
US9720758B2 (en) 2013-09-11 2017-08-01 Dell Products, Lp Diagnostic analysis tool for disk storage engineering and technical support
US9454423B2 (en) 2013-09-11 2016-09-27 Dell Products, Lp SAN performance analysis tool
US10289411B2 (en) * 2013-11-18 2019-05-14 Microsoft Technology Licensing, Llc Diagnosing production applications
US9436411B2 (en) 2014-03-28 2016-09-06 Dell Products, Lp SAN IP validation tool
US9612939B2 (en) 2014-10-29 2017-04-04 Microsoft Technology Licensing, Llc. Diagnostic workflow for production debugging
WO2016082191A1 (zh) * 2014-11-28 2016-06-02 华为技术有限公司 访问文件的方法和装置
US9600682B2 (en) * 2015-06-08 2017-03-21 Accenture Global Services Limited Mapping process changes
US9959197B2 (en) * 2015-08-31 2018-05-01 Vmware, Inc. Automated bug detection with virtual machine forking
CN108604992B (zh) * 2016-05-26 2020-09-29 华为技术有限公司 使用主机内核资源的轻量级虚拟机之间的软件定义开关的系统和方法
CN110019629B (zh) * 2017-12-28 2024-03-26 上海擎感智能科技有限公司 地图快照方法及智能终端
US10541042B2 (en) 2018-04-23 2020-01-21 Microsoft Technology Licensing, Llc Level-crossing memory trace inspection queries
US10747645B2 (en) 2018-04-27 2020-08-18 Microsoft Technology Licensing, Llc Selectively tracing portions of computer process execution
US10740219B2 (en) 2018-04-27 2020-08-11 Workman Nydegger Selectively tracing portions of computer process execution
US10698792B2 (en) 2018-05-02 2020-06-30 Microsoft Technology Licensing, Llc Execution control with cross-level trace mapping
US10693753B2 (en) 2018-05-31 2020-06-23 Hewlett Packard Enterprise Development Lp Network device snapshots
US11983094B2 (en) 2019-12-05 2024-05-14 Microsoft Technology Licensing, Llc Software diagnostic context selection and use
US11106522B1 (en) * 2020-11-20 2021-08-31 Oracle International Corporation Process memory resurrection: running code in-process after death
CN113885967B (zh) * 2021-10-22 2024-02-13 北京字跳网络技术有限公司 一种小程序的启动方法、装置、设备及介质
CN113886774B (zh) * 2021-12-07 2022-02-11 北京微步在线科技有限公司 一种反调试方法及装置

Family Cites Families (51)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5179702A (en) * 1989-12-29 1993-01-12 Supercomputer Systems Limited Partnership System and method for controlling a highly parallel multiprocessor using an anarchy based scheduler for parallel execution thread scheduling
US5630047A (en) * 1995-09-12 1997-05-13 Lucent Technologies Inc. Method for software error recovery using consistent global checkpoints
US6094530A (en) * 1998-04-29 2000-07-25 Intel Corporation Remotely monitoring execution of a program
US6988271B2 (en) * 1998-10-02 2006-01-17 Microsoft Corporation Heavyweight and lightweight instrumentation
US6671825B1 (en) * 1999-11-19 2003-12-30 Oracle International Corporation Method and apparatus for debugging a software program
US6839894B1 (en) * 1999-11-19 2005-01-04 Oracle International Corporation Method and apparatus for debugging a software program using dynamic debug patches and copy on write views
US20030005407A1 (en) * 2000-06-23 2003-01-02 Hines Kenneth J. System and method for coordination-centric design of software systems
US6766472B2 (en) * 2000-09-22 2004-07-20 Microsoft Corporation Systems and methods for replicating virtual memory on a host computer and debugging using the replicated memory
CA2321019A1 (en) * 2000-09-27 2002-03-27 Ibm Canada Limited-Ibm Canada Limitee Capturing snapshots of a debuggee's state during a debug session
US6769077B2 (en) * 2000-12-20 2004-07-27 Microsoft Corporation System and method for remotely creating a physical memory snapshot over a serial bus
US7917895B2 (en) * 2001-07-27 2011-03-29 Smartesoft, Inc. Automated software testing and validation system
GB2381886B (en) * 2001-11-07 2004-06-23 Sun Microsystems Inc Computer system with virtual memory and paging mechanism
US6988264B2 (en) * 2002-03-18 2006-01-17 International Business Machines Corporation Debugging multiple threads or processes
CA2383832A1 (en) * 2002-04-24 2003-10-24 Ibm Canada Limited-Ibm Canada Limitee System and method for intelligent trap analysis
US7434229B2 (en) * 2002-07-31 2008-10-07 Genesys Telecommunications Laboratories, Inc. Method for improving temporal consistency and snapshot recency in a monitored real-time software-reporting-application architecture
US7197745B2 (en) * 2003-05-02 2007-03-27 Microsoft Corporation User debugger for use on processes running in a high assurance kernel in an operating system
US20050071824A1 (en) * 2003-08-22 2005-03-31 K. N. Keerthi Bhushan Method and system for executing software on non-native platforms
US7149929B2 (en) * 2003-08-25 2006-12-12 Hewlett-Packard Development Company, L.P. Method of and apparatus for cross-platform core dumping during dynamic binary translation
US7150006B2 (en) * 2003-11-03 2006-12-12 Microsoft Corporation Techniques for managed code debugging
US7222264B2 (en) * 2004-03-19 2007-05-22 Intel Corporation Debug system and method having simultaneous breakpoint setting
US7650593B2 (en) 2004-03-25 2010-01-19 Microsoft Corporation Proxy objects for display
US7587635B2 (en) * 2004-10-04 2009-09-08 Cisco Technology, Inc. Method of debugging “active” unit using “non-intrusive source-level debugger” on “standby” unit of high availability system
US7647589B1 (en) * 2005-02-07 2010-01-12 Parallels Software International, Inc. Methods and systems for safe execution of guest code in virtual machine context
GB0521465D0 (en) * 2005-10-21 2005-11-30 Law Gregory E W System and method for debugging of computer programs
US9268666B2 (en) * 2005-10-21 2016-02-23 Undo Ltd. System and method for debugging of computer programs
US7669186B2 (en) * 2005-11-16 2010-02-23 Sun Microsystems, Inc. Debugging applications at resource constrained virtual machines using dynamically installable lightweight agents
US7913057B2 (en) 2006-01-27 2011-03-22 Graphics Properties Holdings, Inc. Translation lookaside buffer checkpoint system
US7849446B2 (en) * 2006-06-09 2010-12-07 Oracle America, Inc. Replay debugging
US8429613B2 (en) * 2006-10-31 2013-04-23 Microsoft Corporation Stepping and application state viewing between points
US20080209422A1 (en) * 2007-02-28 2008-08-28 Coha Joseph A Deadlock avoidance mechanism in multi-threaded applications
US8166477B1 (en) * 2007-03-23 2012-04-24 Parallels IP Holdings GmbH System and method for restoration of an execution environment from hibernation into a virtual or physical machine
US8069371B2 (en) * 2007-04-26 2011-11-29 Hewlett-Packard Development Company, L.P. Method and system for remotely debugging a hung or crashed computing system
US8239832B2 (en) * 2007-05-25 2012-08-07 Microsoft Corporation In-process debugging using external debugging infrastructure
US7970872B2 (en) * 2007-10-01 2011-06-28 Accenture Global Services Limited Infrastructure for parallel programming of clusters of machines
US8336029B1 (en) * 2007-11-08 2012-12-18 Google Inc. Debugger connection
US8769502B2 (en) * 2007-12-21 2014-07-01 Sap Ag Template based asynchrony debugging configuration
US8196140B2 (en) 2008-01-11 2012-06-05 Microsoft Corporation Service function redirection for avoiding function evaluation blockages
US7886021B2 (en) * 2008-04-28 2011-02-08 Oracle America, Inc. System and method for programmatic management of distributed computing resources
US8423961B2 (en) * 2008-06-06 2013-04-16 Microsoft Corporation Simulating operations through out-of-process execution
US9703678B2 (en) * 2008-12-23 2017-07-11 Microsoft Technology Licensing, Llc Debugging pipeline for debugging code
US8402318B2 (en) * 2009-03-24 2013-03-19 The Trustees Of Columbia University In The City Of New York Systems and methods for recording and replaying application execution
US8776028B1 (en) * 2009-04-04 2014-07-08 Parallels IP Holdings GmbH Virtual execution environment for software delivery and feedback
US8793666B2 (en) * 2009-12-22 2014-07-29 Sap Ag Multidimensional debugger
US8972953B2 (en) * 2010-04-16 2015-03-03 Salesforce.Com, Inc. Methods and systems for internally debugging code in an on-demand service environment
US8572579B2 (en) * 2010-08-19 2013-10-29 Oracle International Corporation Break on next called function or method in java debugger agent
US8776026B2 (en) * 2010-10-01 2014-07-08 Ecole Polytechnique Federale De Lausanne System and method for in-vivo multi-path analysis of binary software
US9720808B2 (en) * 2011-11-29 2017-08-01 Red Hat, Inc. Offline debugging using a replicated operating environment
US8990780B2 (en) * 2012-03-29 2015-03-24 International Business Machines Corporation Setting breakpoints in optimized instructions
US8856600B2 (en) * 2012-06-21 2014-10-07 Breakingpoint Systems, Inc. JTAG-based programming and debug
US9009679B2 (en) * 2012-06-28 2015-04-14 International Business Machines Corporation Determining snapshot placement
US8909990B2 (en) * 2012-08-04 2014-12-09 Microsoft Corporation Historical software diagnostics using lightweight process snapshots

Also Published As

Publication number Publication date
BR112015002451A2 (pt) 2017-08-01
EP2880537B1 (en) 2019-09-25
WO2014025595A1 (en) 2014-02-13
US9710357B2 (en) 2017-07-18
EP2880537A1 (en) 2015-06-10
CN104520820A (zh) 2015-04-15
EP3591533A1 (en) 2020-01-08
BR112015002451B1 (pt) 2021-11-23
US20140040897A1 (en) 2014-02-06

Similar Documents

Publication Publication Date Title
CN104520820B (zh) 使用轻量进程快照的功能评估
Hochschild et al. Cores that don't count
CN105745626B (zh) 基于进程快照的诊断生产应用
Bornholt et al. Using lightweight formal methods to validate a key-value storage node in Amazon S3
KR102268355B1 (ko) 클라우드 배치 기반구조 검증 엔진
JP4888272B2 (ja) ソフトウェアのシミュレーション方法、ソフトウェアのシミュレーションのためのプログラム、及びソフトウェアのシミュレーション装置
US9183093B2 (en) Virtual machine crash management
CN104520819A (zh) 使用轻量进程快照的历史软件诊断
Candea et al. Autonomous recovery in componentized internet applications
CN106557703A (zh) 安全性检测
CN105683985B (zh) 用于虚拟机内省的系统、方法及非暂时性计算机可读介质
US11500854B2 (en) Selective data synchronization to troubleshoot production environment failures
US11030075B2 (en) Efficient register breakpoints
CN115840691A (zh) 远程修复崩溃进程
Van Der Kouwe et al. On the soundness of silence: Investigating silent failures using fault injection experiments
Shi et al. A command-level study of Linux kernel bugs
US10810070B2 (en) Simulator based detection of a violation of a coherency protocol in an incoherent shared memory system
US11586527B2 (en) Automated algorithmic verification in an embedded complex distributed storage environment
King et al. Csi kernel: Finding a needle in a multiterabyte haystack
Bergen et al. Post-debugging in large scale big data analytic systems
Simmhan et al. Building reliable data pipelines for managing community data using scientific workflows
JP2016076152A (ja) エラー検出システム、エラー検出方法およびエラー検出プログラム
MODEL Testing the Reconfiguration of Adaptive Systems
Vasavada Innovative Schemes to Suppport Incremental Checkpointing.
Subhraveti Record and vPlay: Problem Determination with Virtual Replay Across Heterogeneous Systems

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
TA01 Transfer of patent application right

Effective date of registration: 20171016

Address after: Washington State

Applicant after: Micro soft technique license Co., Ltd

Address before: Washington State

Applicant before: Microsoft Corp.

TA01 Transfer of patent application right
GR01 Patent grant
GR01 Patent grant