CN110741354B - 呈现代码实体调用之间的差异 - Google Patents
呈现代码实体调用之间的差异 Download PDFInfo
- Publication number
- CN110741354B CN110741354B CN201880039816.1A CN201880039816A CN110741354B CN 110741354 B CN110741354 B CN 110741354B CN 201880039816 A CN201880039816 A CN 201880039816A CN 110741354 B CN110741354 B CN 110741354B
- Authority
- CN
- China
- Prior art keywords
- code
- attributes
- call
- entity
- calls
- 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
- 238000000034 method Methods 0.000 claims description 27
- 230000000977 initiatory effect Effects 0.000 claims 3
- 230000006399 behavior Effects 0.000 abstract description 19
- 230000006870 function Effects 0.000 description 74
- 238000010801 machine learning Methods 0.000 description 49
- 238000012545 processing Methods 0.000 description 14
- 230000005540 biological transmission Effects 0.000 description 6
- 238000012549 training Methods 0.000 description 6
- 230000006855 networking Effects 0.000 description 5
- 230000004044 response Effects 0.000 description 4
- 238000007621 cluster analysis Methods 0.000 description 2
- 239000003086 colorant Substances 0.000 description 2
- 238000001514 detection method Methods 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 230000002159 abnormal effect Effects 0.000 description 1
- 230000003190 augmentative effect Effects 0.000 description 1
- 230000003542 behavioural effect Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000013145 classification model Methods 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 239000000470 constituent Substances 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000002955 isolation Methods 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 229920001690 polydopamine Polymers 0.000 description 1
- 238000007639 printing Methods 0.000 description 1
- 230000008569 process Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 238000013403 standard screening design Methods 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/32—Monitoring with visual or acoustical indication of the functioning of the machine
- G06F11/323—Visualisation of programs or trace data
-
- 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/3664—Environments for testing or debugging software
-
- 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
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)
- Data Mining & Analysis (AREA)
- Debugging And Monitoring (AREA)
Abstract
呈现代码实体调用之间的差异包括标识代码实体的多个调用族。每个族基于多个属性被定义,这些属性标识代码实体的一类运行时行为。第一族的(多个)第一属性被标识。这些(多个)第一属性实质上有助于将代码实体的第一类调用分类在第一族内。类似地,第二族的(多个)第二属性被标识。这些(多个)第二属性实质上有助于将代码实体的第二类调用分类在第二族内。基于一个或多个第一属性与一个或多个第二属性之间的差异,呈现代码实体的至少两个调用之间的差异。
Description
本申请要求2017年06月14日递交的,标题为“PRESENTING DIFFERENCES BETWEENCODE ENTITY INVOCATIONS”、申请号为15/622,841的美国发明专利申请的优先权,该申请的全部内容通过引用结合在本申请中。
技术领域
本公开的示例实施例总体涉及计算机领域,特别地涉及用于呈现代码实体调用之间的差异的方法和系统。
背景技术
当在软件应用的开发期间编写代码时,开发人员通常花费大量时间来“调试”代码以查找运行时错误和其他源代码错误。在这样做时,开发人员可以采取若干方法来重现源代码错误并将其本地化,诸如基于不同的输入来观察程序的行为、插入调试代码(例如,打印变量值、追踪执行分支等)、暂时移除代码部分等。追踪运行时错误以查明代码错误可能会占用应用开发时间的很大一部分。
为了协助开发人员进行代码调试过程,已经开发了许多类型的调试应用(“调试器”)。这些工具向开发人员提供跟踪、可视化和更改计算机代码的执行的能力。例如,调试器可以将代码指令的执行可视化,可以在代码执行期间的不同时间处呈现代码变量值,可以使得开发人员能够更改代码执行路径,和/或可以使得开发人员能够设置关于感兴趣的代码单元的“断点”和/或“观察点”(其在执行过程中到达时导致代码的执行被挂起)等等。
新兴的调试应用形式实现“时间行程”、“反向”或“历史”调试。通过“时间行程”调试,由跟踪应用将程序(例如,诸如线程之类的可执行实体)的执行记录/跟踪到一个或多个跟踪文件中。然后,(多个)这些跟踪文件可以被用来稍后重放程序的执行,以进行正向和反向分析。例如,“时间行程”调试器可以使得开发人员能够设置正向断点/观察点(如常规调试器)以及反向断点/观察点。
发明内容
本文中的实施例通过利用重新编码的跟踪文件数据和机器学习来在用户界面处标识和呈现可执行实体的不同调用之间的运行时差异,从而扩展时间行程调试器的实用性。例如,实施例可以利用对跟踪文件数据的机器学习,以基于它们的运行时行为的差异(例如,执行了哪些代码块,执行了哪些代码块序列,遇到了什么异常等)来将同一可执行实体的不同调用分类为不同族。实施例还可以标识哪些运行时行为属性有助于将不同的调用分类为不同族。使用这样的知识,实施例可以可视地呈现实体的不同调用之间的差异,包括例如哪些运行时差异有助于以不同方式执行的实体,代码的覆盖范围由不同调用执行,由不同调用所采取的代码路径,哪些条件有助于采取不同分支的调用等等。
在一些实施例中,一种用于呈现代码实体调用之间的一个或多个差异的方法包括:标识要对其执行差异分析的代码实体。该方法还包括标识代码实体的多个调用族。每个族基于多个属性被定义,这些属性标识代码实体的至少一类运行时行为。该方法还包括:标识第一族的一个或多个第一属性和第二族的一个或多个第二属性,一个或多个第一属性实质上有助于将代码实体的第一类调用分类在第一族内,一个或多个第二属性实质上有助于将代码实体的第二类调用分类在第二族内。该方法还包括基于一个或多个第一属性与一个或多个第二属性之间的差异来呈现代码实体的至少两个调用之间的差异。
提供本发明内容以简化的形式介绍一些概念,这些概念将在下面的详细描述中被进一步描述。本发明内容既无意标识所要求保护的主题的关键特征或必要特征,也无意用于帮助确定所要求保护的主题的范围。
附图说明
为了描述可以获得本发明的上述及其他优点和特征的方式,将通过参考在附图中图示出的本发明的特定实施例来对以上简要描述的本发明进行更具体的描述。应理解,这些附图仅仅描绘了本发明的典型实施例,并且因此不应认被为是对本发明范围的限制,将通过使用附图以附加的特征和细节来描述和解释本发明,其中:
图1图示了促进基于跟踪文件数据来呈现代码实体调用之间的差异的示例计算环境;
图2A图示了将代码实体的相关调用分类为不同族的第一示例;
图2B图示了将代码实体的相关调用分类为不同族的第二示例;
图3A图示了使用代码比较用户界面来呈现调用之间的差异的第一示例;
图3B图示了使用代码比较用户界面来呈现调用之间的差异的第二示例;
图4图示了在时间行程调试会话期间呈现差异的用户界面的示例;和
图5图示了用于呈现代码实体调用之间的差异的示例方法的流程图。
具体实施方式
本文中的实施例通过利用重新编码的跟踪文件数据和机器学习来在用户界面处标识和呈现可执行实体的不同调用之间的运行时差异,从而扩展时间行程调试器的实用性。例如,实施例可以利用对跟踪文件数据的机器学习,以基于它们的运行时行为的差异(例如,执行了哪些代码块,执行了哪些代码块序列,遇到了什么异常等)来将同一可执行实体的不同调用分类为不同族。实施例还可以标识哪些运行时行为属性有助于将不同的调用分类为不同族。使用这样的知识,实施例可以可视地呈现实体的不同调用之间的差异,包括例如哪些运行时差异有助于以不同方式执行的实体,代码的覆盖范围由不同调用执行,由不同调用所采取的代码路径,哪些条件有助于采取不同分支的调用等等。
为了达到上述目的,图1图示了示例计算环境100,该示例计算环境100促进基于跟踪文件数据来呈现代码实体调用之间的差异。如图所描绘的,实施例可以包括或利用专用或通用计算机系统101,其包括计算机硬件,诸如举例而言,一个或多个处理器102、系统存储器103、一个或多个数据存储104和/或输入/输出硬件105(例如,诸如所描绘的键盘/鼠标硬件105a、联网硬件105b和显示设备105c)。在一些实施例中,计算机系统101及其中的组件可以包括虚拟化环境。
本发明范围内的实施例包括用于承载或存储计算机可执行指令和/或数据结构的物理和其他计算机可读介质。这样的计算机可读介质可以是计算机系统101能够访问的任何可用介质。存储计算机可执行指令和/或数据结构的计算机可读介质是计算机存储设备。承载计算机可执行指令和/或数据结构的计算机可读介质是传输介质。因此,作为示例而非限制,本发明的实施例可以包括至少两种明显不同种类的计算机可读介质:计算机存储设备和传输介质。
计算机存储设备是存储计算机可执行指令和/或数据结构的物理硬件设备。计算机存储设备包括各种计算机硬件,诸如RAM、ROM、EEPROM、固态驱动器(“SSD”)、闪存、相变存储器(“PCM”)、光盘存储装置、磁盘存储装置或其他磁性存储设备或(多个)任何其他硬件设备,这样的硬件设备可以被用来存储计算机可执行指令或数据结构形式的程序代码并且可以由计算机系统101访问和执行以实现本发明所公开的功能性。因此,计算机存储设备例如可以包括所描绘的系统存储器103、可以存储计算机可执行指令和/或数据结构的所描绘的数据存储104、或者如稍后讨论的诸如处理器上存储装置之类的其他存储装置。
传输介质可以包括网络和/或数据链路,其可以被用来承载计算机可执行指令或数据结构形式的程序代码,并且可以由计算机系统101访问。“网络”被定义为使得能够在计算机系统和/或模块和/或其他电子设备之间传送电子数据的一个或多个数据链路。当信息通过网络或另一通信连接(硬连线、无线或硬连线或无线的组合)传送或提供给计算机系统时,计算机系统可以将这样的连接视为传输介质。上述的组合也应被包括在计算机可读介质的范围内。例如,输入/输出硬件105可以包括联网硬件105b(例如,硬连线或无线网络接口模块),该联网硬件105b连接可以被用来承载计算机可执行指令或数据结构形式的程序代码的网络和/或数据链路。
此外,在到达各种计算机系统组件时,可以将计算机可执行指令或数据结构形式的程序代码从传输介质自动传送到计算机存储设备(反之亦然)。例如,可以将通过网络或数据链路接收到的计算机可执行指令或数据结构缓冲在联网硬件105b内的RAM中,然后最终将其传送到系统存储器103和/或计算机系统101处的易失性较低的计算机存储设备(例如,数据存储104)。因此,应当理解,计算机存储设备可以被包括在计算机系统组件中,该计算机系统组件也可以(或者甚至主要地)利用传输介质。
计算机可执行指令例如包括指令和数据,这些指令和数据当在(多个)处理器102处被执行时,使计算机系统101执行特定功能或一组功能。计算机可执行指令例如可以是二进制、中间格式指令(诸如汇编语言)或者甚至源代码。
本领域技术人员将理解,可以在具有许多类型的计算机系统配置的网络计算环境中实践本发明,这样的计算机系统配置包括个人计算机、台式计算机、膝上型计算机、消息处理器、手持式设备、多处理器系统、基于微处理器或可编程的消费类电子产品、网络PC、小型计算机、大型计算机、移动电话、PDA、平板电脑、寻呼机、路由器、交换机等。也可以在通过网络(通过硬连线数据链路、无线数据链路或通过硬连线和无线数据链路的组合)链接的本地和远程计算机系统均执行任务的分布式系统环境中实践本发明。如此,在分布式系统环境中,计算机系统可以包括多个组成计算机系统。在分布式系统环境中,程序模块可以位于本地和远程存储设备中。
云计算模型可以由各种特性组成,诸如按需自助服务、广泛的网络访问、资源池、快速弹性、测量的服务等等。云计算模型也可以采用各种服务模型的形式,诸如例如软件即服务(“SaaS”)、平台即服务(“PaaS”)和基础设施即服务(“IaaS”)。也可以使用诸如私有云、社区云、公共云、混合云等不同的部署模型来部署云计算模型。
一些实施例,诸如云计算环境,可以包括一种系统,该系统包括一个或多个主机,每个主机能够运行一个或多个虚拟机。在操作期间,虚拟机模拟一个操作计算系统,支持操作系统,并且可能还支持一个或多个其他应用。在一些实施例中,每个主机包括管理程序,该管理程序使用从虚拟机角度看抽象出的物理资源来模拟用于虚拟机的虚拟资源。管理程序还可以在虚拟机之间提供适当的隔离。因此,从任何给定虚拟机的角度来看,管理程序提供了虚拟机正在与物理资源进行接口的错觉,即使虚拟机仅与物理资源的表现形式(例如虚拟资源)进行接口。物理资源的示例,包括处理能力、存储器、磁盘空间、网络带宽、媒体驱动器等。
数据存储104通常包括耐用性存储装置,可以存储表示应用代码的计算机可执行指令和/或数据结构,诸如例如调试器106(包括例如记录组件106a、重放组件106b、索引组件106c、查询/搜索组件106d、机器学习组件106e等)、操作系统107和应用108(包括应用108的部分可执行代码108a)。数据存储104还可以存储其他类型的数据,诸如一个或多个跟踪文件109。当(例如,使用(多个)处理器102)执行应用代码时,系统存储器103可以存储对应的运行时数据,诸如运行时数据结构、计算机可执行指令等等。因此,图1将系统存储器103图示为包括运行时调试器数据106'(运行时记录数据106a'、运行时重放数据106b'、运行时索引数据106c'、运行时查询/搜索组件数据106d'、运行时机器学习组件数据106e'等)、运行时操作系统数据107'和运行时应用数据108'(例如包括应用108在它执行时的运行时变量、数据结构等以及运行时代码部分108a',运行时代码部分108a'是代码部分108a的存储器中副本)。
虽然记录组件106a、重放组件106b、索引组件106c、查询/搜索组件106d和机器学习组件106e被描述为调试器106的一部分,但应当理解,这些组件中的一个或多个可以是独立应用,或者是一些其他应用的一部分。记录组件106a可用于跟踪诸如应用108(包括其可执行代码部分108a)之类的应用的执行,并将跟踪数据存储在(多个)跟踪文件109中。在一些实施例中,记录组件106a本身可以被集成到操作系统107中,被集成到管理程序中,或被集成到其他一些运行时或虚拟化技术中。记录组件106a也可以存在于完全不同的计算机系统处。因此,记录组件106a可以在另一计算机系统处跟踪代码的执行。然后,由该跟踪产生的(多个)跟踪文件109可以(例如,使用联网硬件105b)被传送到计算机系统101,以用于由索引组件进行索引和/或由重放组件106b进行重放。尽管(多个)跟踪文件109被描绘为被存储在数据存储104中,但是它们也可以被排他地或临时地记录在系统存储器103中或一些其他存储设备处。
图1还包括(多个)处理器102的内部硬件组件的简化表示。如所图示的,每个处理器102包括(多个)处理单元102a。每个处理单元可以是物理的(即,物理处理器核)和/或逻辑的(即,由支持超线程的物理核所呈现的逻辑核,其中多于一个应用线程在物理核处执行)。因此,例如,即使处理器102在一些实施例中可以仅包括单个物理处理单元(核),它也可以包括由该单个物理处理单元所呈现的两个或更多虚拟处理单元102a。
每个处理单元102a执行由应用(例如,调试器106、操作系统107、应用代码部分108a等)定义的处理器指令,并且这样的指令是从预定义的处理器指令集架构之中选择的。给定处理器102的特定指令集架构基于处理器制造商和处理器模型而不同。常见的指令集架构包括来自因特尔(INTEL)公司的IA-64和IA-32架构、来自超微半导体(ADVANCED MICRODEVICES)公司的AMD64架构和来自ARM持股公司(ARM HOLDINGS PLC)的各种进阶RISC机器(“ARM”)架构,但是还存在许多其他指令集架构并且这样的指令集架构也可以由本发明使用。通常,“指令”是由处理器可执行的最小的外部可见(即,在处理器外部可见)的代码单元。
每个处理单元102a从共享处理器高速缓存102b获得处理器指令(即,由处理单元102a共享),并基于共享高速缓存102b中的数据,基于寄存器102c中的数据和/或在没有输入数据的情况下执行处理器指令。通常,共享高速缓存102b是少量(即,相对于系统存储器103的典型数量而言是少量)的随机存取存储器,其存储部分系统存储器103的处理器上副本。例如,当执行应用108的可执行代码部分108a时,共享高速缓存102b在共享高速缓存102b的代码高速缓存部分中存储运行时代码部分108b'的子集,并在共享高速缓存102b的数据高速缓存部分中存储其他运行时应用数据108'(例如,变量、数据结构等)。如果(多个)处理单元102a需要尚未存储在共享高速缓存102b中的数据,那么发生“缓存未命中”,并且该数据从系统存储器103中被取指(可能会从共享高速缓存102b中逐出一些其他数据)。寄存器102c是基于硬件的存储位置,其是基于处理器102的指令集架构来定义的。
重放组件106b通过在(多个)处理器102处执行(多个)跟踪文件109所基于的可执行实体的代码,来重放一个或多个跟踪文件109,同时在适当的时间向该代码供应来自(多个)跟踪文件109的跟踪数据(例如,寄存器值、存储器值等)。因此,记录组件106a例如可以在(多个)处理器102处记录应用108的一个或多个代码部分108a的执行,同时在(多个)跟踪文件109中存储跟踪数据(例如,由代码指令读取的存储器值、由代码指令供应的寄存器值等等)。然后,重放组件106b可以在(多个)处理器102处重新执行(多个)代码部分108a,同时向该代码供应来自(多个)跟踪文件109的跟踪数据,使得代码以与其在跟踪时相同的方式被执行。
根据本文的实施例,索引组件106c可以将一个或多个跟踪文件109(例如,(多个)原始跟踪文件109a)作为输入,并记录一个或多个跟踪文件109(例如,(多个)索引跟踪文件109b)。索引通常输出被构造为改善重放性能的被索引的(多个)跟踪文件109b,诸如通过在跟踪中在各个点插入关键帧(即,使得重放组件106b可以在跟踪中的各个位置处发起重放),以及通过插入诸如存储器快照、反向查找数据结构之类的附加索引数据结构(使得重放组件106b能够快速标识与所期望的数据相关的跟踪段,诸如被访问的存储器位置、所看到的返回值、所看到的输入参数等)等等。
尽管图1将(多个)原始跟踪文件109a和(多个)索引跟踪文件109b图示为是分开的,但应意识到它们实际上可以是同一文件。例如,代替记录全新文件,索引组件106c可以用索引数据来更新/增强输入跟踪文件。例如,索引组件106c可以更新输入跟踪文件的现有数据流,将附加数据流插入到输入跟踪文件中,将数据追加到输入跟踪文件的末尾,将数据新增到输入跟踪文件的开头,等等。
查询/搜索组件106d进行使用(多个)索引跟踪文件109b来响应用户查询。例如,查询可以使用重放组件106b来重放被索引的(多个)跟踪文件109b的选择部分,以便返回响应于用户查询的原始数据集。搜索可以进一步应用过去查询和/或搜索的机器学习和规则来过滤数据集,以便返回排序结果,这样的排序结果尝试响应用户的搜索来披露更相关的结果。
机器学习组件106e将机器学习技术应用于(多个)跟踪文件109中的数据,以便标识与一个或多个代码部分108a的执行有关的属性,并将这些属性分类为不同族。然后,这些属性族可被调试器106使用,以增强和精炼呈现给用户的数据,诸如由重放组件106b或查询/搜索组件106d使用。如稍后将更详细讨论的,这包括利用族来(例如,由重放组件106b和/或查询搜索组件106d)在用户界面处呈现可执行实体的不同调用之间的运行时差异。
在一些实施例中,索引组件106c在索引运行期间利用机器学习组件106e来产生这些族并将其存储到被索引的跟踪文件109d中。在附加或替代实施例中,重放组件106b和/或查询搜索组件106d利用机器学习组件106e,以便即时应用机器学习,以便响应用户提供的命令和请求。当这样做时,重放组件106b和/或查询搜索组件106d可以使被索引的跟踪文件109d被扩充所产生的任何数据。
如上所提及,机器学习组件106e标识与一个或多个代码部分108a的执行有关的属性,并将这些属性分类为不同族。每个族通过其运行时行为来标识彼此相关的一个或多个代码部分108a的调用。例如,代码的相同部分由于其执行环境的变化、输入的变化、时序的变化等而在其被调用时可能以不同的方式执行。因此,机器学习组件106e标识特定的代码在其被调用时所展现的不同类别的行为,并将这些调用归组为不同族。例如,如果本代码部分作为函数,则一个族可以将引起异常的函数的调用模式进行归组,另一个族可以将返回了第一返回值或第一族相关返回值的函数的调用模式进行归组,而又一个族可以将返回了第二返回值或第二族相关返回值的函数的调用模式进行归组。机器学习组件106e还可以标识这些族之间的排序。例如,在一些实施例中,可以根据这些族标识的调用在执行期间发生的频率来对这些族进行排序。因此,在这些实施例中,较不频繁(即,罕见)调用的族可以比较频繁(即,常见)调用的族排序更高。
机器学习组件106e使用的(多个)特定机器学习算法可以取决于实现目标而不同。然而,可能有用的两类机器学习算法是聚类分析算法和异常检测算法。聚类分析是指将一组对象进行归组的机器学习算法的类别,使得同一群组(或“聚类”)中的对象比其他聚类中的对象(至少以一种方式)彼此更相似。另一方面,异常检测是指机器学习算法的一些类别,这些算法标识数据集中与预期模式或数据集中其他项目不符的项目。
在一些实施例中,机器学习组件106e可以使用监督机器学习,其中(多个)机器学习算法被供应有训练数据集。例如,训练数据集可以包括所期望类型的族的标识,以及应被分类到每个族下的示例调用。然而,在其他实施例中,机器学习组件106e可以在无监督的情况下操作,其中它在无训练数据的情况下即可执行其分析。因此,机器学习组件106e本身可以确定族的常见类型以及属于那些族的调用的模式。在任一实施例中,可以基于用户反馈和/或对用户如何与搜索结果集交互(例如,用户与之交互的结果)的分析来精炼由(多个)机器学习算法开发的分类模型。
为了促进对机器学习技术的进一步理解,图2A和图2B图示了将代码实体的相关调用分类为不同族的一些具体示例。图2A提供了机器学习的一个示例200,该示例机器学习可以基于包括简单函数201IsPointingToOne(…)的代码实体而被应用。注意,尽管为了描述简单起见,函数201以更高级的编程语言示出,但是在一些实施例中,搜索组件1500最好以更低级的汇编语言/处理器指令来更细粒度地操作。
如本领域技术人员将认识到的,函数201接收指向字符的指针(ptr)作为输入参数,并且如果字符的值为1,则它返回布尔值——true(真);如果字符的值为除了一以外的任何值,则返回false(假)。特别地,在行2,函数201取消引用ptr以获取字符的值,将该值存储在变量toInspect中,然后在行3,它确定toInspect的值是否等于1。如果是,则函数201在行4返回true,否则在第6行返回false。
(例如,通过机器学习组件106e)对函数201的调用进行分析,以确定其不同的调用族共享相同或相似的特性,这些特性可能与执行函数201有关(尤其是与调试有关)。因此,可以根据这些族对函数201的调用进行归组。
如上所提及,可以用训练数据集来训练机器学习算法。因此,用户可能会供应期望类别的族的标识作为训练数据集的一部分,但是也可以通过使用无监督机器学习来标识它们。例如,表203的第一列203a中所示的一些类别的族可以包括那些返回true的调用、那些返回false的调用以及那些引发异常的调用(即,由于在行2无法取消引用ptr)。
本领域技术人员将认识到,在执行函数201多次之后(例如,数十、数百、数千或更多次)——并且取决于函数201执行的环境——函数201的一种可能调用模式可能是:大多数的调用返回了false(即,ptr指向除了一以外的某值),并且其余的大多数调用返回了true(即,ptr指向一),并且其余的一小部分调用引发了异常(即ptr无法取消引用,因为它指向无效的存储器位置、无法访问的存储器位置等)。
当然,可以使用其他类别的族来对相关的函数调用进行归组(如表203中的省略号所一般指示的那样)。这些例如可以包括返回值类型、输入参数的直接值(例如,ptr所指向的特定地址/地址范围)、输入参数的间接值(例如,ptr所引用的字符的特定值/值范围)、输入参数类型、任何全局变量的值(例如,其可能会影响ptr的值和/或它基于函数201以外的代码所引用的位置)、所引发的异常的类型、在函数201调用期间执行的指令的数目、针对每个决策点采取和/或未采取的分支计数(例如,在行3采取“if”路径的次数;其他类型的计数可以包括采取“else”路径的次数,循环的迭代次数等)、执行每个子实体(块或子函数)的次数、被更改的数据结构等。
在一些实施例中,将实体(例如,函数201)的相关调用分类为族包括:将那些实体划分为子实体(例如,块或子函数),以及分析那些子实体的调用的模式。例如,当在处理器指令级别上操作时,子实体可以包括“基本块”——这对本领域技术人员来说是已知作为执行单元的指令序列(即,其中该块中的所有指令执行或没有指令执行,除了异常)。这些子实体可以被视为“虚拟”函数,或者是由较大实体(例如,函数201)调用的单独函数。因此,在一些实施例中,族不仅可以将整个实体的调用进行归组,而且还可以将子实体的相关调用(或子实体的调用序列)进行归组。
例如,参考函数201,图2A图示了三个可能的子实体202(即,块A、B和C)。块A包括行2和行3(其对ptr取消引用并确定被取消引用的值是否等于1)、块B包括行4(其返回true)、并且块C包括第6行(其返回false)。注意,如果机器学习组件106e操作在处理器指令级别而不是更高级的源代码行,则每个块可以包括许多个体指令。
机器学习组件106e可以分析函数201的不同调用——包括其子实体202的调用——以便将这些调用归组为不同族。因此,向(多个)机器学习算法的输入可以是属性/变量,其包括在函数201的调用期间是否调用了个体子实体(例如,基本块)。如所指示的,可以由人类用户建议将调用进行归组的族(例如,作为训练数据集的一部分),或者可以完全由机器学习组件106e自己的分析来标识之。
例如,表203示出了函数201的调用族的可能类别(即,列203a)与由对应于那些类别的子实体(A、B和C)所定义的属性值(即,列203b)之间的映射。如列203a中所示,可能的族包括:函数201返回true时、函数201返回false时、以及函数201引发异常时。特别地,类别“返回值true”对应于属性A=1(即,当函数201返回true时,块A被调用一次),属性B=1(即,当函数201返回true时,块B被调用一次),以及属性A+B=1(即,当函数201返回true时,序列A+B被调用一次)。属性C=0和A+C=0指示当函数201返回true时,不调用块C和序列A+C。类似地,类别“返回值false”对应于属性A=1,C=1和A+C=1(并且当函数201返回false时,不调用块B和序列A+B)。类别“引发异常”对应于属性A=1(并且当函数201引发异常时,不调用块B和C,也不会调用任何块组合)。注意,为了清楚和容易地描述,示出了列203a,以便引入将代码实体归组到类别中的概念,并且在基于列203b中的属性的机器学习分析之前,可以知晓或可以不知晓类别的标识。
当将列203b中的属性供应给一个或多个机器学习算法时,(多个)那些算法将标识在同一族中归在一起的(多个)属性的(多个)集合。它们还可以根据一个或多个预定义的族来标识一个或多个族、自身和/或属性群组集合。(多个)算法还可以基于执行期间每个族中的(多个)属性集合的出现频率来对这些族进行排序。
因此,图2A示出了三个族204a-204c,每个族包括归在一起的属性集合,因为它们基于函数201是否返回true、是否返回false或者是否引发异常来表征函数201的调用。特别地,图2B示出了第一族204a、第二族204b以及第三族204c,第一族204a包括表征其中函数201引发异常的调用的一个属性集合(即,B=0,C=0),第二族204b包括表征其中函数201返回true的调用的三个属性集合(即,A=1,B=1,C=0;A+B=1;以及A+C=0),第三族204c包括表征其中函数201返回false的调用的两个属性集合(即,B=0,C=1和A+C=1)。请注意,所示出的属性集合仅是示例,并不是详尽的。此外,所示出的属性集中存在一些冗余——例如,族204b中的集合可以被合并为“B=1,C=0”,而族204c中的集合可以被合并为“B=0,C=1”。
注意,在图2A中,按稀有性对族204a-204c进行了排序,其中引发异常的调用最为罕见,并且返回false的调用最为常见。特别地,由于族204a所标识的值的集合在函数201的不同调用期间发生频率最低,所以族204a被排序在最前;由于族204c所标识的值的集合在函数201的不同调用期间发生频率最高,所以族204c被排在最后。此排序可以至少部分地基于(即,由重放组件106b)由跟踪所记录的函数201的实例的重放,并且基于标识每个序列在执行期间发生的频率。附加地或替代地,该排序可以至少部分地基于对诸如反向查找数据结构之类的索引数据的引用。这些排序可用于标识调用的哪个(多个)族可能是“正常”,调用的哪个(多个)族可能是“异常”。
图2B提供了机器学习的另一个示例205,该示例可以被应用于更复杂的函数206GetProcessingResults(…),该函数返回缓存的数据,并且如果被请求的数据不在缓存中则执行所需的处理。如本领域技术人员将认识到的,函数206接收指向输入类型InputType的指针(pInput)作为输入参数,并且其返回指向数据类型ReturnType的指针,该类型是由函数PerformProcessing(…)对pInput的处理而产生的——在本示例中假定它足够昂贵以保证将结果高速缓存。更具体而言,函数206在行2从pInput获取一个键(key)。然后,在行3,基于该键,从缓存s_cache获取指向高速缓存的处理数据的指针(即,通过PerformProcessing(…)对pInput的先前处理的结果)。在行4,函数206检查是否没有被高速缓存的处理数据(即,在行3获得的指针为空)。如果是,则它在行5执行处理,并在第6行将其添加到s_cache。然后,在行8,函数206返回被高速缓存的数据(它是否已经存在,或者它是否刚被添加)。
图2B还示出了函数201的三个可能的子实体207(即,块A、B和C)。块A包括行2和行3(其从pInput获取一个键并在s_cache中获取指向该键的指针),块B包括行5和行6(其在pInput上调用PerformExpensiveCalculation(…)并高速缓存结果),块C包括第8行(其返回指向被高速缓存的结果的指针)。
另外,尽管有各种各样的族类别可以与GetProcessingResults(…)的归组调用结合使用,但是图2B在表208的第一列208a中示出了两个可能的类别是:结果被高速缓存或结果未被高速缓存。表208在第二列208b中还示出,返回被高速缓存的结果的调用具有属性A=1、C=1和A+C=1(即,块A和块C各自被调用一次,并且序列A+C被调用一次)。块B以及序列A+B、B+C和A+B+C未被调用。返回未被高速缓存的结果的调用具有属性A=1、B=1、C=1、A+B=1、B+C=1和A+B+C=1(即,块A、B和C各自被调用一次,序列A+B、B+C和A+B+C各自被调用一次)。序列A+C未被调用。
与图2A相似,表208中的数据(例如,列208b中的属性)可以被用作一种或多种机器学习算法的输入,以便生成排序后的族,例如包括标识以下(多个)属性集合的一个族,这样的(多个)属性集合表征函数206中直接返回被高速缓存的结果的调用,以及标识以下(多个)属性集合的族,这样的(多个)属性集合表征返回未被高速缓存的结果的函数206的调用。可以根据每个族的(多个)属性集合出现的频率对这些族进行排序。
为了简单起见,前述示例集中于使用包括构成那些函数的基本块的输入属性来对各个函数的行为调用进行分类。然而,鉴于本文的公开内容,本领域普通技术人员将认识到,这仅是将机器学习应用于跟踪数据的一种示例方式。例如,机器学习可以附加地或替代地在类、模块、库、源代码文件等等级别上对调用进行分类。此外,用作机器学习算法的输入的属性可以包括基本块(如在上述示例中),在调用期间重复发生的基本块的唯一序列(例如,基本块的“n元”(n-gram)),在调用期间(例如,由于代码中的循环/跳转)发生的个体基本块和/或n元的计数,在调用的执行期间发生的(多个)异常的(多个)类型,在调用的执行期间发生的异常的计数,在调用期间执行的函数和/或n元函数(例如,如果调用是在源代码文件、类、模块等级别)。
实施例可以利用前述机器学习——包括使用由机器学习标识的代码实体调用族,以便向用户清楚地呈现代码实体的不同调用(或调用族)之间的运行时差异。例如,基于要对其执行差异分析的代码实体(例如,源代码文件、类、模块、函数等)的标识,以及基于对要被比较的该代码实体的两个或更多调用的标识,机器学习组件106e可以利用调用的族——包括与那些族相关联的属性——来标识在运行时执行那些调用的方式中的一个或多个差异。然后可以在用户界面处(例如,由重放组件106b、查询/搜索组件106d等)呈现那些运行时差异。
可以基于与正被比较的调用已排序到的族相关联的属性之间的差异,来标识这些调用之间的运行时差异。例如,回去参考图2A,如果将返回true的函数201的一个或多个调用与返回false的函数201的一个或多个调用进行比较,则族204b中的属性和族204c中的属性之间的差异可以被用来标识调用之间的运行时行为的差异。在一些实施例中,针对每个族的所有(或基本上所有)属性可以被呈现为表示每个调用的运行时行为。例如,当个体考虑函数201的每个块(A、B和C)时,属性“A=1、B=1和C=0”有助于将函数201的调用分类为返回true,而属性“A=1、B=0和C=1”有助于将函数201的调用分类为返回false。因此,可以基于这些属性来呈现两个调用之间的运行时行为。
图3A图示了使用代码比较用户界面301呈现调用之间的差异的一个示例,其中并排呈现了由每个调用执行的代码的覆盖范围。用户界面301可以例如由查询/搜索组件106d基于搜索结果的选择来呈现,或者由重放组件106b基于调试会话期间的函数的选择来呈现。在图3A中,在左窗格302中显示返回true的函数201的第一调用的代码覆盖范围,并且在右窗格303中显示返回false的函数201的第二调用的代码覆盖范围。在这样的示例中,用户界面301通过以黑体字强调被执行的代码行来指示代码覆盖范围,但是这可以通过许多方式来完成,诸如通过使用颜色、不同的字体、不同的字体大小、指针或其他指示符等。这里,由于第一调用执行块A和B,所以与那些块(2-4)相对应的行在左窗格302中以粗体示出,并且由于第二调用执行块A和C,所以与那些块(2、3和6)相对应的行在右窗格303中以粗体示出。因此,用户快速一瞥就可以标识不同调用的执行方式之间的差异。
在一些实施例中,机器学习组件106e可以通过仅标识针对要呈现的每个调用的属性的子集来提供进一步的精炼——诸如仅仅实质上有助于调用被分类到一个族下的那些属性,或者仅仅对调用被分类到一个族下帮助最大的那些属性。例如,尽管属性“A=1、B=1和C=0”有助于将函数201的调用分类为返回true,而属性“A=1、B=0和C=1”有助于将函数201的调用分类为返回false,但是一些属性的贡献大于其他属性。由于两个调用都执行了代码块A,因此这个属性无助于将这些调用分类为族204b和族204c的决定。然而,属性B和C有助于此。如此,当呈现调用之间的差异时,该呈现可以基于属性B和C区分调用,同时排除属性A。
图3B图示了使用类似于用户界面301的代码比较用户界面304呈现调用之间的差异的另一个示例。类似于界面301,用户界面304并排呈现了由每个调用执行的代码(在左窗格305中表示第一调用的执行,在右窗格306中表示第二调用的执行)。然而,与突出显示了整个代码覆盖范围的用户界面301不同,用户界面304仅突出显示了的实质上有助于(或帮助最大)调用被分类到其相应族中的代码。因此,由于块B的第一调用的执行对将其分类为返回true帮助最大,因此仅行4(对应于块B)在左窗格305中以粗体示出。类似地,由于块C的第二调用的执行对将其分类为返回false帮助最大,因此仅第6行(对应于块C)在右窗格306中以粗体示出。因此,快速一瞥,用户就可以快速下钻到对引起两个调用之间的不同行为而言最重要的代码。
注意,混合方法也是可能的。例如,用户界面可以呈现调用之间的完整代码覆盖范围,但会强调对不同行为做出最大帮助的特定部分。例如,窗格302和305可以通过以第一颜色强调行2和行3(即,用以指示它们由调用执行)和以第二颜色强调行4(即,用以指示其由调用执行,并且其有助于调用返回true)而被组合在一起。类似地,窗格303和306可以通过以第一颜色强调行2和行3(即,用以指示它们由调用执行)和以第二颜色强调行6(即,用以指示其由调用执行,并且其有助于调用返回false)而被组合在一起。
注意,取决于被用来对调用进行分类的属性,诸如用户界面301和304之类的用户界面可以呈现附加信息。例如,如果代码包括循环(例如,诸如for,while之类的语句),则可以用调用采取循环的次数来注释与该循环相对应的源代码行。附加地或替代地,可以将不同的行被执行的次数呈现为“热图”,诸如对于较不频繁执行的行使用较亮的阴影,而对于较频繁执行的行使用较暗的阴影。作为另一示例,如果代码包括分支(例如,诸如if、else、case之类的语句),则可以用采取了哪个分支的指示来注释与分支相对应的源代码行。在分支的情况下,可以进一步注释与分支相对应的源代码行,以突出显示分支的哪个条件(例如,多个参数之中的哪个参数)导致分支以它这样的方式而被采取了。作为另一个示例,如果发生异常,则引起异常的源代码行可以被注释以指示这种情况,并且可能包括诸如异常类型、异常发生的次数之类的其他信息。
用于呈现调用之间的差异的其他类型的用户界面也是可能的。例如,图4仅图示了可以在时间行程调试会话期间呈现差异的用户界面400的一个示例。例如,图4呈现了示例调试会话,诸如可以由重放组件106b呈现的图2B的函数206的先前调用的调试会话,同时将该先前调用与函数206的另一调用进行比较。
用户界面400图示了在逐步通过函数206的调用时可以如何应用差异分析的几个说明性示例。如标题401中所指示,正在执行调用X期间的GetResults.cpp代码的执行重放,同时将其与调用X进行比较。在用户界面400中,如箭头402所指示,在调用X期间函数206的执行已在行16停止。这里,如在断点窗格403中所指示的,到断点已停止代码重放。用户可能已经手动请求了此断点,但是一些实施例考虑了在遇到两个调用之间的执行差异时自动中断重放。因此,如断点窗格403中所指示的,由于在调用X和Y的执行期间评估if语句的方式有所差异,因此自动设置了此断点。用户界面还包括差异分析窗格404,其详述了这些差异。例如,如所指示,当前调用(X)将条件评估为false,并且跳至行20。相比之下,比较调用(Y)将条件评估为true,并且继续到行17。
存在多种不同方式,诸如用户界面400之类的界面可以通过这多种不同方式来呈现差异。例如,用户界面可以隐藏或折叠以相同方式执行调用的代码,包括其他调用采取相同代码路径的整个代码分支。作为另一个示例,诸如通过突出显示由其他调用所采取的代码行或对其进行颜色编码(例如,如结合图3B所述)、通过使用与条件相关联的代码行相关联的工具提示或其他形式的弹出窗口、通过用图标或其他指示符注释与条件相关联的代码行等等,作为用户界面400可以在分支处指示其他调用以多种方式(作为所示出的差异分析的补充或替代)采取了其他路径。另外,结合图3B讨论的任何示例可以被应用于用户界面400,包括以分割窗格视图呈现用户界面400。
还可以使用所采取的路径的图形视图来呈现差异。例如,用户界面可以以任何相关的形式(诸如树、图等)呈现高级代码结构。然后(例如,用文本、不同的颜色、粗体等)可以对该结构进行注释,以指示不同的调用采取了哪些路径,调用执行了某些元素多少次,异常发生在什么地方等等。在一些实施例中,可以并排可视地呈现与不同调用相对应的不同结构。
另外,尽管已经将用户界面描述为比较个体调用之间的差异,但是它们可以同等地适用于比较整个调用族(例如,将单个调用与一个调用族进行比较,或者将一个调用族与另一个调用族进行比较)。例如,用户界面可以描绘一个族中所有、大多数或统计上显著数量的调用所共有的行为相对于另一个族中所有、大多数或统计上显著数量的调用所共有的行为的差异,而不是描绘个体调用的行为差异。
此外,尽管本文的用户界面描绘了两个调用(或族)之间的比较,但可以将它们扩展为同时比较两个以上的调用/族。例如,图3A和图3B可以使用附加窗格,或者图4可以呈现针对调用Y以外的替代调用的信息。
鉴于前述内容,图5图示了用于呈现代码实体调用之间的差异的方法500的示例。参照图1-图4来描述方法500。尽管方法500被呈现为一连串动作,但将理解,所示出的动作的特定数量和顺序仅仅是呈现代码实体调用之间的差异的示例。
如所描绘的,方法500包括标识用于差异分析的代码实体的动作501。在一些实施例中,动作501包括标识要对其执行差异分析的代码实体。例如,可以基于重放组件106b在重放期间的用户活动或基于查询/搜索组件106d呈现的搜索结果的选择来选择代码实体。该代码实体可以包括与整个源代码文件或源代码文件集合相对应的可执行指令,或者与诸如类、模块、函数之类的各个代码段相对应的可执行指令。
方法500还包括标识代码实体的调用族的动作502。在一些实施例中,动作502包括标识代码实体的多个调用族,基于标识代码实体的至少一类运行时行为的多个属性来定义每个族。例如,如结合图2A和图2B所描述的,机器学习组件106e可以基于描述了不同调用的运行时行为的属性(例如,所执行的代码块和/或代码块序列、所遇到的异常、所执行的代码块的数量/序列等)来开发代码实体调用族。这些族可以被索引组件106c标识为索引的一部分,和/或基于重放组件106b和/或查询/搜索组件106d响应于用户输入的请求而被标识。
方法500还包括标识实质上有助于将不同调用进行分类的属性的动作503。在一些实施例中,动作503包括标识实质上有助于将代码实体的第一类调用分类在第一族内的第一族的一个或多个第一属性,以及实质上有助于将代码实体的第二类调用分类在第二族内的第二族的一个或多个第二属性。例如,如结合图2A所讨论的,机器学习组件106e可以标识哪些属性对将主题调用分类在特定族内有实质性帮助或帮助最大。因此,对于要被比较的每个调用,可以标识这些属性。
方法500还包括基于所标识的属性来呈现调用之间的差异的动作504。在一些实施例中,动作504包括基于一个或多个第一属性与一个或多个第二属性之间的差异来呈现代码实体的至少两个调用之间的差异。例如,如结合图3A-图4所描述的,存在可以在用户界面处呈现差异的多种方式。
呈现例如可以包括:呈现基于一个或多个第一属性的第一代码覆盖范围相对于基于一个或多个第二属性的第二代码覆盖范围的图形视图(例如,如图3A和图3B中所示),呈现基于一个或多个第一属性所采取的第一代码路径相对于基于一个或多个第二属性所采取的第二代码路径的图形视图(例如,作为树形图或图形图的一部分),指示第二调用采取了与第一调用不同的分支,在第二调用采取的一个或多个分支处自动中断,隐藏第二调用采取的一个或多个分支,指示多个条件中的哪一个导致了第二调用采取替代执行路径等。
因此,本文中的实施例通过利用重新编码的跟踪文件数据和机器学习来标识和在用户界面处呈现可执行实体的不同调用之间的运行时差异,从而扩展了时间行程调试器的实用性。实施例可以可视地呈现实体的不同调用之间的差异,包括例如哪些运行时差异有助于以不同方式执行的实体,由不同调用执行的代码的覆盖范围,由不同调用采取的代码路径,什么条件有助于采取不同分支的调用,等等。
尽管已经用特定于结构特征和/或方法动作的语言描述了主题,但应当理解,所附权利要求书中定义的主题不必受限于上述特征或动作,或者上述动作的顺序。而是,所描述的特征和动作作为实现权利要求的示例形式而被公开。
在不脱离本发明的精神或基本特性的情况下,本发明可以以其他特定形式来体现。所描述的实施例在所有方面仅应被认为是说明性的而非限制性的。因此,本发明的范围由所附权利要求书而不是前面的描述来指示。落入权利要求等同含义和范围内的所有改变均应被包含在其范围内。
Claims (18)
1. 一种计算机系统,包括:
一个或多个处理器;和
在其上存储有计算机可执行指令的一个或多个计算机可读介质,所述计算机可执行指令由所述一个或多个处理器可执行以使所述计算机系统标识和呈现可重放跟踪中所记录的代码实体调用之间的一个或多个差异,所述计算机可执行指令包括可执行以使所述计算机系统至少执行以下操作的指令:
在对应用代码的先前执行的可重放跟踪内标识要对其执行差异分析的代码实体;
使用所述可重放跟踪,重放对所述代码实体的多个先前调用以标识所述代码实体的多个调用族,每个族基于多个属性被定义,所述多个属性标识在对所述代码实体的所述多个先前调用的所述重放的期间被观察到的、所述代码实体的至少一类运行时行为;
标识第一族的一个或多个第一属性和第二族的一个或多个第二属性,所述一个或多个第一属性实质上有助于将所述代码实体的第一类调用分类在所述第一族内,所述一个或多个第二属性实质上有助于将所述代码实体的第二类调用分类在所述第二族内;以及
基于所述一个或多个第一属性与所述一个或多个第二属性之间的差异,来发起对所述代码实体的至少两个调用之间的差异的呈现,包括:
在由调试器对所述代码实体的第一调用的重放的期间,在所述代码实体中的以下点处自动停止重放:与对所述代码实体的第二调用偏离的对所述代码实体的所述第一调用时的点;以及
指令所述调试器指示:第一代码路径接下来被所述第一调用采取,以及第二代码路径接下来被所述第二调用采取。
2.根据权利要求1所述的计算机系统,其中所述一个或多个第一属性最大程度上有助于将所述代码实体的所述第一类调用分类在所述第一族内,所述一个或多个第二属性最大程度上上有助于将所述代码实体的第二类调用分类在所述第二族内图。
3.根据权利要求1所述的计算机系统,其中基于所述一个或多个第一属性与所述一个或多个第二属性之间的差异来对所述代码实体的至少两个调用之间的差异的所述呈现包括:
呈现基于所述一个或多个第一属性的第一代码覆盖范围相对于基于所述一个或多个第二属性的第二代码覆盖范围的图形视图。
4.根据权利要求1所述的计算机系统,其中基于所述一个或多个第一属性与所述一个或多个第二属性之间的差异来对所述代码实体的至少两个调用之间的差异的所述呈现包括:
呈现基于所述一个或多个第一属性所采取的第一代码路径相对于基于所述一个或多个第二属性所采取的第二代码路径的图形视图。
5.根据权利要求1所述的计算机系统,其中基于所述一个或多个第一属性与所述一个或多个第二属性之间的差异来对所述代码实体的至少两个调用之间的差异的所述呈现包括:
当在用户界面处逐步通过所述实体的第一调用时遇到分支时,指示第二调用采取与所述第一调用不同的分支。
6.根据权利要求1所述的计算机系统,其中基于所述一个或多个第一属性与所述一个或多个第二属性之间的差异来对所述代码实体的至少两个调用之间的差异的所述呈现包括:
在用户界面处逐步通过所述实体的第一调用的同时,隐藏第二调用所采取的一个或多个分支。
7.根据权利要求1所述的计算机系统,其中基于所述一个或多个第一属性与所述一个或多个第二属性之间的差异来对所述代码实体的至少两个调用之间的差异的所述呈现包括:
在用户界面处逐步通过所述实体的第一调用的同时,指示多个条件中的哪一个导致第二调用采取替代执行路径。
8.根据权利要求1所述的计算机系统,其中针对至少一个族的所述多个属性包括以下中的一项或多项:执行的基本块,执行的基本块序列,遇到的异常,或执行的基本块计数。
9.根据权利要求1所述的计算机系统,其中对所述代码实体的至少两个调用之间差异的所述呈现包括:呈现所述代码实体的至少一个调用与所述代码实体的调用族之间的差异。
10.一种在计算机系统处实现的用于标识和呈现可重放跟踪中所记录的代码实体调用之间的一个或多个差异的方法,所述计算机系统包括一个或多个处理器,所述方法包括:
在对应用代码的先前执行的可重放跟踪内标识所述应用代码内的、要对其执行差异分析的代码实体;使用所述可重放跟踪,重放对所述代码实体的多个先前调用以标识所述代码实体的多个调用族,每个族基于多个属性被定义,所述多个属性标识在对所述代码实体的所述多个先前调用的所述重放的期间被观察到的、所述代码实体的至少一类运行时行为;
标识第一族的一个或多个第一属性和第二族的一个或多个第二属性,所述一个或多个第一属性实质上有助于将所述代码实体的第一类调用分类在所述第一族内,所述一个或多个第二属性实质上有助于将所述代码实体的第二类调用分类在所述第二族内;以及
基于所述一个或多个第一属性与所述一个或多个第二属性之间的差异,来发起对所述代码实体的至少两个调用之间的差异的呈现,包括:
在由调试器对所述代码实体的第一调用的重放的期间,在所述代码实体中的以下点处自动停止重放:与对所述代码实体的第二调用偏离的对所述代码实体的所述第一调用时的点;以及
指令所述调试器指示:第一代码路径接下来被所述第一调用采取,以及第二代码路径接下来被所述第二调用采取。
11.根据权利要求10所述的方法,其中所述一个或多个第一属性最大程度上有助于将所述代码实体的所述第一类调用分类在所述第一族内,所述一个或多个第二属性最大程度上上有助于将所述代码实体的第二类调用分类在所述第二族内。
12.根据权利要求10所述的方法,基于所述一个或多个第一属性与所述一个或多个第二属性之间的差异来对所述代码实体的至少两个调用之间的差异的所述呈现包括:
呈现基于所述一个或多个第一属性的第一代码覆盖范围相对于基于所述一个或多个第二属性的第二代码覆盖范围的图形视图。
13.根据权利要求10所述的方法,其中基于所述一个或多个第一属性与所述一个或多个第二属性之间的差异来对所述代码实体的至少两个调用之间的差异的所述呈现包括:
呈现基于所述一个或多个第一属性所采取的第一代码路径相对于基于所述一个或多个第二属性所采取的第二代码路径的图形视图。
14.根据权利要求10所述的方法,其中基于所述一个或多个第一属性与所述一个或多个第二属性之间的差异来对所述代码实体的至少两个调用之间的差异的所述呈现包括:
当在用户界面处逐步通过所述实体的第一调用时遇到分支时,指示第二调用采取与所述第一调用不同的分支。
15.根据权利要求10所述的方法,其中基于所述一个或多个第一属性与所述一个或多个第二属性之间的差异来呈现所述代码实体的至少两个调用之间的差异包括:
在用户界面处逐步通过所述实体的第一调用的同时,隐藏第二调用所采取的一个或多个分支。
16.根据权利要求10所述的方法,其中基于所述一个或多个第一属性与所述一个或多个第二属性之间的差异来对所述代码实体的至少两个调用之间的差异的所述呈现包括:
在用户界面处逐步通过所述实体的第一调用的同时,指示多个条件中的哪一个导致第二调用采取替代执行路径。
17.根据权利要求10所述的方法,其中针对至少一个族的所述多个属性包括以下中的一项或多项:执行的基本块,执行的基本块序列,遇到的异常,或执行的基本块计数。
18.一种计算机可读存储介质,包括其上存储有计算机可执行指令的一个或多个硬件存储设备,所述计算机可执行指令由一个或多个处理器可执行以使计算机系统标识和呈现可重放跟踪中所记录的代码实体调用之间的一个或多个差异,所述计算机可执行指令包括可执行以使所述计算机系统至少执行以下操作的指令:
在对应用代码的先前执行的可重放跟踪内标识所述应用代码内的、要对其执行差异分析的代码实体;
使用所述可重放跟踪,重放对所述代码实体的多个先前调用以标识所述代码实体的多个调用族,每个族基于多个属性被定义,所述多个属性标识在对所述代码实体的所述多个先前调用的所述重放的期间被观察到的、所述代码实体的至少一类运行时行为;
标识第一族的一个或多个第一属性和第二族的一个或多个第二属性,所述一个或多个第一属性实质上有助于将所述代码实体的第一类调用分类在所述第一族内,所述一个或多个第二属性实质上有助于将所述代码实体的第二类调用分类在所述第二族内以及
基于所述一个或多个第一属性与所述一个或多个第二属性之间的差异,来发起对所述代码实体的至少两个调用之间的差异的呈现,包括:
在由调试器对所述代码实体的第一调用的重放的期间,在所述代码实体中的以下点处自动停止重放:与对所述代码实体的第二调用偏离的对所述代码实体的所述第一调用时的点;以及
指令所述调试器指示:第一代码路径接下来被所述第一调用采取,以及第二代码路径接下来被所述第二调用采取。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311247259.1A CN117149658A (zh) | 2017-06-14 | 2018-05-21 | 呈现代码实体调用之间的差异 |
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US15/622,841 US10282274B2 (en) | 2017-06-14 | 2017-06-14 | Presenting differences between code entity invocations |
US15/622,841 | 2017-06-14 | ||
PCT/US2018/033574 WO2018231428A1 (en) | 2017-06-14 | 2018-05-21 | Presenting differences between code entity invocations |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311247259.1A Division CN117149658A (zh) | 2017-06-14 | 2018-05-21 | 呈现代码实体调用之间的差异 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110741354A CN110741354A (zh) | 2020-01-31 |
CN110741354B true CN110741354B (zh) | 2023-09-26 |
Family
ID=62620970
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201880039816.1A Active CN110741354B (zh) | 2017-06-14 | 2018-05-21 | 呈现代码实体调用之间的差异 |
CN202311247259.1A Pending CN117149658A (zh) | 2017-06-14 | 2018-05-21 | 呈现代码实体调用之间的差异 |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311247259.1A Pending CN117149658A (zh) | 2017-06-14 | 2018-05-21 | 呈现代码实体调用之间的差异 |
Country Status (4)
Country | Link |
---|---|
US (2) | US10282274B2 (zh) |
EP (1) | EP3622404B1 (zh) |
CN (2) | CN110741354B (zh) |
WO (1) | WO2018231428A1 (zh) |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10705950B2 (en) * | 2017-01-30 | 2020-07-07 | Retest Gmbh | Method and system for semi-automatic testing of program code for graphical user interfaces |
US10452516B2 (en) * | 2017-07-10 | 2019-10-22 | Microsoft Technology Licensing, Llc | Replaying time-travel traces relying on processor undefined behavior |
US10459695B2 (en) * | 2017-10-05 | 2019-10-29 | Sap Se | Correction of code errors using machine learning |
US10783055B2 (en) | 2018-01-08 | 2020-09-22 | Ozcode Ltd. | Time travel source code debugger incorporating live coding ability |
US11263116B2 (en) | 2019-01-24 | 2022-03-01 | International Business Machines Corporation | Champion test case generation |
US10922210B2 (en) * | 2019-02-25 | 2021-02-16 | Microsoft Technology Licensing, Llc | Automatic software behavior identification using execution record |
US11232020B2 (en) * | 2019-06-13 | 2022-01-25 | International Business Machines Corporation | Fault detection using breakpoint value-based fingerprints of failing regression test cases |
US11422924B2 (en) | 2019-06-13 | 2022-08-23 | International Business Machines Corporation | Customizable test set selection using code flow trees |
US11966721B2 (en) | 2022-07-12 | 2024-04-23 | Bank Of America Corporation | Extended reality platform and machine learning engine for automated code error resolution |
CN117573565B (zh) * | 2024-01-16 | 2024-06-07 | 麒麟软件有限公司 | 调试历史信息复现方法、装置及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8032866B1 (en) * | 2003-03-27 | 2011-10-04 | Identify Software Ltd. | System and method for troubleshooting runtime software problems using application learning |
CN102339253A (zh) * | 2010-07-20 | 2012-02-01 | 通用电气公司 | 用于指示应用代码的执行的系统和方法 |
CN105830025A (zh) * | 2013-12-20 | 2016-08-03 | 微软技术许可有限责任公司 | 动态类型化的编程语言中的属性访问 |
Family Cites Families (127)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5615331A (en) * | 1994-06-23 | 1997-03-25 | Phoenix Technologies Ltd. | System and method for debugging a computing system |
EP0690378A1 (en) * | 1994-06-30 | 1996-01-03 | Tandem Computers Incorporated | Tool and method for diagnosing and correcting errors in a computer programm |
US6026362A (en) * | 1995-09-11 | 2000-02-15 | Compaq Computer Corporation | Tool and method for diagnosing and correcting errors in a computer program |
US6016474A (en) * | 1995-09-11 | 2000-01-18 | Compaq Computer Corporation | Tool and method for diagnosing and correcting errors in a computer program |
US6029002A (en) * | 1995-10-31 | 2000-02-22 | Peritus Software Services, Inc. | Method and apparatus for analyzing computer code using weakest precondition |
US5870607A (en) * | 1996-09-11 | 1999-02-09 | Brown University Research Foundation | Method and apparatus for selective replay of computer programs |
US6145121A (en) | 1997-04-17 | 2000-11-07 | University Of Washington | Trace based method for the analysis, benchmarking and tuning of object oriented databases and applications |
US6018786A (en) | 1997-10-23 | 2000-01-25 | Intel Corporation | Trace based instruction caching |
IL126373A (en) | 1998-09-27 | 2003-06-24 | Haim Zvi Melman | Apparatus and method for search and retrieval of documents |
US6874105B2 (en) * | 1998-10-30 | 2005-03-29 | International Business Machines Corporation | Operation graph based event monitoring system |
US6230313B1 (en) * | 1998-12-23 | 2001-05-08 | Cray Inc. | Parallelism performance analysis based on execution trace information |
US6959431B1 (en) * | 1999-05-13 | 2005-10-25 | Compuware Corporation | System and method to measure and report on effectiveness of software program testing |
US6895577B1 (en) * | 1999-05-13 | 2005-05-17 | Compuware Corporation | Risk metric for testing software |
US6854108B1 (en) * | 2000-05-11 | 2005-02-08 | International Business Machines Corporation | Method and apparatus for deterministic replay of java multithreaded programs on multiprocessors |
US20030121027A1 (en) * | 2000-06-23 | 2003-06-26 | Hines Kenneth J. | Behavioral abstractions for debugging coordination-centric software designs |
US7757065B1 (en) | 2000-11-09 | 2010-07-13 | Intel Corporation | Instruction segment recording scheme |
US6457023B1 (en) | 2000-12-28 | 2002-09-24 | International Business Machines Corporation | Estimation of object lifetime using static analysis |
US6795836B2 (en) | 2000-12-29 | 2004-09-21 | International Business Machines Corporation | Accurately determining an object's lifetime |
US6748392B1 (en) | 2001-03-06 | 2004-06-08 | Microsoft Corporation | System and method for segmented evaluation of database queries |
US6892325B2 (en) | 2001-11-27 | 2005-05-10 | International Business Machines Corporation | Method for displaying variable values within a software debugger |
US6728738B2 (en) | 2002-04-03 | 2004-04-27 | Sun Microsystems, Inc. | Fast lifetime analysis of objects in a garbage-collected system |
US7284052B1 (en) | 2002-08-02 | 2007-10-16 | Hewlett-Packard Development Company, L.P. | Estimating utilization of computing system resources |
US6901581B1 (en) | 2002-10-02 | 2005-05-31 | Eridon Corporation | Method for software debugging via simulated re-execution of a computer program |
CA2408457A1 (en) | 2002-10-17 | 2004-04-17 | Ibm Canada Limited-Ibm Canada Limitee | Collection and detection of differences of values of expressions/variables when debugging a computer process |
US7730461B2 (en) * | 2002-12-30 | 2010-06-01 | International Business Machines Corporation | Software tool configured to generate test cases characterized by a linear range of integral values |
US7921333B2 (en) | 2003-03-19 | 2011-04-05 | Jds Uniphase Corporation | Method and systems for providing data replay, reprocess and retrigger functions in an analyzer |
US7392514B2 (en) | 2003-06-26 | 2008-06-24 | Microsoft Corporation | Data flow chasing |
US20130218315A1 (en) | 2003-09-26 | 2013-08-22 | Denny Jaeger | Method for recording and replaying operations in a computer environment using initial conditions |
GB0325560D0 (en) | 2003-10-31 | 2003-12-03 | Seebyte Ltd | Intelligent integrated diagnostics |
JP2005222422A (ja) | 2004-02-06 | 2005-08-18 | Ishihara Sangyo Kaisha Ltd | データ解析方法及びそのシステム |
US7496900B2 (en) * | 2004-02-12 | 2009-02-24 | International Business Machines Corporation | Method for automatic detection of build regressions |
US20050223361A1 (en) * | 2004-04-01 | 2005-10-06 | Belbute John L | Software testing based on changes in execution paths |
US7730460B1 (en) * | 2004-06-18 | 2010-06-01 | Apple Inc. | Code execution visualization using software fingerprinting |
EP1769345B1 (en) | 2004-07-12 | 2018-12-19 | Mentor Graphics Corporation | Software state replay |
US8132159B1 (en) | 2004-07-23 | 2012-03-06 | Green Hills Software, Inc. | Post-execution software debugger with event display |
US8015552B1 (en) | 2004-07-23 | 2011-09-06 | Green Hills Software, Inc. | Post-execution software debugger with coverage display |
US7424646B2 (en) | 2004-11-30 | 2008-09-09 | International Business Machines Corporation | Imposing a logical structure on an unstructured trace record for trace analysis |
US7849450B1 (en) | 2005-01-28 | 2010-12-07 | Intel Corporation | Devices, methods and computer program products for reverse execution of a simulation |
US7571304B2 (en) | 2005-03-18 | 2009-08-04 | Sun Microsystems, Inc. | Generation of multiple checkpoints in a processor that supports speculative execution |
US7209058B2 (en) | 2005-05-13 | 2007-04-24 | Texas Instruments Incorporated | Trace receiver data compression |
US8037285B1 (en) | 2005-09-28 | 2011-10-11 | Oracle America, Inc. | Trace unit |
US7620938B2 (en) | 2005-10-31 | 2009-11-17 | Microsoft Corporation | Compressed program recording |
US9177124B2 (en) | 2006-03-01 | 2015-11-03 | Oracle International Corporation | Flexible authentication framework |
US8707451B2 (en) | 2006-03-01 | 2014-04-22 | Oracle International Corporation | Search hit URL modification for secure application integration |
US7861226B1 (en) * | 2006-03-16 | 2010-12-28 | Avaya Inc. | Constraint solver to code based test data generation for improving software reliability and security |
US8024708B2 (en) * | 2006-06-20 | 2011-09-20 | Google Inc. | Systems and methods for debugging an application running on a parallel-processing computer system |
US8146066B2 (en) | 2006-06-20 | 2012-03-27 | Google Inc. | Systems and methods for caching compute kernels for an application running on a parallel-processing computer system |
US8375368B2 (en) | 2006-06-20 | 2013-02-12 | Google Inc. | Systems and methods for profiling an application running on a parallel-processing computer system |
US8108844B2 (en) | 2006-06-20 | 2012-01-31 | Google Inc. | Systems and methods for dynamically choosing a processing element for a compute kernel |
US7814486B2 (en) | 2006-06-20 | 2010-10-12 | Google Inc. | Multi-thread runtime system |
US8136104B2 (en) | 2006-06-20 | 2012-03-13 | Google Inc. | Systems and methods for determining compute kernels for an application in a parallel-processing computer system |
EP2052324A2 (en) * | 2006-08-11 | 2009-04-29 | Nxp B.V. | Methods and products for determining and visualizin ic behaviour |
GB2443277B (en) * | 2006-10-24 | 2011-05-18 | Advanced Risc Mach Ltd | Performing diagnostics operations upon an asymmetric multiprocessor apparatus |
US7840849B2 (en) | 2006-12-21 | 2010-11-23 | Novell, Inc. | Methods and apparatus for debugging software including divisions of an execution history of a debuggee program |
US8214807B2 (en) * | 2007-01-10 | 2012-07-03 | International Business Machines Corporation | Code path tracking |
US8219980B2 (en) * | 2007-01-10 | 2012-07-10 | International Business Machines Corporation | Identifying a potential breakpoint location in a code path in a computer program based upon the frequency of execution of the code path as identified in collected profile data |
US7810079B2 (en) * | 2007-01-23 | 2010-10-05 | Sas Institute Inc. | System and method for determining execution path difference in program |
TWI384397B (zh) | 2007-04-18 | 2013-02-01 | Mediatek Inc | 資料位址追蹤方法及資料位址追蹤裝置、資料追蹤方法及資料追蹤裝置 |
US9785549B2 (en) | 2007-04-27 | 2017-10-10 | Microsoft Technology Licensing, Llc | Managing object lifetime for native/managed peers |
US8161460B2 (en) * | 2007-05-30 | 2012-04-17 | Sap Ag | System and method of automatic interoperability checking for BPEL |
EP2009572B1 (en) | 2007-06-29 | 2010-01-27 | Telefonaktiebolaget LM Ericsson (publ) | Obfuscating execution traces of computer program code |
US20090199163A1 (en) | 2008-01-31 | 2009-08-06 | International Business Machines Corporation | Debugger assistance for locating values at runtime |
US7530056B1 (en) * | 2008-03-31 | 2009-05-05 | International Business Machines Corporation | Method and system for detecting runtime defects in a program by comparing correct and incorrect runs |
US8612944B2 (en) * | 2008-04-17 | 2013-12-17 | Qualcomm Incorporated | Code evaluation for in-order processing |
US7987215B2 (en) | 2008-04-22 | 2011-07-26 | Microsoft Corporation | Efficiently marking objects with large reference sets |
US8352240B2 (en) | 2008-06-20 | 2013-01-08 | Vmware, Inc. | Decoupling dynamic program analysis from execution across heterogeneous systems |
US8521765B2 (en) | 2008-07-23 | 2013-08-27 | Wind River Systems, Inc. | Method and system for post processing trace data |
JP4555879B2 (ja) | 2008-08-11 | 2010-10-06 | 株式会社日立製作所 | メモリ管理方法、メモリ管理プログラム、および、メモリ管理装置 |
US7681182B1 (en) | 2008-11-06 | 2010-03-16 | International Business Machines Corporation | Including function call graphs (FCG) generated from trace analysis data within a searchable problem determination knowledge base |
KR20100084036A (ko) | 2009-01-15 | 2010-07-23 | 삼성전자주식회사 | 소프트웨어의 에러 검출 장치 및 방법 |
US20100299654A1 (en) | 2009-05-21 | 2010-11-25 | Microsoft Corporation | Approach for root causing regression bugs |
US8423965B2 (en) | 2009-06-23 | 2013-04-16 | Microsoft Corporation | Tracing of data flow |
US9020939B2 (en) | 2009-06-30 | 2015-04-28 | International Business Machines Corporation | Correlating queries issued by applications with their source lines and analyzing applications for problem determination and where used analysis |
US8656222B2 (en) * | 2009-07-30 | 2014-02-18 | Vmware, Inc. | Method and system for recording a selected computer process for subsequent replay |
JP5050019B2 (ja) * | 2009-08-26 | 2012-10-17 | 株式会社東芝 | ソースコード解析システム |
US9189254B2 (en) * | 2009-10-02 | 2015-11-17 | Massachusetts Institute Of Technology | Translating text to, merging, and optimizing graphical user interface tasks |
US8645917B2 (en) | 2009-10-14 | 2014-02-04 | International Business Machines Corporation | Providing support for debugging heap related errors with heap assertions |
EP2348418A1 (en) | 2009-12-18 | 2011-07-27 | Siemens Aktiengesellschaft | Multi trace parser |
US8769499B2 (en) | 2010-01-06 | 2014-07-01 | Nec Laboratories America, Inc. | Universal causality graphs for bug detection in concurrent programs |
US8910120B2 (en) | 2010-03-05 | 2014-12-09 | Microsoft Corporation | Software debugging recommendations |
US8166348B1 (en) | 2010-03-29 | 2012-04-24 | Emc Corporation | Method of debugging a software system |
US8522176B2 (en) | 2010-05-11 | 2013-08-27 | Synopsys, Inc. | Method of recording and replaying call frames for the testbench |
GB2481384B (en) | 2010-06-21 | 2018-10-10 | Advanced Risc Mach Ltd | Key allocation when tracing data processing systems |
US8578340B1 (en) | 2010-09-24 | 2013-11-05 | Ca, Inc. | Recording and replaying computer program execution with recorded execution event breakpoints |
US8763001B2 (en) | 2010-10-29 | 2014-06-24 | Fujitsu Limited | Technique for efficient parallelization of software analysis in a distributed computing environment through intelligent dynamic load balancing |
KR101738640B1 (ko) | 2011-01-18 | 2017-05-24 | 삼성전자주식회사 | 트레이스 데이터 압축 장치 및 방법 |
US8863089B2 (en) * | 2011-02-25 | 2014-10-14 | Nintendo Co., Ltd. | Method and apparatus for visualizing computer program execution |
US8364691B2 (en) | 2011-03-25 | 2013-01-29 | International Business Machines Corporation | Dynamic query-based debug point mapper |
US8438427B2 (en) * | 2011-04-08 | 2013-05-07 | Ca, Inc. | Visualizing relationships between a transaction trace graph and a map of logical subsystems |
US8516301B2 (en) * | 2011-04-08 | 2013-08-20 | Ca, Inc. | Visualizing transaction traces as flows through a map of logical subsystems |
US20120324236A1 (en) | 2011-06-16 | 2012-12-20 | Microsoft Corporation | Trusted Snapshot Generation |
US9645913B2 (en) | 2011-08-03 | 2017-05-09 | Daniel Geist | Method and apparatus for debugging programs |
US9053017B2 (en) | 2011-09-09 | 2015-06-09 | Microsoft Technology Licensing, Llc | Managing object lifetime in a cyclic graph |
US8745591B2 (en) | 2011-10-19 | 2014-06-03 | Microsoft Corporation | Data flow visualization and debugging |
US8997057B1 (en) | 2011-11-04 | 2015-03-31 | Google Inc. | Using trace matching to identify and analyze application traces |
US20130179867A1 (en) * | 2012-01-11 | 2013-07-11 | International Business Machines Corporation | Program Code Analysis System |
US8898643B2 (en) * | 2012-06-19 | 2014-11-25 | Sap Se | Application trace replay and simulation systems and methods |
CN104487935B (zh) | 2012-07-27 | 2018-04-24 | 慧与发展有限责任合伙企业 | 记录外部过程 |
US9262282B2 (en) * | 2012-09-04 | 2016-02-16 | Opshub, Inc. | System and method for synchornisation of data and recovery of failures during synchronization between two systems |
US8812434B2 (en) | 2012-10-12 | 2014-08-19 | Ca, Inc. | Data structure for efficiently identifying transactions |
US8935673B1 (en) | 2012-11-30 | 2015-01-13 | Cadence Design Systems, Inc. | System and method for debugging computer program based on execution history |
US9129058B2 (en) | 2013-02-19 | 2015-09-08 | Microsoft Technology Licensing, Llc | Application monitoring through continuous record and replay |
US9501383B2 (en) | 2013-02-26 | 2016-11-22 | Dominique Bolignano | Method for securing a program |
US9552195B2 (en) * | 2013-03-08 | 2017-01-24 | Facebook, Inc. | Enlarging control regions to optimize script code compilation |
US9311221B2 (en) | 2013-03-15 | 2016-04-12 | Ab Initio Technology Llc | Recording program execution |
US9477576B2 (en) | 2013-04-11 | 2016-10-25 | International Business Machines Corporation | Using application state data and additional code to resolve deadlocks |
US9292419B1 (en) * | 2013-06-04 | 2016-03-22 | The Mathworks, Inc. | Code coverage and confidence determination |
JP2015043198A (ja) | 2013-07-22 | 2015-03-05 | 株式会社東芝 | 解析システム、解析方法および解析プログラム |
US10326674B2 (en) | 2013-08-27 | 2019-06-18 | Purdue Research Foundation | Compressing trace data |
US10289411B2 (en) | 2013-11-18 | 2019-05-14 | Microsoft Technology Licensing, Llc | Diagnosing production applications |
GB201322057D0 (en) | 2013-12-13 | 2014-01-29 | Qatar Foundation | Descriptive and prescriptive data cleaning |
US9251045B2 (en) * | 2013-12-27 | 2016-02-02 | International Business Machines Corporation | Control flow error localization |
US8751466B1 (en) | 2014-01-12 | 2014-06-10 | Machine Intelligence Services, Inc. | Customizable answer engine implemented by user-defined plug-ins |
US20150234730A1 (en) * | 2014-02-18 | 2015-08-20 | Zerodee, Inc. | Systems and methods for performing software debugging |
US9483387B1 (en) * | 2014-03-17 | 2016-11-01 | Amazon Technologies, Inc. | Tree comparison functionality for services |
US9442614B2 (en) | 2014-05-15 | 2016-09-13 | Bebop Sensors, Inc. | Two-dimensional sensor arrays |
US9507696B2 (en) * | 2014-05-28 | 2016-11-29 | Vmware, Inc. | Identifying test gaps using code execution paths |
US9875173B2 (en) | 2014-06-30 | 2018-01-23 | Microsoft Technology Licensing, Llc | Time travel debugging in managed runtime |
US20160019133A1 (en) * | 2014-07-15 | 2016-01-21 | 4D Soft Kft. | Method for tracing a computer software |
US9703675B2 (en) | 2014-08-11 | 2017-07-11 | Microsoft Technology Licensing, Llc | Structured logging and instrumentation framework |
US9588870B2 (en) | 2015-04-06 | 2017-03-07 | Microsoft Technology Licensing, Llc | Time travel debugging for browser components |
US9632914B2 (en) | 2015-05-21 | 2017-04-25 | International Business Machines Corporation | Error diagnostic in a production environment |
US9852045B2 (en) * | 2015-10-13 | 2017-12-26 | International Business Machines Corporation | Debugging program code |
US9886366B2 (en) * | 2016-03-25 | 2018-02-06 | Microsoft Technology Licensing, Llc | Replay-suitable trace recording by service container |
US10089215B2 (en) * | 2016-09-23 | 2018-10-02 | International Business Machines Corporation | Visualization of security warning solution points |
US9983978B1 (en) | 2017-03-08 | 2018-05-29 | Microsoft Technology Licensing, Llc | Querying an indexed time-travel trace |
US9940369B1 (en) | 2017-03-08 | 2018-04-10 | Microsoft Technology Licensing, Llc | Searching an indexed time-travel trace |
-
2017
- 2017-06-14 US US15/622,841 patent/US10282274B2/en active Active
-
2018
- 2018-05-21 CN CN201880039816.1A patent/CN110741354B/zh active Active
- 2018-05-21 EP EP18731597.3A patent/EP3622404B1/en active Active
- 2018-05-21 CN CN202311247259.1A patent/CN117149658A/zh active Pending
- 2018-05-21 WO PCT/US2018/033574 patent/WO2018231428A1/en unknown
-
2019
- 2019-04-03 US US16/374,140 patent/US10802946B2/en active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8032866B1 (en) * | 2003-03-27 | 2011-10-04 | Identify Software Ltd. | System and method for troubleshooting runtime software problems using application learning |
CN102339253A (zh) * | 2010-07-20 | 2012-02-01 | 通用电气公司 | 用于指示应用代码的执行的系统和方法 |
CN105830025A (zh) * | 2013-12-20 | 2016-08-03 | 微软技术许可有限责任公司 | 动态类型化的编程语言中的属性访问 |
Non-Patent Citations (2)
Title |
---|
Herbert Prähofer.Reverse Engineering and Visualization of the Reactive Behavior of PLC Applications.2013 11th IEEE International Conference On Industrial Informatics .2013,第564-571页. * |
Wim De Pauw,.Execution Patterns for Visualizing Web Services.Software Visualization.2006,第39-45页. * |
Also Published As
Publication number | Publication date |
---|---|
US10282274B2 (en) | 2019-05-07 |
US20190227900A1 (en) | 2019-07-25 |
CN117149658A (zh) | 2023-12-01 |
US20180365125A1 (en) | 2018-12-20 |
EP3622404B1 (en) | 2022-02-23 |
EP3622404A1 (en) | 2020-03-18 |
CN110741354A (zh) | 2020-01-31 |
WO2018231428A1 (en) | 2018-12-20 |
US10802946B2 (en) | 2020-10-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110741354B (zh) | 呈现代码实体调用之间的差异 | |
US11494287B2 (en) | Scalable execution tracing for large program codebases | |
EP3785127B1 (en) | Selectively tracing portions of computer process execution | |
US10346292B2 (en) | Software component recommendation based on multiple trace runs | |
US10541042B2 (en) | Level-crossing memory trace inspection queries | |
Dean et al. | Perfcompass: Online performance anomaly fault localization and inference in infrastructure-as-a-service clouds | |
EP3785125B1 (en) | Selectively tracing portions of computer process execution | |
US10565089B2 (en) | Identification of code features potentially associated with code behavior | |
US9715440B2 (en) | Test scope determination based on code change(s) | |
WO2018164975A1 (en) | Indexing a trace by insertion of reverse lookup data structures | |
US11481311B2 (en) | Automatic evaluation of test code quality | |
US10241785B2 (en) | Determination of production vs. development uses from tracer data | |
US20140310688A1 (en) | Using stack data and source code to rank program changes | |
CN110431536B (zh) | 实现整个数据结构上的断点 | |
US10877873B2 (en) | Using historic execution data to visualize tracepoints | |
US20220335135A1 (en) | Vulnerability analysis and reporting for embedded systems | |
US9779132B1 (en) | Predictive information discovery engine | |
Gedik et al. | Debugging tools and strategies for distributed stream processing applications | |
Basu et al. | IDLI: An Interactive Message Debugger for Parallel Programs Using LAM-MPI. | |
Vostokov | Python Debugging for AI, Machine Learning, and Cloud Computing |
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 |