CN110062927B - 用于可执行代码的并行重放的方法、系统和存储设备 - Google Patents
用于可执行代码的并行重放的方法、系统和存储设备 Download PDFInfo
- Publication number
- CN110062927B CN110062927B CN201780076149.XA CN201780076149A CN110062927B CN 110062927 B CN110062927 B CN 110062927B CN 201780076149 A CN201780076149 A CN 201780076149A CN 110062927 B CN110062927 B CN 110062927B
- Authority
- CN
- China
- Prior art keywords
- trace
- segments
- executable
- subset
- interest
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3636—Software debugging by tracing the execution of the program
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本文中的实施例涉及对代码执行的并行重放。实施例解析包括多个追踪数据流的追踪数据,该多个追踪数据流各自表示对多个可执行实体中的对应可执行实体的执行,并且标识多个追踪段,该多个追踪段各自表示由可执行实体中的一个可执行实体在一段时间内执行的一个或多个事件。该实施例定义追踪段之间的排序,标识可执行实体中的至少一个可执行实体中的感兴趣点,并且标识追踪段的当根据排序被线性地重放时将遇到感兴趣点的子集。该实施例在执行池中对追踪段的子集排队以用于由一个或多个处理器重放。然后,基于追踪数据,该实施例使用(多个)处理器来并行地重放追踪段的子集中的两个或更多个追踪段。
Description
背景技术
当在软件应用的开发期间写代码时,开发者通常花费大量时间“调试”代码以找到代码中的运行时错误。在这样做时,开发者可以采取若干方式来再现并定位源代码缺陷,诸如基于不同输入来观察程序的表现,插入调试代码(例如,以打印变量值,以跟踪执行的分支,等等),暂时移除代码部分等等。查出运行时错误以查明代码缺陷可能占用应用开发时间的重大部分。
许多类型的调试应用(“调试器”)已经被开发以便辅助开发者进行代码调试过程。许多这样的工具向开发者提供跟踪、可视化以及改变计算机代码的执行的能力。例如,调试器可以使代码指令的执行可视化,可以在代码执行期间的各个时间呈现变量值,可以使得开发者能够改变代码执行路径和/或可以使得开发者能够在代码中设置“断点”(其当在执行期间被到达时,使代码的执行被挂起)等等。
调试应用的新兴形式实现“时间行进”、“反向”、或“历史性”调试,其中程序的执行由追踪应用记录/追踪到一个或多个追踪文件中,其然后可以被用于重放对程序的执行以用于前向和后向分析。例如,时间行进调试器可以使得开发者能够设置前向断点(类似传统调试器)以及反向断点。然而,为了确保追踪数据的正确性,这些传统时间行进调试器强制实行一些限制,其中程序代码如同其是单线程一样被追踪并且在单个处理器上执行—即使在代码被编写为多线程。这转而导致放慢了这些追踪的重放执行,因为重放同样是单线程的。
发明内容
本文中描述的至少一些实施例利用包括独立地记录对不同可执行实体(例如,线程)的追踪的数据流的追踪,以便实现对可执行实体的并行重放。利用这些追踪提供快速重放执行,因为追踪的段可以在多个处理单元上被并行地重放。因此,实现了一种计算机系统以比传统时间行进调试器快得多地提供调试过程中的结果。例如,在许多情况中,本文中描述的实施例可以使得时间行进调试器能够并行地重放多个追踪数据流的多个段,以便足够快速地(例如,在50毫秒内)(重放的持续时间对于人类用户而言是感觉不到的)定位指定的断点。
一些实施例涉及用于执行对代码执行的并行重放的方法、系统和/或计算机程序产品。追踪数据被解析。追踪数据包括多个追踪数据流,多个追踪数据流各自表示对多个可执行实体中的对应可执行实体的执行。解析包括从多个追踪数据流标识来自多个追踪数据流之中的多个追踪段。每个追踪段表示由可执行实体中的一个可执行实体在一段时间内执行的一个或多个事件。多个追踪段之间的排序被定义,并且多个可执行实体中的至少一个可执行实体中的感兴趣点被标识。多个追踪段的当根据排序被线性地重放时将遇到感兴趣点的子集被标识。多个追踪段的子集在执行池中被排队以用于由一个或多个处理器重放,并且(多个)处理器使用追踪数据来并行地重放多个追踪段的子集中的两个或更多个追踪段。
提供本发明内容从而以简化的形式介绍下面在具体实施方式中被进一步描述的一系列概念。本发明内容并不旨在确定要求保护的主题的关键特征或必要特征,也并不旨在被用作确定要求保护的主题的范围的辅助。
附图说明
为了描述能够获得本发明的以上所述的优点和特征以及其他优点和特征的方式,将通过参考在附图中图示的其具体实施例来呈现以上简单描述的本发明的更具体的描述。在理解这些附图仅仅描绘本发明的典型实施例并且因此不被认为是对其范围的限制的情况下,本发明利用在对附图的使用中的附加的特异性和细节而被描述和解释,在附图中:
图1图示了促进对程序代码的并行重放的示例计算环境;
图2图示了示例追踪文件;
图3图示了被记录在图2的追踪文件中的可执行实体的运行的示例时序图;
图4图示了示例追踪重放部件的细节;以及
图5图示了用于执行对代码运行的并行重放的示例方法的流程图。
具体实施方式
本文中描述的至少一些实施例利用包括独立地记录对不同可执行实体(例如,线程)的追踪的数据流的追踪,以便实现对可执行实体的并行重放。利用这些追踪提供快速重放执行,因为追踪的段可以在多个处理单元上被并行地重放。因此,一种计算机系统被支持以比传统时间行进调试器快得多地提供调试会话中的结果。例如,在许多情况中,本文中描述的实施例可以使得时间行进调试器能够并行地重放多个追踪数据流的多个段,以便足够快速地(例如,在50毫秒内)(重放的持续时间对于人类用户而言是感觉不到的)定位指定的断点。
为了完成前述内容,图1图示了促进对程序代码的并行重放的示例计算环境100。如所描绘的,实施例可以包括或利用包括计算机硬件的专用计算机系统或通用计算机系统101,计算机硬件诸如例如一个或多个处理器102、系统存储器103、一个或多个数据存储库104和/或输入/输出硬件105(例如,诸如描绘的键盘/鼠标硬件105a、联网硬件105b以及显示设备105c)。
本发明的范围内的实施例包括用于承载或存储计算机可执行指令和/或数据结构的物理介质和其他计算机可读介质。这样的计算机可读介质可以是能够由计算机系统101访问的任何可用介质。存储计算机可执行指令和/或数据结构的计算机可读介质是计算机存储设备。承载计算机可执行指令和/或数据结构的计算机可读介质是传输介质。因此,通过举例而非限制,本发明的实施例可以包括至少两种截然不同的种类的计算机可读介质:计算机存储设备和传输介质。
计算机存储设备是存储计算机可执行指令和/或数据结构的物理硬件设备。计算机存储设备包括各种计算机硬件,诸如RAM、ROM、EEPROM、固态驱动(“SSD”)、闪存、相位变化存储器(“PCM”)、光盘存储装置、磁盘存储装置或其他磁存储设备,或者可以被用于存储以计算机可执行指令或数据结构的形式的程序代码并且可以由计算机系统101访问并且执行以实施本发明的所公开的功能的任何其他(多个)硬件设备。因此,例如,计算机存储设备可以包括所描绘的系统存储器103、可以存储计算机可执行指令和/或数据结构的所描绘的数据存储库104或者诸如处理器上存储装置的其他存储装置,如稍后讨论的。
传输介质可以包括能够被用于承载以计算机可执行指令或数据结构的形式的程序代码并且能够由计算机系统101访问的网络和/或数据链路。“网络”被定义为实现在计算机系统和/或模块和/或其他电子设备之间的电子数据的传输的一个或多个数据链路。当信息通过网络或另一通信连接(硬接线的、无线的或硬接线或无线的组合)而被传送或提供给计算机系统时,计算机系统可以将连接视为传输介质。以上的组合还应当被包括在计算机可读介质的范围内。例如,输入/输出硬件105可以包括连接网络和/或可以被用于执行计算机可执行指令或数据结构形式的程序代码的数据链接的联网硬件105b(例如,硬接线或无线网络接口模块)。
另外,响应于到达各种计算机系统部件,以计算机可执行指令或数据结构的形式的程序代码能够自动地从传输介质被传送给计算机存储设备(或者反之亦然)。例如,通过网络或数据链路而被接收到的计算机可执行指令或数据结构能够被缓冲在联网硬件105b内的RAM中,并且之后最终被传送给系统存储器103和/或被传送给在计算机系统101处的较少易失性计算机存储设备(例如,数据存储库104)。因此,应当理解,计算机存储设备能够被包括在也(或甚至主要)利用传输介质的计算机系统部件中。
计算机可执行指令包括例如当在(多个)处理器102处被执行时使得计算机系统101执行特定功能或功能组的指令和数据。计算机可执行指令可以例如为二进制、诸如汇编语言的中间格式指令或甚至源代码。
本领域技术人员将领会到,本发明可以在具有许多类型的计算机系统配置的网络计算环境中被实践,许多类型的计算机系统配置包括个人计算机、台式计算机、膝上型计算机、消息处理器、手持设备、多处理器系统、基于微处理器的或可编程的消费者电子设备、网络PC、微型计算机、大型计算机、移动电话、PDA、平板计算机、寻呼机、路由器、交换机等等。本发明还可以在分布式系统环境中被实践,在分布式系统环境中通过网络(通过硬接线数据链路、无线数据链路或通过硬接线数据链路和无线数据链路的组合)而被链接的本地计算机系统和远程计算机系统两者都执行任务。因此,在分布式系统环境中,计算机系统可以包括多个组成计算机系统。在分布式系统环境中,程序模块可以被定位在本地存储器存储设备和远程存储器存储设备两者中。
如所图示,数据存储库104可以存储表示应用代码的计算机可执行指令和/或数据结构,诸如例如追踪记录部件106a、追踪重放部件106b、操作系统107以及包括可执行代码108a的部分的应用108。数据存储库104还可以存储其他类型的数据,诸如一个或多个追踪文件109。当应用代码正在执行(例如,使用(多个)处理器102))时,系统存储器103可以存储对应的运行时数据,诸如运行时数据结构、计算机可执行指令等等。因此,图1将系统存储器103图示为包括运行时记录/重放数据106’、运行时操作系统数据107’以及运行时应用数据108a’(运行时可执行代码数据108a’)。
追踪记录部件106a可用于追踪诸如包括它的可执行代码部分108a的应用108的应用的执行,并且将追踪数据存储在(多个)追踪文件109中。在一些实施例中,追踪记录部件106a是独立应用,而在其他实施例中,其被集成到诸如操作系统107、管理程序等等的另一软件部件中。追踪记录部件106a还可以存在于完全不同的计算机系统处。因此,追踪记录部件106a可以追踪在另一计算机系统处对代码的执行。然后,从该追踪得到的(多个)追踪文件109可以(例如,使用联网硬件105b)被传送给计算机系统101以用于由追踪重放部件106b重放。尽管(多个)追踪文件109被描绘为被存储在数据存储库104中,但是它们也可以被排他地或临时地记录在系统存储器103中或在某个其他存储设备处。
图1还包括(多个)处理器102的内部硬件部件的简化表示。如图示的,每个处理器102包括多个处理单元102a。每个处理单元可以是物理的(即,物理处理器核心)和/或逻辑的(即,由物理核心呈现的支持超线程的逻辑核心,其中多于一个应用线程在物理核心处执行)。因此,例如,即使处理器102可以在一些实施例中包括仅仅单个物理处理单元(核心),其也可以包括由该单个物理处理单元呈现的两个或更多个处理单元102a。
每个处理单元102a执行由应用限定的处理器指令(例如,追踪记录部件106a、追踪重放部件106b、操作系统107、应用108等等),并且这些指令从预定义处理器指令集架构之中被选择。每个处理器102的特定指令集架构基于处理器制造商和处理器模型而变化。常见的指令集架构包括来自INTER,INC.的IA-64和IA-32架构、来自ADVANCED MICRO DEVICES,INC.的AMD64架构以及来自ARM HOLDINGS,PLC的各种高级RISC机器(“ARM”)架构,但是大量其他指令集架构存在并且可以由本发明使用。总体而言,“指令”是由处理器可执行的代码的最小外部可见(即,在处理器外部)单元。
每个处理单元102a从共享的处理器高速缓存102b(即,由处理单元102a共享)获得处理器指令,并且基于共享的高速缓存102a中的数据、基于寄存器102c中的数据和/或在没有输入数据的情况下执行处理器指令。总体而言,共享的高速缓存102b是存储系统存储器103的部分的处理器上副本的小量随机存取存储器(即,相对于常见量的系统存储器103而言小)。例如,当执行可执行代码部分108b时,共享的高速缓存102b包含运行时可执行代码数据108b’的部分。如果(多个)处理单元102a需要还被未存储在共享的高速缓存102b中的数据,则“高速缓存未命中”发生,并且该数据从系统存储器103被取读(可能逐出来自共享的高速缓存102b的一些其他数据)。寄存器102c是基于硬件的存储位置,其基于(多个)处理器102的指令集架构而被定义。
如以上所提到的,为了执行并行重放,实施例利用由追踪记录部件106a记录的追踪文件,其包括针对不同可执行实体的独立地记录的数据流,诸如应用108的一个或多个代码部分108a的执行的不同线程。例如,图2图示了由追踪记录部件106a生成的示例追踪文件200(例如,对应于图1的(多个)追踪文件109)。在应用(例如,应用108)的执行期间,追踪记录部件106a在追踪文件200中记录针对每个处理单元102a并且因此针对应用的每个可执行实体(例如,不同线程、对应于应用108的可执行代码108a的不同部分的不同可执行实体等等)的单独的数据流201。示例追踪文件200包括三个数据流201a-201c(并且因此将对应于执行三个不同可执行实体的三个处理单元),但是追踪文件200可以包括取决于在计算机系统101处可用的处理单元102a的数量(它们是在单个处理器102中还是多个处理器102中)和/或由应用108创建的可执行实体的数量的任何数量的数据流201。
数据流201可以被包括于单个文件中,或者可以各自被存储在不同文件中。每个数据流201包括数据分组202,数据分组202存储追踪数据,追踪数据由追踪重放部件106b可使用以通过在合适的时间向可执行实体的可执行代码提供合适的记录的状态数据(例如,寄存器值、存储器地址和值等等)再现对对应的可执行实体的执行。因此,使用数据流201中的信息,并且使用其执行被追踪的实际可执行代码,对该代码的执行的完整再现可以被再现。
在图2中,数据分组202被描绘为由虚线分开。因此,例如,数据流201a中的数据分组中的两个数据分组被标识为数据分组202a和202b。如所描绘的,个体数据分组202可以具有不同大小,这取决于追踪文件实现方式和被存储于每个分组中的特定数据。可以被包括于数据分组中的示例数据包括用于标识执行的代码指令的信息、被提供给该代码指令的寄存器值、读取的存储器地址/值、执行代码指令的副作用(例如,得到的寄存器值)等等。
如提到的,追踪记录部件106a在正被追踪的代码的执行期间独立地记录每个数据流201,从而使得由追踪记录部件106a记录的可执行事件到一个数据流中的数据分组的计时总体上独立于由追踪记录部件106a记录的事件到另一数据流中的数据分组的计时。因此,重放部件106b可以总体上独立地重放每个数据流201。然而,追踪文件200还存储记录跨数据流201“可排序”的某些事件的执行的计时和序列的序列化事件。在一些实施例中,这些可排序事件使用包括单调递增的数字(“MIN”)(其被保证不重复)的序列号而被记录。例如,图2的追踪文件200包括十二个序列号203a-203l,每个对应于跨数据流201a-201c的不同可排序事件的发生。序列号(以及它们表示的事件)可以被记录在数据分组202中,或者可以被单独地记录。
可排序事件可以根据“追踪存储器模型”而被定义,追踪存储器模型被用于标识如何存储跨诸如线程的可执行实体的交互(例如,基于线程如何通过共享的存储器交互,它们对共享存储器中的数据的共享使用等等)。取决于实现方式,追踪存储器模型可以弱于或强于由处理器102使用的存储器模型。使用的追踪存储器模型可以是由被用于编译代码(例如,C++14)的编程语言定义的存储器模型或者用于追踪的目的而被定义的一些其他存储器模型。
如所描绘的,追踪文件200还可以包括关键帧(例如,关键帧204a-204o)。关键帧是存储足够的信息以从关键帧向前的时间重放对可执行实体的执行的一种类型的数据分组。例如,关键帧可以存储针对所有相关处理器寄存器的值、从该点向前再现存储器值需要的信息等等。在图2中,在每个追踪数据流201的开始存在关键帧(即,关键帧204a-204c)。关键帧204a-204c可以表示在每个可执行实体的执行的开始的状态。尽管未被明确描绘,但是要指出,任何数量的关键帧可以在任何点处被保存在数据流201中,并且不需要跨数据流同时发生。因此,使用关键帧204,追踪重放部件106b被支持以在各个点处启动对每个追踪数据流201的重放。如稍后所讨论的,使用关键帧和/或可排序事件,对不同追踪数据流的重放的启动可以被并行地执行。尽管不必要,但是在一些实施例中,关键帧可以结合每个可排序事件的发生被存储(例如,关键帧204d-204o)。
图3图示了被记录在图2的追踪文件200中的可执行实体的执行的示例时序图300。因此,例如,图3图示了如由数据流201a记录的可执行实体301a的执行的时间线、如由数据流201b记录的可执行实体301b的执行的时间线以及如由数据流201c记录的可执行实体301c的执行的时间线。在这些事件线中,时序图300还表示对应于图2的十二个可排序事件203a-203l的可排序事件303a-303l的发生。使用可排序事件303a-303l,对应的可执行实体的追踪的可执行事件的不同段能够被标识。
例如,基于数据流201a的追踪数据,时序图300表示可执行实体301a执行了在序列号一(303a)与序列号四(303d)之间的可执行事件的段302a,在序列号四(303d)与序列号五(303e)之间的可执行事件的段302d以及在序列号五(303e)、八(303h)以及九(303i)之间的可执行事件的段302e和302h。类似地,基于数据流201b的追踪数据,时序图300表示可执行实体301b执行了在序列号二(303b)、六(303f)、十(303j)以及十一(303k)之间的可执行事件的段302b、302f以及302i。最终,基于数据流201c的追踪数据,时序图300表示可执行实体301c执行了在序列号三(303c)、七(303g)以及十二(303l)之间的可执行事件的段302c和302g。
可执行事件的部分排序可以使用时序图300基于序列号303a-303l和/或任何关键帧而被标识。例如,基于序列号303a-303l,已知在追踪时间,段302a中的可执行事件在段302d-302g中的可执行事件之前被执行。然而,由于不同可执行实体301a-301b被独立地执行和追踪,所以在追踪时间段302a-302c中的个体事件相对于彼此执行的特定顺序是不知道的。由于不同的可执行实体301a-301b被独立地执行和追踪,并且如果关键帧结合每个序列号被保存,则针对不同可执行实体的追踪的事件的段302d-302g可以被并行地重放。例如,可执行实体301a的段302a中的可执行事件可以与可执行实体301b和301c的段302b和302c中的可执行事件并行地被执行。
附加地,借助于在每个追踪的开始并且贯穿每个追踪周期性地记录的关键帧,针对相同可执行实体的追踪的事件的段也可以被并行地重放。因此,假设在这一示例中关键帧结合每个序列号被保存,则单个可执行实体内的每个端也可以被并行地重放。例如,可执行实体301a的段302a、302d、302e以及302h可以全部与彼此并行地被执行,因为在每个可排序事件处的关键帧使得追踪重放部件106b能够在每个段的开始处启动重放。注意,关键帧不仅需要在可排序事件处被保存,并且任何数量的关键帧可以在任何时间针对可执行实体被保存。更多关键帧的添加可以因此提供附加的段,并且通过扩展可以提供甚至更大水平的并行化。
实施例包括定义可执行事件之间的总体线性排序以用于在重放期间应用线性执行逻辑,并且用于对用于重放的段排队。在一些实施例中,这一排序在段水平处被定义。尽管这一排序可以不对应于在追踪时间处执行事件的实际顺序,但是每个段的执行的结果可以被组合以针对执行中的任何点确定在追踪时间处出现的精确程序状态。例如,一个实施例可以基于序列号和/或关键帧的出现的顺序来对段302a-302i排序。在这一实施例中,段302a-302i可以按照如下顺序被定义:302a、302b、302c、302d、302e、302f、302g、302h以及302i。
定义排序确保重放的固定逻辑顺序(即使个体段被并行或乱序地重放,如下面所讨论的)保证不管追踪重放部件106b如何到达执行中的给定点(无论其执行前向重放还是后向重放来到达断点),记录的程序状态的视图总是相同。尽管定义的顺序不必是在追踪时间期间执行实际发生的顺序,但是需要是执行的有效顺序。
独立地记录的追踪结合利用序列号被保存在那些追踪中的可排序事件使得不同可执行实体的段能够被并行地重放,即使那两个实体原先未并行地执行。例如,不同线程或进程的段可以被并行地重放,即使那些线程/进程原先在单个处理单元102a处被执行或者原先在不同时间处被执行。关键帧的进一步添加还使得相同可执行实体内的段能够被并行地重放。因此,两个水平的并行化被实现:不同可执行单元的段可以被并行地重放,并且相同可执行单元的段也可以被并行地重放。
跨多个处理单元对追踪的段的并行重放提供在调试会话期间对追踪数据的响应性重放/遍历。例如,假设感兴趣点(例如,变量、函数等等上的断点)要由用户在正在重放追踪文件200的调试应用中指定,该追踪文件包括对应用108(例如,利用追踪重放部件106b的调试应用)的代码的执行的追踪。另外,假设每个追踪数据流201追踪该代码的执行的不同线程。每个可执行实体301a-301c然后对应于那些线程之一。使用追踪重放部件106b的调试应用可以然后执行对不同段302a-302i的并行重放以标识追踪的执行中遇到断点的点,并且在断点的时间呈现程序状态的全局视图。
例如,假设调试应用接收将“命中”可执行事件304a的断点,因为例如在由该可执行事件访问的调试应用中被指定的变量,或者可执行事件对应于在调试应用中被指定的源代码的行。为了获得在可执行事件304a的时间的程序状态的完整视图,重放部件106b使用段302a-302i的定义的排序来确定哪些段在根据排序被线性地重放时将遇到断点。例如,重放部件106b可以确定段302a-302g应当被排队以用于重放。重放部件106b然后将段302a-302g排队到执行池以用于由一个或多个处理单元(例如,处理器102和/或在另一计算机系统处的处理单元)重放。在这样做时,重放部件106b可以使得(多个)处理单元并行地重放那些段的至少子集。当断点在段302f的重放期间被遇到(即,“命中”)时,重放部件106b可以在该时间点呈现合适的程序状态(例如,寄存器值、存储器值等等)。
时常,重放部件106b可以在可执行事件的不同段中和在不同可执行实体上遇到断点上的多次命中。例如,断点可以对应于频繁访问的变量,或者作为循环或频繁访问的函数的部分的源代码的行。当这发生时,重放部件106b可以基于段的选择的排序来选择哪个“命中”呈现给用户。例如,如果断点在段302f中的可执行事件304a和段302d中的可执行事件304b处被遇到,则重放部件106b可以过滤掉可执行事件304a,因为其在可执行事件304b之后发生,并且在可执行事件304b处呈现合适的程序状态。
附加地,重放部件106b可以应用过滤器以智能地制止重放一些段,例如,假设段302a-302g被选择用于重放,并且段303d在段303f之前被重放,则在可执行事件304b处遇到断点。由于段303f按定义的排序在段303d之后发生,并且由于断点已经命中段302d,所以重放部件106b可以从执行池移除段302f。尽管在一些情况中,当断点被遇到时后续段可以从执行池被移除,但是先前段可能仍然需要被重放。例如,如果段303d在段302a之前被重放(由于段的并行化重放)并且在可执行事件304b处遇到断点,则重放部件106b将仍然需要重放段302a以确定断点是否在该段中被遇到。
根据前文,图4图示了示例追踪重放部件400(诸如图1的追踪重放部件106b)的细节。如图4中所描绘的,追踪重放部件400可以包括许多子部件,诸如例如解析部件401、排序部件402、感兴趣点部件403以及排队部件404、重放部件405、过滤部件406和/或呈现部件407。本领域普通技术人员将认识到,这些子部件的特定身份和数量可以基于实现方式而变化。
解析部件401被配置为解析追踪文件109,诸如追踪文件200,以便标识各自对应于不同可执行实体(例如,301a-301c)的数据流201。因此,例如,解析部件可以标识数据流201a-201b。基于被记录在数据流中的信息(例如,数据分组、关键帧以及序列号),解析部件可以标识不同可执行实体之中的可执行事件的多个段(例如,302a-302i)。
在解析之后,排序部件402被配置为对标识的追踪段之间的排序进行标识。例如,排序部件可以基于数据流201中和之中的序列号303a-303l和/或关键帧的发生的顺序来对段排序。
感兴趣点部件403被配置为标识可执行实体301a-301c中的感兴趣点,诸如断点。例如,感兴趣点可以是用户指定的变量、函数、源代码行、可执行指令等等。基于所标识的感兴趣点,排队部件404被配置为标识当根据定义的排序而被线性地重放时将遇到感兴趣点的追踪段。排队部件404可以然后对那些段排队以用于跨一个或多个处理单元的并行执行。
一旦追踪段被排序,重放部件405就被配置为使用追踪数据流201中的数据以及可执行实体301a-301c中的代码来重放对每个段的执行。特别地,重放部件405在向该代码提供了来自追踪数据流的诸如寄存器和存储器值的运行时数据的同时重放对每个可执行实体的代码的执行。由于追踪数据流201的独立性质,来自不同可执行实体的追踪的段可以被并行地重放。另外,由于关键帧,来自相同可执行实体的追踪的段也可以被并行地执行。
基于重放部件405的重放,过滤部件406被配置为标识何时期望的断点被命中,并且过滤那些命中以标识基于定义的排序第一个发生的命中。另外,过滤部件406被配置为确定何时不再需要重放排队的段,并且从队列移除它们。
呈现部件407被配置为在显示设备处呈现所标识的断点,包括例如在断点的时间呈现诸如寄存器值、存储器值等等的程序状态。
根据前文,图5图示了用于执行对代码执行的并行重放的方法500的示例。图5结合联合图1至图4而被描述的部件和数据而被描述。方法500中的动作的特定排序不被限于示出的排序。
如图示的,方法500包括解析包括多个追踪数据流的追踪数据以标识多个追踪段的动作501。动作501可以包括解析包括多个追踪数据流的追踪数据,多个追踪数据流各自表示对多个可执行实体中的对应可执行实体的执行,包括从多个追踪数据流标识来自多个追踪数据流之中的多个追踪段,每个追踪段表示由可执行实体中的一个可执行实体在一段时间内执行的一个或多个事件。例如,解析部件401可以解析包括多个数据流201的追踪文件200,多个数据流201各自表示对不同可执行实体(例如,应用108的线程)的执行。附加地,解析部件401可以标识每个数据流中的可执行事件的段,诸如图3的段302a-302i。
在一些实施例中,多个追踪数据流数据定义跨多个可执行实体发生的多个可排序事件,其中每个可排序事件表示对应可执行实体中相对于多个可排序事件中的其他可排序事件可排序的事件的发生。例如,追踪文件200可以定义可排序事件203a-203l。在这样的实施例中,解析部件401可以至少基于多个可排序事件203a-203l来标识多个追踪段,其中每个追踪段包括在每个可执行实体上在两个可排序事件之间发生的可执行事件。
在附加的或备选的实施例中,多个追踪数据流定义多个关键帧,多个关键帧各自包含允许在关键帧处开始对对应可执行实体的重放的信息。例如,追踪文件200可以定义关键帧204a-204o。在这样的实施例中,解析部件401可以至少基于多个关键帧204a-204o来标识多个追踪段,其中每个追踪段包括在每个可执行实体上在两个关键帧之间发生的可执行事件。
方法500还包括定义追踪段之间的排序的动作502。动作502可以包括定义多个追踪段之间的排序。例如,排序部件402可以标识追踪段302a-302i之间的排序。例如,排序部件可以基于数据流201中和之中的序列号303a-303l和/或关键帧的发生的顺序来对段302a-302i排序。在示例中,图3的追踪段302a-302i可以被排序为:302a、302b、302c、302d、302e、302f、302g、302h、以及302i。
方法500还包括标识感兴趣点的动作503。动作503可以包括标识多个可执行实体中的至少一个可执行实体中的感兴趣点。例如,感兴趣点部件403可以(例如,通过调试应用)接收用户指定的感兴趣点,其可以包括源代码中的断点。断点可以指定要在追踪中被定位的变量、函数、源代码的行、可执行指令等等。
方法500还包括标识追踪段的将遇到感兴趣点的子集的动作504,以及在执行池中对追踪段的子集排队的动作505。动作504可以包括标识多个追踪段的当根据排序而被线性地重放时将遇到感兴趣点的子集。动作505可以包括在执行池中对多个追踪段的子集排队以用于由一个或多个处理器重放。例如,排队部件404可以标识当根据定义的排序而被线性地重放时将遇到感兴趣点的追踪段。排队部件404可以然后对那些段排队以用于跨一个或多个处理单元的并行执行。
方法500还包括并行地重放追踪段的子集中的两个或更多个追踪段的动作506。方法506可以包括由一个或多个处理器并且基于追踪数据来并行地重放多个追踪段的子集中的两个或更多个追踪段。例如,重放部件405可以重放用于跨处理单元102的重放的每个排队的追踪段。重放可以包括在向该代码提供来自追踪文件200的状态数据(例如,寄存器值、存储器地址和值等等)的同时执行对应可执行实体的代码。
尽管重放可以包括在计算机系统101处使用处理单元102重放排队的追踪段,但是重放可以附加地或备选地包括跨不是计算机系统101的部分的处理单元重放排队的追踪段。例如,排队的追踪段可以按照分布式方式跨经由一个或多个网络链接而被连接的一个或多个其他计算机系统而被重放。因此,追踪段可以按照高度并行化方式跨许多处理器并且在许多计算机系统处被重放。
方法500还可以包括在重放多个追踪段的子集中的一个或多个追踪段的同时遇到定义的感兴趣点。当这发生时,呈现部件407可以在遇到时在显示设备处呈现程序状态数据。在一些情况中,该方法包括至少基于在重放多个追踪段的子集中的一个或多个追踪段的同时遇到定义的感兴趣点,从执行池移除多个可执行实体的子集中的至少一个可执行实体。例如,在图3中,如果感兴趣点在可执行事件304b处被遇到,并且追踪段302f尚未被重放,则过滤部件406可以从执行池移除追踪段302f。
方法500还可以包括在重放多个追踪段的子集的同时标识与定义的感兴趣点的多次遇到。例如,重放部件405可以遇到可执行事件304a和304b两者。在这种情况中,过滤部件406可以基于多个追踪段之间的标识的排序来标识多次遇到中的特定遇到(例如,基于该遇到基于定义的排序而发生得最早),并且呈现部件407可以在显示设备处呈现该特定遇到。
因此,本文中描述的实施例使得时间行进调试器能够在一个或多个处理单元上执行对不同可执行实体的不同追踪段的并行重放,以提供快速重放执行。因此,一种计算机系统被支持以比传统时间行进调试器快得多地提供调试会话中的结果,并且在许多情况中,在重放期间到达断点所涉及的处理时间基本上对人类用户而言是感觉不到的。
尽管已经以对结构特征和/或方法动作特定的语言描述了本主题,但是应理解,在所附权利要求中被限定的主题不必限于所描述的特征或以上描述的动作、或者以上描述的动作的顺序。相反,所描述的特征和动作被公开为实施权利要求的示例形式。
本发明的实施例可以包括或利用包括计算机硬件的专用计算机系统或通用计算机系统,计算机硬件例如一个或多个处理器和系统存储器,如下面更详细地讨论的。本发明的范围内的实施例还包括用于承载或存储计算机可执行指令和/或数据结构的物理介质和其他计算机可读介质。这样的计算机可读介质可以是能够由通用计算机系统或专用计算机系统访问的任何可用介质。存储计算机可执行指令和/或数据结构的计算机可读介质是计算机存储介质。承载计算机可执行指令和/或数据结构的计算机可读介质是传输介质。因此,通过举例而非限制,本发明的实施例可以包括至少两种截然不同的种类的计算机可读介质:计算机存储介质和传输介质。
计算机存储介质是存储计算机可执行指令和/或数据结构的物理存储介质。物理存储介质包括计算机硬件,诸如RAM、ROM、EEPROM、固态驱动(“SSD”)、闪存、相位变化存储器(“PCM”)、光盘存储装置、磁盘存储装置或其他磁存储设备,或者可以被用于存储以计算机可执行指令或数据结构的形式的程序代码的任何其他(多个)硬件存储设备,所述程序代码可以由通用计算机系统或专用计算机系统访问并且执行以实施本发明的公开的功能。
传输介质可以包括能够被用于承载以计算机可执行指令或数据结构的形式的程序代码并且能够由通用计算机系统或专用计算机系统访问的网络和/或数据链路。“网络”被定义为实现在计算机系统和/或模块和/或其他电子设备之间的电子数据的传输的一个或多个数据链路。当信息通过网络或另一通信连接(硬接线的、无线的或硬接线或无线的组合)而被传送或提供给计算机系统时,计算机系统可以将连接视为传输介质。以上的组合还应当被包括在计算机可读介质的范围内。
另外,响应于到达各种计算机系统部件,以计算机可执行指令或数据结构的形式的程序代码能够自动地从传输介质被传送给计算机存储介质(或者反之亦然)。例如,通过网络或数据链路而被接收到的计算机可执行指令或数据结构能够被缓冲在网络接口模块(例如,“NIC”)内的RAM中,并且之后最终被传送给计算机系统RAM和/或被传送给在计算机系统处的较少易失性计算机存储介质。因此,应当理解,计算机存储介质能够被包括在也(或甚至主要)利用传输介质的计算机系统部件中。
计算机可执行指令包括例如当在一个或多个处理器处被执行时使得通用计算机系统、专用计算机系统、或用于执行特定功能或功能组的专用处理设备的指令和数据。计算机可执行指令可以例如为二进制、诸如汇编语言的中间格式指令或甚至源代码。
本领域技术人员将领会到,本发明可以在具有许多类型的计算机系统配置的网络计算环境中被实践,许多类型的计算机系统配置包括个人计算机、台式计算机、膝上型计算机、消息处理器、手持设备、多处理器系统、基于微处理器的或可编程的消费者电子设备、网络PC、微型计算机、大型计算机、移动手机、PDA、平板计算机、寻呼机、路由器、交换机等等。本发明还可以在分布式系统环境中被实践,在分布式系统环境中通过网络(通过硬接线数据链路、无线数据链路或通过硬接线数据链路和无线数据链路的组合)而被链接的本地计算机系统和远程计算机系统两者都执行任务。因此,在分布式系统环境中,计算机系统可以包括多个组成计算机系统。在分布式系统环境中,程序模块可以被定位在本地存储器存储设备和远程存储器存储设备两者中。
本领域技术人员还将领会到本发明可以被实践于云计算环境中。云计算环境可以是分布式的,但是这不是要求的。当分布式时,云计算环境可以被国际性地分布在组织内和/或具有跨多个组织而被拥有的部件。在本说明书和随附权利要求书中,“云计算”被定义为用于支持对可配置计算资源(例如,网络、服务器、存储装置、应用以及服务)的共享池的按需网络访问的模型。“云计算”的定义不限于当被恰当地部署时可以从这样的模型获得的其他许多优点中的任何优点。
云计算模型能够包括各种特性,诸如按需自服务、宽泛网络访问、资源池、快速弹性、度量的服务等等。云计算模型还可以按照各种服务模型的形式出现,诸如例如软件即服务(“SaaS”)、平台即服务(“PaaS”)以及基础设施即服务(“IaaS”)。云计算模型还可以使用诸如私有云、社团云、公共云、混合云等等的不同部署模型而被部署。
诸如云计算环境的一些实施例可以包括如下系统,该系统包括各自能够运行一个或多个虚拟机的一个或多个主机。在操作期间,虚拟机模拟操作计算系统,支持操作系统以及可能还有一个或多个其他应用。在一些实施例中,每个主机包括管理程序,管理程序使用从虚拟机的视图抽象的物理资源来模拟针对虚拟机的虚拟资源。管理程序还提供虚拟机之间的恰当隔离。因此,从任何给定虚拟机的视角,管理程序提供虚拟机正在与物理资源对接的错觉,即使虚拟机仅仅与物理资源的表观(例如,虚拟资源)对接。物理资源的示例包括处理能力、存储器、磁盘空间、网络带宽、介质驱动器等等。
本发明可以在不脱离其精神或必要特性的情况下按照其他具体形式而被实现。所描述的实施例应在所有方面仅仅被认为是说明性的而非限制性的。本发明的范围因此由所附权利要求而非由前述描述指示。在权利要求的等价性的意义和范围内出现的所有改变将被包含在它们的范围内。
Claims (18)
1.一种用于执行代码运行的并行重放的方法,被实施于包括一个或多个处理器的计算机系统处,所述方法包括:
解析包括多个追踪数据流的追踪数据,每个追踪数据流表示对多个可执行实体中的对应可执行实体的执行,包括从所述多个追踪数据流标识来自所述多个追踪数据流之中的多个追踪段,每个追踪段表示由所述可执行实体中的一个可执行实体在一段时间内执行的一个或多个事件;
定义所述多个追踪段之间的排序;
标识所述多个可执行实体中的至少一个可执行实体中的感兴趣点;
标识所述多个追踪段的当根据所述排序被线性地重放时将遇到所述感兴趣点的子集;
在执行池中对所述多个追踪段的所述子集排队以用于由所述一个或多个处理器重放;
由所述一个或多个处理器基于所述追踪数据来并行地重放所述多个追踪段的所述子集中的两个或更多个追踪段;
在重放所述多个追踪段的所述子集中的一个或多个追踪段的同时遇到定义的所述感兴趣点;以及
至少基于遇到定义的所述感兴趣点,从所述执行池移除所述多个追踪段的所述子集中的至少一个追踪段。
2.根据权利要求1所述的方法,其中所述多个追踪数据流定义跨所述多个可执行实体发生的多个可排序事件,每个可排序事件表示对应可执行实体中相对于所述多个可排序事件中的其他可排序事件可排序的事件的发生。
3.根据权利要求2所述的方法,其中所述多个追踪段至少基于所述多个可排序事件而被标识。
4.根据权利要求3所述的方法,其中所述追踪段中的与可执行实体相关联的一个或多个追踪段包括在所述可执行实体上在两个可排序事件之间发生的可执行事件。
5.根据权利要求1所述的方法,其中所述多个追踪数据流定义多个关键帧,每个关键帧包含允许对对应可执行实体的重放在所述关键帧处开始的信息。
6.根据权利要求5所述的方法,其中所述多个追踪段至少基于所述多个关键帧而被标识。
7.根据权利要求6所述的方法,其中所述追踪段中的与可执行实体相关联的一个或多个追踪段包括在所述可执行实体上在两个关键帧之间发生的可执行事件。
8.根据权利要求1所述的方法,还包括在重放所述多个追踪段的所述子集的同时标识与定义的所述感兴趣点的多次遇到;
基于所述多个追踪段之中的标识的所述排序来标识所述多次遇到中的特定遇到;以及
在显示设备处呈现所述特定遇到。
9.根据权利要求1所述的方法,其中所述感兴趣点包括变量、函数、源代码行或可执行指令中的一种或多种。
10.一种计算机系统,包括:
一个或多个处理器;以及
一个或多个计算机可读硬件存储设备,其上存储有计算机可执行指令,所述计算机可执行指令由所述一个或多个处理器执行以使得所述计算机系统执行至少以下:
解析包括多个追踪数据流的追踪数据,每个追踪数据流表示对多个可执行实体中的对应可执行实体的执行,以从所述多个追踪数据流标识来自所述多个追踪数据流之中的多个追踪段,每个追踪段表示由所述可执行实体中的一个可执行实体在一段时间内执行的一个或多个事件;
定义所述多个追踪段之间的排序;
标识所述多个可执行实体中的至少一个可执行实体中的感兴趣点;
标识所述多个追踪段的当根据所述排序而被线性地重放时将遇到所述感兴趣点的子集;
在执行池中对所述多个追踪段的所述子集排队以用于由所述一个或多个处理器重放;
由所述一个或多个处理器基于所述追踪数据来并行地重放所述多个追踪段的所述子集中的两个或更多个追踪段;
在重放所述多个追踪段的所述子集中的一个或多个追踪段的同时遇到定义的所述感兴趣点;以及
至少基于遇到定义的所述感兴趣点,从所述执行池移除所述多个追踪段的所述子集中的至少一个追踪段。
11.根据权利要求10所述的计算机系统,其中所述多个追踪数据流定义跨所述多个可执行实体发生的多个可排序事件,每个可排序事件表示对应可执行实体中的相对于所述多个可排序事件中的其他可排序事件可排序的事件的发生。
12.根据权利要求11所述的计算机系统,其中所述多个追踪段至少基于所述多个可排序事件而被标识。
13.根据权利要求12所述的计算机系统,其中所述追踪段中的与可执行实体相关联的一个或多个追踪段包括在所述可执行实体上在两个可排序事件之间发生的可执行事件。
14.根据权利要求10所述的计算机系统,其中所述多个追踪数据流定义多个关键帧,每个关键帧包含允许对对应可执行实体的重放在所述关键帧处开始的信息。
15.根据权利要求14所述的计算机系统,其中所述多个追踪段至少基于所述多个关键帧而被标识。
16.根据权利要求15所述的计算机系统,其中所述追踪段中的与可执行实体相关联的一个或多个追踪段包括在所述可执行实体上在两个关键帧之间发生的可执行事件。
17.根据权利要求10所述的计算机系统,所述计算机可读硬件存储设备 还在其上存储有计算机可执行指令,所述计算机可执行指令由所述一个或多个处理器执行以使得所述计算机系统还执行至少以下:
在重放所述多个追踪段的所述子集的同时标识与定义的所述感兴趣点的多次遇到;
基于所述多个追踪段之中的标识的所述排序来标识所述多次遇到中的特定遇到;以及
在显示设备处呈现所述特定遇到。
18.一种或多种计算机可读硬件存储设备,其上存储有计算机可执行指令,所述计算机可执行指令由一个或多个处理器执行以使得计算机系统执行至少以下:
解析包括多个追踪数据流的追踪数据,每个追踪数据流表示对多个可执行实体中的对应可执行实体的执行,以从所述多个追踪数据流标识来自所述多个追踪数据流之中的多个追踪段,每个追踪段表示由所述可执行实体中的一个可执行实体在一段时间内执行的一个或多个事件;
定义所述多个追踪段之间的排序;
标识所述多个可执行实体中的至少一个可执行实体中的感兴趣点;
标识所述多个追踪段的当根据所述排序而被线性地重放时将遇到所述感兴趣点的子集;
在执行池中对所述多个追踪段的所述子集排队以用于由所述一个或多个处理器重放;
由所述一个或多个处理器基于所述追踪数据来并行地重放所述多个追踪段的所述子集中的两个或更多个追踪段;
在重放所述多个追踪段的所述子集中的一个或多个追踪段的同时遇到定义的所述感兴趣点;以及
至少基于遇到定义的所述感兴趣点,从所述执行池移除所述多个追踪段的所述子集中的至少一个追踪段。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US15/387,085 | 2016-12-21 | ||
US15/387,085 US10198341B2 (en) | 2016-12-21 | 2016-12-21 | Parallel replay of executable code |
PCT/US2017/065940 WO2018118545A1 (en) | 2016-12-21 | 2017-12-13 | Parallel replay of executable code |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110062927A CN110062927A (zh) | 2019-07-26 |
CN110062927B true CN110062927B (zh) | 2023-03-21 |
Family
ID=60888721
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201780076149.XA Active CN110062927B (zh) | 2016-12-21 | 2017-12-13 | 用于可执行代码的并行重放的方法、系统和存储设备 |
Country Status (4)
Country | Link |
---|---|
US (1) | US10198341B2 (zh) |
EP (1) | EP3559813B1 (zh) |
CN (1) | CN110062927B (zh) |
WO (1) | WO2018118545A1 (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10185645B2 (en) * | 2017-03-08 | 2019-01-22 | Microsoft Technology Licensing, Llc | Resource lifetime analysis using a time-travel trace |
US10698792B2 (en) * | 2018-05-02 | 2020-06-30 | Microsoft Technology Licensing, Llc | Execution control with cross-level trace mapping |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102341790A (zh) * | 2009-06-30 | 2012-02-01 | 国际商业机器公司 | 支持多个虚拟机的追踪数据的基于时间的上下文采样 |
CN104216764A (zh) * | 2014-07-31 | 2014-12-17 | 昆明理工大学 | 一种基于多线程嵌入式系统并行程序跟踪与回放方法 |
CN104969191A (zh) * | 2013-03-13 | 2015-10-07 | 英特尔公司 | 针对性能和正确性使多线程软件程序的已记录执行可视化 |
Family Cites Families (34)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5870607A (en) * | 1996-09-11 | 1999-02-09 | Brown University Research Foundation | Method and apparatus for selective replay of computer programs |
US6101524A (en) | 1997-10-23 | 2000-08-08 | International Business Machines Corporation | Deterministic replay of multithreaded applications |
CA2246270C (en) | 1998-09-01 | 2003-09-23 | Ibm Canada Limited - Ibm Canada Limitee | Debugging multiple related processes simultaneously |
US6681384B1 (en) | 1999-12-23 | 2004-01-20 | International Business Machines Corporation | Multi-threaded break-point |
US6769054B1 (en) * | 2001-02-26 | 2004-07-27 | Emc Corporation | System and method for preparation of workload data for replaying in a data storage environment |
US6813731B2 (en) * | 2001-02-26 | 2004-11-02 | Emc Corporation | Methods and apparatus for accessing trace data |
SE524799C2 (sv) | 2002-11-29 | 2004-10-05 | Zealcore Embedded Solutions Ab | Förfarande och dataprogram för debuggning av en programkod |
US7233733B2 (en) * | 2005-07-13 | 2007-06-19 | International Business Machines Corporation | Method and system for finding evolving regions in graphs without persistent node identity |
US7620938B2 (en) * | 2005-10-31 | 2009-11-17 | Microsoft Corporation | Compressed program recording |
US20080046699A1 (en) * | 2006-08-21 | 2008-02-21 | International Business Machines Corporation | Method and apparatus for non-deterministic incremental program replay using checkpoints and syndrome tracking |
US8832682B2 (en) * | 2008-03-28 | 2014-09-09 | Vmware, Inc. | Trace collection for a virtual machine |
US8254902B2 (en) * | 2008-06-26 | 2012-08-28 | Apple Inc. | Apparatus and methods for enforcement of policies upon a wireless device |
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 |
US8352907B2 (en) * | 2009-08-10 | 2013-01-08 | International Business Machines Corporation | Software application recreation |
US8468501B2 (en) * | 2010-04-21 | 2013-06-18 | International Business Machines Corporation | Partial recording of a computer program execution for replay |
US8924788B2 (en) * | 2010-06-28 | 2014-12-30 | Intel Corporation | Replaying architectural execution with a probeless trace capture |
US8769518B1 (en) * | 2010-06-29 | 2014-07-01 | Ca, Inc. | Ensuring determinism during programmatic replay in a virtual machine |
JP2012013954A (ja) * | 2010-06-30 | 2012-01-19 | Sony Corp | 搬送装置及び搬送方法並びに顕微鏡システム |
US9052967B2 (en) * | 2010-07-30 | 2015-06-09 | Vmware, Inc. | Detecting resource deadlocks in multi-threaded programs by controlling scheduling in replay |
US8442941B2 (en) * | 2011-01-19 | 2013-05-14 | Microsoft Corporation | Scalable database workload replay with mode selections |
US8776029B2 (en) * | 2011-03-23 | 2014-07-08 | Zerodee, Inc. | System and method of software execution path identification |
US9348883B2 (en) * | 2011-06-01 | 2016-05-24 | Clustrix, Inc. | Systems and methods for replication replay in a relational database |
KR20130006076A (ko) * | 2011-07-08 | 2013-01-16 | 삼성전기주식회사 | 에너지 저장체 케이스 및 이를 포함하는 에너지 저장장치 |
US9069704B2 (en) * | 2011-11-07 | 2015-06-30 | Sap Se | Database log replay parallelization |
US9317297B2 (en) * | 2012-09-27 | 2016-04-19 | Intel Corporation | Replay execution of instructions in thread chunks in the chunk order recorded during previous execution |
KR101641807B1 (ko) * | 2013-02-12 | 2016-07-21 | 애플 인크. | 다단계 이온 주입 |
US9129058B2 (en) * | 2013-02-19 | 2015-09-08 | Microsoft Technology Licensing, Llc | Application monitoring through continuous record and replay |
US9235497B2 (en) | 2013-03-27 | 2016-01-12 | Intel Corporation | Method and system for detecting concurrency programming errors in kernel modules and device drivers |
US9477575B2 (en) * | 2013-06-12 | 2016-10-25 | Nvidia Corporation | Method and system for implementing a multi-threaded API stream replay |
US9535815B2 (en) * | 2014-06-04 | 2017-01-03 | Nvidia Corporation | System, method, and computer program product for collecting execution statistics for graphics processing unit workloads |
US9875173B2 (en) * | 2014-06-30 | 2018-01-23 | Microsoft Technology Licensing, Llc | Time travel debugging in managed runtime |
US10430309B2 (en) * | 2015-02-23 | 2019-10-01 | Red Hat, Inc. | Duplicating a task sequence from a graphical user interface interaction for a development application in view of trace data |
US9588870B2 (en) * | 2015-04-06 | 2017-03-07 | Microsoft Technology Licensing, Llc | Time travel debugging for browser components |
GB201508034D0 (en) | 2015-05-12 | 2015-06-24 | Undo Ltd | Debugging systems |
-
2016
- 2016-12-21 US US15/387,085 patent/US10198341B2/en active Active
-
2017
- 2017-12-13 EP EP17822959.7A patent/EP3559813B1/en active Active
- 2017-12-13 CN CN201780076149.XA patent/CN110062927B/zh active Active
- 2017-12-13 WO PCT/US2017/065940 patent/WO2018118545A1/en unknown
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102341790A (zh) * | 2009-06-30 | 2012-02-01 | 国际商业机器公司 | 支持多个虚拟机的追踪数据的基于时间的上下文采样 |
CN104969191A (zh) * | 2013-03-13 | 2015-10-07 | 英特尔公司 | 针对性能和正确性使多线程软件程序的已记录执行可视化 |
CN104216764A (zh) * | 2014-07-31 | 2014-12-17 | 昆明理工大学 | 一种基于多线程嵌入式系统并行程序跟踪与回放方法 |
Also Published As
Publication number | Publication date |
---|---|
WO2018118545A1 (en) | 2018-06-28 |
US20180173611A1 (en) | 2018-06-21 |
EP3559813A1 (en) | 2019-10-30 |
EP3559813B1 (en) | 2021-07-28 |
US10198341B2 (en) | 2019-02-05 |
CN110062927A (zh) | 2019-07-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10235273B2 (en) | Indexing a trace by insertion of key frames for replay responsiveness | |
US11055197B2 (en) | Tentative execution of code in a debugger | |
US9959194B1 (en) | Indexing a trace by insertion of memory snapshots for replay responsiveness | |
US10296442B2 (en) | Distributed time-travel trace recording and replay | |
EP3577564B1 (en) | Efficient retrieval of memory values during trace replay | |
CN110168507B (zh) | 可执行代码的推测重放 | |
CN110062927B (zh) | 用于可执行代码的并行重放的方法、系统和存储设备 | |
US10956304B2 (en) | Dynamic diagnostic code instrumentation over a historic program execution | |
CN113711190A (zh) | 时间旅行调试追踪中的跨线程存储器索引 | |
AU2018309575B2 (en) | Focused execution of traced code in a debugger | |
CN113785284A (zh) | 基于历史调试追踪来标识数据不一致和数据争用 | |
CN113678110A (zh) | 时间旅行调试追踪中的存储器值暴露 | |
JP7506736B2 (ja) | ディフグラムを用いた時間遡及トレースの索引付け及び再現 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |