【技术实现步骤摘要】
用于时间旅行调试和分析的计算机系统、计算机系统处实施的方法和硬件存储设备
[0001]本申请是申请日为2017年11月6日、中国国家申请号为201780069596.2、专利技术名称为“用于时间旅行调试和分析的计算机系统、计算机系统处实施的方法和硬件存储设备”的中国专利技术专利申请的分案申请。
技术介绍
[0002]当在软件应用的开发期间编写源代码时,开发人员通常花费大量时间“调试”源代码以在代码中找到运行时错误。例如,开发人员可以采用几种方法来再现和本地化源代码故障(bug),诸如基于不同输入来观察程序的行为、插入调试代码(例如,打印变量值、追踪执行的分支等)、临时去除代码部分等。追踪运行时错误用以查明代码故障并占用应用开发时间的很大一部分。
[0003]已经开发了调试应用(“调试器”)以便协助代码调试进程。许多这种工具提供跟踪、可视化和更改计算机代码的执行的能力。例如,调试器可以可视化代码指令(例如,源代码、汇编代码等)和变量值的执行,并使得用户能够更改代码执行的各方面。通常,调试器使用户能够在源代码中设置“断点”(例如,源代码中的特定指令或语句),当在执行期间到达该断点时,使程序的执行被暂停。当源代码执行被暂停时,可以向用户呈现变量值并给予选项以选择如何继续(例如,通过终止执行、通过像正常那样继续执行、通过进入、跳过或退出语句/函数调用等)。然而,经典的调试器使得只能在单个方向(向前)中观察/更改代码执行。例如,经典的调试器不支持用户选择返回到之前的断点。
[0004]新出现的调试形式是“时间行程”调试,其中程序 ...
【技术保护点】
【技术特征摘要】
1.一种计算机系统,包括:一个或多个处理器,每个处理器包括对应的处理器数据高速缓存;以及一个或多个计算机可读介质,具有存储于其上的计算机可执行指令,所述计算机可执行指令是所述一个或多个处理器可执行的,以使所述计算机系统基于处理器数据高速缓存中的未命中来记录可执行实体的执行的可重放跟踪,所述计算机可执行指令包括可执行以使所述计算机系统至少以下执行的指令:跨所述一个或多个处理器的一个或多个处理单元,执行所述可执行实体的一个或多个线程;以及在所述一个或多个线程的执行期间,独立地记录针对每个线程的单独的可重放跟踪,包括,对于每个线程:记录针对所述一个或多个处理单元中正在执行所述线程的特定处理单元的初始处理器寄存器状态;一旦基于所述线程的执行检测到所述特定处理单元的对应处理器数据高速缓存内的高速缓存未命中,记录响应于所述处理器数据高速缓存未命中而被导入所述对应处理器数据高速缓存中的至少一行高速缓存数据;检测所述线程的执行中的不连续性的发生,其中一个或多个条目在所述线程的执行中的所述不连续性期间被导入所述对应处理器数据高速缓存中;以及至少基于所述线程的执行中的所述不连续性的所述发生,刷新所述相应处理器数据高速缓存中被导入的所述一个或多个条目,其中被刷新的所述条目不被记录在所述单独的可重放跟踪中。2.根据权利要求1所述的计算机系统,其中独立地记录针对每个线程的单独的可重放跟踪包括:对于每个线程,记录由所述线程执行的至少一个非确定性处理器指令的一个或多个副作用。3.根据权利要求1所述的计算机系统,其中所述一个或多个线程包括多个线程,所述计算机可执行指令包括可执行以使所述计算机系统以下执行的指令:识别跟踪存储器模型,所述跟踪存储器模型定义要跨所述多个线程排序的一个或多个可排序事件,其中独立地记录针对每个线程的单独的可重放跟踪包括:对于每个线程,利用单调递增的数目来记录由线程执行的至少一个可排序事件,所述单调递增的数目在跨所述多个线程的其他可排序事件中排序所述事件。4.根据权利要求1所述的计算机系统,其中独立地记录针对每个线程的单独的可重放跟踪包括:对于至少一个线程,记录以下至少一项:访问冲突、陷阱、中断,或内核调用。5.根据权利要求1所述的计算机系统,其中独立地记录针对每个线程的单独的可重放跟踪包括:对于至少一个线程,基于所述线程的执行来记录至少一个未被高速缓存的读取。6.根据权利要求1所述的计算机系统,其中独立地记录针对每个线程的单独的可重放跟踪包括:对于每个线程,基于所述线程的执行来检测处理器代码高速缓存未命中,以及记录响应于所述处理器代码高速缓存没命中而被导入所述处理器代码高速缓存的至少一行高速缓存数据。7.根据权利要求1所述的计算机系统,其中记录被导入所述对应处理器数据高速缓存
中的至少一行高速缓存数据包括:将所述至少一行高速缓存数据记录到可重用环形缓冲器中。8.根据权利要求1所述的计算机系统,其中所述一个或多个处理器至少基于已经针对所述线程而记录了所述至少一行高速缓存数据,来设置高速缓存行上的硬件位。9.根据权利要求8所述的计算机系统,其中所述一个或多个处理器基于内核或另一线程对所述线程的执行的中断来切换所述硬件位。10.根据权利要求9所述的计算机系统,其中所述一个或多个处理器基于所述内核或者另一线程已经修改了所述高速缓存行来切换所述硬件位。11.根据权利要求8所述的计算机系统,其中设置所述硬件位在从记录线程转移时防止至少一次高速缓存刷新。12.根据权利要求8所述的计算机系统,其中设置所述硬件位防止至少一个推测性存储器访问被记录到跟踪。13.根据权利要求1所述的计算机系统,其中记录针对所述线程的所述可重放跟踪包括:以不同于多个条目的执行顺序的乱序,将所述多个条目记录在所述可重放跟踪中。14.根据权利要求1所述的计算机系统,其中所述处理器数据高速缓存中的每个高速缓存行包括至少一个硬件位,所述至少一个硬位至少基于所述高速缓存行已由线程修改而被切换。15.根据权利要求1所述的计算机系统,其中检测所述线程的所述执行中的所述不连续性的所述发生包括检测以下至少一项:操作系统内核的执行、中断的发生或异常的发生。16.一种在计算机系统处执行以用于记录使用高速缓存数据的可执行实体的执行的可重放跟踪的方法,所述计算机系统包括一个或多个处理器,每个处理器包括对应的处理器数据高速缓存,所述方法包括:跨所述一个或多个处理器的一个或多个处理单元,执行所述可执行实体的一个或多个线程;以及在所述一个或多个线程的执行期间,独立地记录针对每个线程的单独的可重放跟踪,包括,对于每个线程:记录针对所述一个或多个处理单元中正在执行所述线程的特定处理单元的初始处理器寄存器状态;一旦基于所述线程的执行检测到所述特定处理单元的对应处理器数据高速缓存内的高速缓存未命中,记录响应于所述处理器数据高速缓存未命中而被导入所述对应处理器数据高速缓存中的至少一行高速缓存数据;检测所述线程的执行中的不连续性的发生,其中一个或多个条目在所述线程的执行中的所述不连续性期间被导入所述对应处理器数据高速缓存中;以及至少基于所述线程的执行中的所述不连续性的所述发生,刷新所述相应处理器数据高速缓存中被导入的所述一个或多个条目,其中被刷新的所述条目不被记录在所述单独的可重放跟踪中。17.根据权利要求16所述的方法,其中独立地记录针对每个线程的单独的可重放跟踪包括:对于每个线程,记录由所述线程执行的至少一个非确定性处理器指令的一个或多个副作用。
18.根据权利要求16所述的方法,其中所述一个或多个线程包括多个线程,所述方法还包括:识别跟踪存储器模型,所述跟踪存储器模型定义要跨所述多个线程排序的一个或多个可排序事件,其中独立地记录针对每个线程的单独的可重放跟踪包括:对于每个线程,利用单调递增的数目来记录由所述线程执行的至少一个可排序事件,所述单调递增的数目跨所述多个线程在其他可排序事件中排序所述事件。19.根据权利要求16所述的方法,其中独立地记录针对每个线程的单独的可重放跟踪包括:针对至少一个线程来记录流控制中的变化,包括以下至少一项:访问冲突,陷阱,中断,或内核调用。20.根据权利要求16所述的方法,其中记录针对所述线程的所述可重放跟踪包括:以不同于多个条目的执行顺序的乱序,将所述多个条目记录在所述可重放跟踪中。21.根据权利要求16所述的方法,其中独立地记录针对每个线程的单独的可重放跟踪包括:对于每个线程,基于所述线程的执行来检测处理器代码高速缓存未命中,以及记录响应于所述处理器代码高速缓存没命中而被导入所述处理器代码高速缓存的至少一行高速缓存数据。22.根据权利要求16所述的方法,其中所述一个或多个处理器至少基于已经针对所述线程而记录了所述至少一行高速缓存数据,来设置高速缓存行上的硬件位。23.根据权利要求22所述的方法,其中所述一个或多个处理器基于内核或另一线程对所述线程的执行的中断来切换所述硬件位。24.根据权利要求16所述的方法,其中独立地记录针对每个线程的单独的可重放跟踪包括针对至少一个线程而记录以下至少一项:基于所述线程的执行的未被高速缓存的读取;或将虚拟存储器地址映射到物理存储器地址的转换旁视缓冲器(“TLB”)条目。25.一种计算机程序产品,包括一个或多个硬件存储设备,所述一个或多个硬件存储设备具有存储于其上的计算机可执行指令,所述计算机可执行指令是一个或多个处理器可执行的,以使计算机系统记录使用数据高速缓存数据的可执行实体的执行的可重放跟踪,所述计算机可执行指令包括可执行以使所述计算机系统至少以下执行的指令:跨所述一个或多个处理器的一个或多个处理单元,执行所述可执行实体的一个或多个线程;以及在所述一个或多个线程的执行期间,独立地记录针对每个线程的单独的可重放跟踪,包括,对于每个线程:记录针对所述一个或多个处理单元中正在执行所述线程的特定处理单元的初始处理器寄存器状态;一旦基于所述线程的执行检测到针对所述特定处理的处理器数据高速缓存内的高速缓存未命中,记录响应于所述处理器数据高速缓存未命中而被导入所述处理器数据高速缓存中的至少一行高速缓存数据;检测所述线程的执行中的不连续性的发生,其中一个或多个条目在所述线程的执行中的所述不连续性期间被导入所述处理器数据高速缓存;以及
至少基于所述线程的执行中的所述不连续性的所述发生,刷新所述处理器数据高速缓存中被导入的所述一个或多个条目,其中被刷新的所述条目不被记录在所述单独的可重放跟踪中。26.一种计算机系统,包括:包括高速缓存存储器的一个或多个处理器;以及一个或多个计算机可读介质,具有存储于其上的计算机可执行指令,所述计算机可执行指令是所述一个或多个处理器可执行的,以使所述计算机系统记录使用所述高速缓存存储器中的高速缓存数据的可执行实体的执行的可重放跟踪,所述计算机可执行指令包括可执行以使所述计算机系统至少以下执行的指令:跨所述一个或多个处理器的一个或多个处理单元,执行所述可执行实体的一个或多个线程;以及在所述一个或多个线程的执行期间,独立地记录针对每个线程的单独的可重放跟踪,包括,对于至少一个线程:将针对所述至少一个线程的初始处理器寄存器状态记录到所述跟踪中;一旦基于所述线程的执行检测到所述高速缓存存储器中的高速缓存未命中,将响应于所述高速缓存未命中而被导入所述高速缓存存储器的高速缓存数据行记录到所述跟踪中;基于将所述至少一行高速缓存数据记录到所述跟踪中,在所述高速缓存存储器中设置用于所述高速缓存数据行的位;当在所述高速缓存存储器中设置用于所述高速缓存数据行的位之后,检测到另一实体随后已向所述高速缓存存储器中的所述高速缓存数据行进行写入;至少基于所述另一实体随后向所述高速缓存存储器中的所述高速缓存数据行进行写入,清除用于所述高速缓存数据行的所述位;以及至少基于清除用于所述高速缓存数据行的所述位,在所述线程的进一步执行线程之前刷新所述高速缓存数据行。27.一种处理器,包括多个寄存器和处理器高速缓存,所述多个寄存器包括至少一个通用寄存器和至少一个模型专用寄存器,所述处理器被配置为:启动记录执行实体的执行的跟踪,包括将针对所述执行实体的初始处理器寄存器状态记录到所述跟踪中,所记录的所述初始处理器寄存器状态包括所述多个寄存器中的至少一个寄存器的值;基于在将针对所述执行实体的所述初始处理器寄存器状态记录到所述跟踪中之后、在所述执行实体的执行期间检测到高速缓存未命中:记录响应于所述高速缓存未命中而被导入所述处理器高速缓存中的数据流入;以及在存储所述数据流入的所述处理器高速缓存的高速缓存行上设置硬件位,所述硬件位指示所述高速缓存行已被记录到所述跟踪中;以及基于在将针对所述执行实体的所述初始处理器寄存器状态记录到所述跟踪中之后、所述执行实体的非确定性...
【专利技术属性】
技术研发人员:J,
申请(专利权)人:微软技术许可有限责任公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。