[发明专利]在跟踪重放期间存储器值的有效检索有效
申请号: | 201880009735.7 | 申请日: | 2018-01-29 |
公开(公告)号: | CN110249315B | 公开(公告)日: | 2023-06-20 |
发明(设计)人: | J·莫拉 | 申请(专利权)人: | 微软技术许可有限责任公司 |
主分类号: | G06F11/34 | 分类号: | G06F11/34;G06F11/36 |
代理公司: | 北京世辉律师事务所 16093 | 代理人: | 王俊 |
地址: | 美国华*** | 国省代码: | 暂无信息 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 跟踪 重放 期间 存储器 有效 检索 | ||
在重放期间保持存储器值包括识别跟踪部分,每个跟踪部分表示实体在一段时间内执行的事件。在多个处理单元处执行跟踪部分的并行重放。在执行并行重放时,维持对应于每个跟踪部分的持久性数据结构。这包括对于每个跟踪部分,在跟踪部分的持久性数据结构中存储处理单元在重放跟踪部分时所消耗的每个存储器地址以及存储在每个存储器地址处的最近存储器值的记录。在重放期间返回存储器值包括识别相关的持久性数据结构,并且依次基于定义排序搜索这些数据结构。当在搜索期间识别出相关存储器地址时,停止搜索并返回在储器地址处被关联的、存储在持久性数据结构中的值。
背景技术
当在软件应用的开发期间编写代码时,开发人员通常花费大量时间来“调试”代码,以找到运行时代码错误和其他源代码错误。在这样做时,开发人员可以采取几种方法来再现和本地化源代码错误,例如基于不同输入来观察程序的行为,插入调试代码(例如,打印变量值,追踪执行分支等),暂时移除代码部分等。追踪运行时错误以查明代码错误可能会占用应用开发时间的很大一部分。
已经开发了许多类型的调试应用(“调试器”)以便辅助开发人员进行代码调试过程。这些工具为开发人员提供了跟踪、可视化和改变计算机代码的执行的能力。例如,调试器可以可视化代码指令的执行,可以在代码执行期间呈现不同时间的代码变量值,可以使开发人员能够改变代码执行路径,和/或可以使开发人员能够针对感兴趣的代码元素来设置“断点”和/或“观察点”(在执行期间到达改点时,使得代码的执行被暂停)等等。
新出现形式的调试应用实现了“时间旅行”,“反向”或“历史”调试。利用“时间旅行”调试,通过跟踪应用而将程序(例如,诸如线程的可执行实体)的执行记录/跟踪到一个或多个跟踪文件中。这些跟踪文件随后可用于重放程序的执行,以用于前向和后向分析。例如,“时间旅行”调试器可以使开发人员能够设置前向断点/观察点(像传统调试器那样)以及反向断点/观察点。
实现“时间旅行”调试器的一个挑战涉及如何在跟踪中的给定点返回存储器值。一种方法是记录在跟踪时可执行实体的可寻址存储器的完整副本,这通常使用可执行实体在跟踪时看到的相同存储器地址。然后,重放涉及加载此完整存储器副本,并且直接执行对其的存储器读取和写入。使用这种方法,在特定点再现存储器值涉及从存储器副本中读取值。但是,这种方法在跟踪时过多地产生了大量数据(因为存储了可寻址存储器的完整副本),并且需要在重放时加载大量数据。此外,要求在重放时维护大存储器副本也使得执行并行或推测性重放操作以及存储多个特定时间点的存储器值(以便以后检索)是不切实际的。
另一种方法是重放代码至在跟踪中的感兴趣点之前消耗感兴趣存储器地址的最后点,并返回在该地址处看到的值。这比先前方法具有在重放时使用少得多的存储器的优势,但是它引入了复杂性并导致返回存储器值的性能较差,这是因为重放响应于对存储器值的每个请求而被执行。
发明内容
在本公开描述的至少一些实施例通过在跟踪重放期间维持多个持久性数据结构来在跟踪重放期间保持存储器值。每个持久性数据结构对应于跟踪的不同跟踪部分,并存储该跟踪部分所遇到的每个存储器地址的最近看到值。本公开的至少一些实施例还使用持久性数据结构在跟踪重放期间返回存储器值。在这些实施例中,返回存储器值涉及逐渐搜索这些持久性数据结构-在所请求的存储器值的时间点开始并向后进行直到遇到存储所请求的存储器值的存储器地址的持久性数据结构。
前述实施例提供优于现有方法的优点,包括提供对存储器值的请求的响应性能,同时在重放期间需要维持相对少量的存储器信息,并且使得低成本机制能够用于存储多个时间点的存储器值。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于微软技术许可有限责任公司,未经微软技术许可有限责任公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201880009735.7/2.html,转载请声明来源钻瓜专利网。