CN107025167B - 在处理器追踪日志中使用编译器类型信息进行数据流分析的方法和设备 - Google Patents
在处理器追踪日志中使用编译器类型信息进行数据流分析的方法和设备 Download PDFInfo
- Publication number
- CN107025167B CN107025167B CN201611022239.4A CN201611022239A CN107025167B CN 107025167 B CN107025167 B CN 107025167B CN 201611022239 A CN201611022239 A CN 201611022239A CN 107025167 B CN107025167 B CN 107025167B
- Authority
- CN
- China
- Prior art keywords
- software program
- memory
- data type
- store instruction
- instructions
- 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
- G06F11/3644—Software debugging by instrumenting at runtime
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
- G06F11/3466—Performance evaluation by tracing or monitoring
-
- 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/3624—Software debugging by performing operations on the source code, e.g. via a compiler
-
- 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/366—Software debugging using diagnostics
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2201/00—Indexing scheme relating to error detection, to error correction, and to monitoring
- G06F2201/865—Monitoring of software
Abstract
程序控制流追踪从处理器追踪模块获得,其可以是基于硬件的,并与调试信息以及来自基本块分解的信息组合使用,以识别产生存储器损坏的候选存储指令(一个或多个)。到软件程序的链接和候选存储指令(一个或多个)可用于进一步调试存储器损坏和/或插装软件程序以识别在将来执行编译的软件程序时产生存储器损坏的基本块(一个或多个)和/或跟踪软件程序的调试。
Description
技术领域
本公开内容涉及计算机领域,并且具体地涉及在处理器追踪日志中使用编译器类型信息进行数据流分析的方法和设备。
背景技术
当存储器位置的内容由于编程错误而非故意修改时,在计算机程序中可发生存储器损坏(corruption)。当后来在该程序中使用损坏的存储器内容时,它或者导致程序崩溃或者导致意外的并且一般不想要的程序行为。
存储器损坏可能难以修正,至少有两个原因:1)存储器损坏源及其表现可能是远离的,使其难以将原因和结果相关。2)此类错误可能仅发生在不常见条件下,使其难以一致地再现该错误。
当调试存储器损坏时,普通调试方法是使用数据地址追踪来发现写入到损坏存储器位置的先前代码位置。然而,在性能开销方面,数据地址追踪是代价高的。相比之下,处理器追踪提供了用于调试的逻辑CPU线程的相对紧致(compact)的运行时间程序控制流追踪,但未提供数据地址追踪。
对“发现对损坏的位置的最后存储”问题的现有硬件调试解决方案至少需要地址追踪或全数据追踪或者甚至硬件上的重放支持。然而,数据地址追踪在快速无序核上用硬件实现是代价高的;它也具有由于记录追踪信息所需的带宽引起的高开销。程序切片技术可识别损坏的存储,但通常需要插装的(instrumented)代码并访问编译器中的全程序流程图。琐细程序中的存储器损坏可通过程序切片解决,但对于更复杂的程序不是这种情况。
发明内容
按照本发明第一方面的一种用于计算的设备,所述计算包含调试软件程序,所述设备包括:存储器分析模块,其要由计算机处理器操作以:获得用于编译的软件程序的调试信息,所述编译的软件程序是从用于所述软件程序的源代码或字节码编译的;接收所述编译的软件程序中的存储器损坏的标识;获得具有所述编译的软件程序的基本块列表的运行时间程序控制流追踪;分解或引起分解所述基本块列表以识别一组存储指令;在所述调试信息中识别所述组存储指令中的存储指令的和所述存储器损坏的数据类型或数据类型结构;基于是否每个存储指令是否具有所述存储器损坏的所述数据类型或数据类型结构并已经写入与所述存储器损坏相关联的内存位置确定一组存储指令中的每个存储指令是否为候选存储指令,并且获得并输出将所述候选存储指令映射到所述软件程序的所述源代码或字节码的部分的至少一个链接;其中,基本块列表中的每个基本块包括一个软件指令,除了进入该软件指令之外,该软件指令没有分支,除了在该软件指令的出口处,还没有分支,并且每个基本块是一个 运行时程序控制流跟踪中的节点。
按照本发明第二方面的一种用于调试软件程序的方法,包括:在包括处理器和存储器的计算装置中,获得用于编译的软件程序的调试信息,所述编译的软件程序是从用于所述软件程序的源代码或字节码编译的;接收所述编译的软件程序中的存储器损坏的标识;获得具有所述编译的软件程序的基本块列表的运行时间程序控制流追踪;分解或引起分解所述基本块列表以识别一组存储指令;在所述调试信息中识别所述组存储指令中的存储指令的和所述存储器损坏的数据类型或数据类型结构;基于每个存储指令是否具有所述存储器损坏的所述数据类型或数据类型结构并是否已经写入与所述存储器损坏相关联的存储器位置来确定所述组存储指令中的每个存储指令是否为候选存储指令,并且获得并输出将每个候选存储指令映射到所述软件程序的所述源代码或字节代码的部分的至少一个链接;其中所述基本块列表中的每个基本块包括软件指令,其没有分支入,不同于进入所述软件指令,并且没有分支出,不同于退出所述软件指令,并且每个基本块是所述运行时间程序控制流追踪中的节点。
按照本发明第三方面的一种用于计算的设备,所述计算包含调试软件程序,所述设备包括:用于获得用于编译的软件程序的调试信息的部件,所述编译的软件程序是从用于所述软件程序的源代码或字节代码编译的;用于接收所述编译的软件程序中的存储器损坏的标识的部件;用于获得具有所述编译的软件程序的基本块列表的运行时间程序控制流追踪的部件;用于分解的部件或用于引起分解所述基本块列表以识别一组存储指令的部件;用于在所述调试信息中识别所述组存储指令中的存储指令的和所述存储器损坏的数据类型或数据类型结构的部件;用于基于每个存储指令是否具有所述存储器损坏的所述数据类型或数据类型结构并是否已经写入与所述存储器损坏相关联的存储器位置来确定所述组存储指令中的每个存储指令是否为候选存储指令,以及用于获得并输出将每个候选存储指令映射到所述软件程序的所述源代码或字节代码的部分的至少一个链接的部件;其中所述基本块列表中的每个基本块包括软件指令,其没有分支入,不同于进入所述软件指令,并且没有分支出,不同于退出所述软件指令,并且每个基本块是所述运行时间程序控制流追踪中的节点。
附图说明
为了易于识别任何具体元件或动作的论述,附图标记中最高有效数位或多个数位是指第一次引入该元件的图号。
图1图示了服务器200和客户端装置104连接到网络102的简化系统100。
图2图示了按照一个实施例的服务器200。
图3是调试服务器数据存储的实施例的功能框图。
图4是图示存储器分析模块的示例实施例的流程图。
图5是图示插装模块的示例实施例的流程图。
具体实施方式
图1图示了使用调试服务器200调试软件程序中的存储器损坏的系统100。
在概览中,调试服务器200(关于图2进一步图示和论述的)包括处理器追踪模块224,所述处理器追踪模块224包括硬件单元,其提供程序控制流追踪信息,包含运行时间程序控制流追踪。处理器追踪模块224例如可以是结合到调试服务器200中的一个或多个中央处理单元210中或与之通信的一个或多个英特尔(R)处理器追踪单元。
处理器追踪模块224记录执行流,并允许执行流在随后时间重构。处理器追踪模块224使用专用硬件设施捕获有关每个硬件线程上的软件执行的信息(假定在中央处理单元210中存在多个处理器核,或者假定单个核执行多个线程,诸如如果同时多线程(“超线程”)是活动的情况下),使得在执行完成之后可根据捕获的追踪数据重构确切的程序流程。
处理器追踪模块224捕获数据分组中的控制流追踪信息,例如包含基本块、计时和程序流信息(例如分支目标、采取/未采取的分支指示)以及程序诱发的模式相关信息(例如英特尔TSX状态转变、CR3改变)。基本块在本文被定义为软件指令,其没有分支入(branchin)(不同于进入软件指令)并且没有分支出(branch out)(不同于退出(at the exit of)软件指令)。来自处理器追踪模块224的信息可被呈现为表示基本块、分支目标和采取的分支的节点。然而,处理器追踪模块224未提供列出存储器位置地址的地址追踪信息。
来自处理器追踪模块224的分组可在被发送到并存储在存储器子系统(诸如调试服务器存储器300)中之前在内部缓冲。当存储时,这些分组在本文被统称为运行时间程序控制流追踪310记录。这些分组被称为“运行时间”,因为它们可在产生要调试的存储器损坏的编译的软件程序304的常规运行时间收集,而不是在另一时间(诸如在编译的软件程序304的专用执行期间)收集。
如上面所论述的,存储器损坏是可被调试的编程错误的形式。已经估计,操作Windows(R)操作系统的系统中的近似10%的应用崩溃是由于堆损坏引起。存储器损坏发生在存储器位置由于编程错误而非故意修改时。这甚至可发生在寻求最小化此类错误的编程语言和技术的上下文中。
调试存储器损坏的普通方式是识别写入到损坏的存储器位置的基本块,并且然后将调试努力聚焦在这些组件(component)上。地址追踪可提供有关哪些基本块写到存储器位置的信息,但地址追踪实现起来是代价高的,特别是在快速无序核上。地址追踪还需要大带宽开销来记录地址追踪信息。
来自处理器追踪模块224的运行时间程序控制流追踪310相对紧致,并且需要低带宽开销,但它未提供发现哪个(哪些)代码地址写入到存储器损坏可能需要的地址追踪信息。
为了允许在调试存储器损坏时使用运行时间程序控制流追踪310,软件程序被编译成编译的软件程序,或者在调试服务器200本地或者在独立的程序源104处。如果在调试服务器200本地编译,则软件程序可在调试服务器存储器300中被存储为软件程序302;编译的软件程序可在调试服务器存储器300中被存储为编译的软件程序304。编译可由编译器诸如例如调试服务器200中的编译器模块214执行。编译基本上可在执行之前或“正好”在执行时,与在运行时间将字节代码或程序源代码“正好”编译成本机代码时一样。
当被编译或在编译期间,调试信息可由编译器准备。调试信息例如可包括编译的软件程序304中的基本块列表、基本块的数据类型或数据类型结构以及将每个基本块的指令地址链接或映射到软件程序的一个或多个对应部分的链接(link)。调试信息可被发送到调试服务器存储器300,由其生成,或以其它方式在其中存在,其中它可被存储为调试信息306记录(一个或多个)。
如本文进一步论述的,调试信息306记录和运行时间程序控制流追踪310记录根据(在概览中)如下过程而连接:i)存储器损坏被识别;ii)使用代码分解器(disassembler)模块识别产生存储器损坏的指令的寄存器或直接指定的存储器地址 (在载荷的情况下其可以是直接指定的存储器地址、输入寄存器或间接输入寄存器,或者在存储情况下其可以是指针、输出寄存器或间接输出寄存器—在本文统称为“寄存器”。);iii)使用代码分解器模块识别加载寄存器(“存储”或“存储指令”)的基本块(一个或多个)来从存储器损坏中搜索或“往回走(walked back)”运行时间程序控制流追踪310;iv)使用调试信息306记录来识别由存储器损坏使用的数据类型或数据类型结构;以及v)这匹配到基本块列表和基本块的数据类型或数据类型结构,以开发可能已经产生了存储器损坏的基本块中的候选存储指令。候选存储指令被返回到用户(其可执行调试),和/或候选存储指令被传到插装模块,其可用于插装软件程序,使得引起存储器损坏的精确存储指令可被识别,并在将来执行已经被插装的重新编译的版本时进行调试。
完成图1的描述,在各种实施例中,网络102可包含因特网、局域网(LAN)、广域网(WAN)和/或其它数据网络。除了传统数据连网协议外,在一些实施例中,可根据包含近场通信(NFC)、蓝牙、电力线通信(PLC)等的协议和/或标准传递数据。网络102不是要求的,但可用于与其它计算装置通信。
在各种实施例中,调试服务器200、程序源104和调试客户端106可包含桌上型PC、移动电话、膝上型计算机、平板电脑、可穿戴计算机或是独立或者连网的计算机的其它计算装置。程序源104可以是软件程序、调试信息和/或编译的软件程序的源。调试客户端106可由一方使用,诸如软件程序员或调试服务提供商,其例如向调试服务器200提供软件调试服务。
在各种实施例中,可存在附加基础设施(例如短消息服务中心、小区站点、WIFI基站、路由器、网关、防火墙等)以及附加装置。另外,在一些实施例中,描述为由在图1中图示的其它装置或调试服务器200所提供的功能可经由物理和/或逻辑装置的各种组合实现。然而,在图1中不一定示出此类基础设施和实现细节,以便描述说明性实施例。
图2图示了按照一个实施例的示范调试服务器200的几个组件。在各种实施例中,调试服务器200可包含桌上型PC、服务器、工作站、移动电话、膝上型计算机、平板电脑、机顶盒、器具或能够执行诸如本文所描述的那些操作的操作的其它计算装置。在一些实施例中,调试服务器200可包含比在图2中示出的那些组件多得多的组件。然而,示出所有这些一般常规组件以便公开说明性实施例不是必须的。
如在别处所论述的,调试服务器200包括处理器追踪模块224,其可以是基于硬件的单元,其提供程序控制流追踪信息(包含运行时间程序控制流追踪)。处理器追踪模块224例如可以是结合到调试服务器200中的一个或多个中央处理单元210中或与之通信的一个或多个英特尔(R)处理器追踪单元。
在各种实施例中,调试服务器200可包括共同提供本文描述的功能性的一个或多个物理和/或逻辑装置。在一些实施例中,调试服务器200可包括一个或多个复制和/或分布式物理或逻辑装置。
在一些实施例中,调试服务器200可包括从“云计算”提供商供应的一个或多个计算资源,例如:由华盛顿西雅图的Amazon.com, Inc提供的Amazon Elastic Compute Cloud(''Amazon EC2'');由加利福尼亚Redwood市的Oracle公司提供的Oracle Cloud ComputeUtility;由华盛顿Redmont的微软公司提供的Windows Azure等。
调试服务器200包含互连包含网络接口208、显示器206、中央处理单元210和存储器204的几个组件的总线202。
存储器204一般包括随机存取存储器(RAM)和永久非暂时性大容量存储装置,诸如硬盘驱动器或固态驱动器。存储器204存储操作系统212。
可使用与非暂时性计算机可读介质216(诸如软盘、带、DVD/CD-ROM驱动器、存储卡等)关联的驱动机制(未示出)将这些和其它软件组件加载到调试服务器200的存储器204中。
存储器204还包含调试服务器存储器300。在一些实施例中,调试服务器200可经由网络接口208、存储区域网络(SAN)、高速串行总线和/或经由其它适合的通信技术与调试服务器存储器300通信。
在一些实施例中,调试服务器存储器300可包括从“云存储”提供商供应的一个或多个存储资源,例如由华盛顿西雅图的Amazon.com, Inc提供的Amazon Simple StorageService(''亚马逊S3'')、由加利福尼Mountain View的Google, Inc提供的Google CloudStorage等。
关于图3,调试服务器存储器300的所图示组件是由模块或软件例程使用的数据组,并且在本文中在其它附图的论述中进一步论述。
在图3中图示的例程所使用的数据组可由列中的单元或与在数字文档或文件中的定义的结构中的其它值分开的值表示。尽管在本文中称为单独记录或条目,但记录可包括多于一个数据库条目。数据库条目可以是、表示或编码数字、数字运算符、二进制值、逻辑值、文本、字符串运算符、联结、条件逻辑、测试等等。
如图4中所示的存储器分析模块400例如可由调试服务器200执行。
在块402,存储器分析模块400获得编译的软件程序和调试信息。这可从第三方源(诸如程序源104)获得,或者它可通过相对于软件程序302执行编译器模块214来本地获得。当存储在调试服务器存储器300中时,调试信息可被存储为调试信息306记录,并且编译的软件程序可被存储为编译的软件程序304。
在块404,存储器分析模块400可选地可执行编译的软件程序304。执行编译的软件程序相对于执行分析模块400的计算机可以是远程的,诸如在程序源104和/或调试客户端106处或由其执行。执行编译的软件程序可产生崩溃日志(log),所述崩溃日志可作为崩溃日志320记录(一个或多个)发送到调试服务器存储器300,由其生成,或以其它方式存储在其中。
在块406,存储器分析模块400可接收编译的软件程序304中的至少一个存储器损坏的标识。可从人类用户或以编程方式从崩溃日志(诸如崩溃日志320)接收标识。存储器损坏的标识可包括由存储器损坏使用的和/或指配给存储器损坏的标识。存储器损坏可作为存储器损坏308记录(一个或多个)被存储在调试服务器存储器300中。
在块408,存储器分析模块400从处理器追踪模块获得运行时间程序控制流追踪。如在别处所论述的,处理器追踪模块可以是基于硬件的,诸如处理器追踪模块224。运行时间程序控制流追踪可包括来自跨多个中央处理单元上或由多个中央处理单元执行编译的软件程序的信息。这可本地获得,诸如在本地执行编译的软件程序304期间从处理器追踪模块224获得,或者它可从远程源诸如从调试客户端106等获得。在任一情况下,它都可作为运行时间程序控制流追踪310记录(一个或多个)被存储在调试服务器存储器300中。
在块408,存储器分析模块400还从运行时间程序控制流追踪310记录(一个或多个)中获得编译的软件程序304中的基本块列表。基本块列表可作为基本块312记录被存储在调试服务器存储器300中。
在块410,存储器分析模块400诸如通过使用代码分解器模块220分解基本块列表中的基本块312,以识别是存储指令或包括存储指令的基本块312记录,意味着它们将诸如值、向量、矩阵或变量的数据存储到执行编译的软件程序的计算机中的存储器位置。存储指令(一个或多个)可作为存储指令314记录被存储在调试服务器存储器300中。
在块412,存储器分析模块400在运行时间程序控制流追踪310中从存储器损坏308的位置往回搜索或者“走(walks)”,以识别写入到存储器损坏308的寄存器的一个或多个存储指令(一个或多个)314。
在块414,存储器分析模块400在调试信息306中识别指配给存储器损坏308的或由其使用的数据类型或数据类型结构以及存储指令(一个或多个)314的数据类型或数据类型结构。这些可作为数据类型或数据类型结构316记录被存储在调试服务器存储器300中。
对于每个存储指令314记录,开环块416到闭环块426迭代。
在判定块418,存储器分析模块400确定那时-当前的存储指令314记录是否写入到存储器损坏308的寄存器,诸如块406的。如果否定,则存储器分析模块400可继续到下一存储指令314;如果不再有存储指令314记录要处理,则存储器分析模块400可继续到块428。
如果在判定块418肯定,则存储器分析模块400可继续到判定块420,以确定存储指令314是否具有存储器损坏308的相同数据类型或数据类型的结构316。如果在判定块420为否定,则存储器分析模块400可继续到下一存储指令314;如果不再有存储指令314记录要处理,则存储器分析模块400可继续到块428。
在块422,存储器分析模块400可将在判定块418和判定块420都是肯定的那些存储指令314记录标记为候选存储指令(一个或多个)314,意味着此类存储指令(一个或多个)314写入到存储器损坏308的寄存器,并且与存储器损坏308具有相同的数据类型或数据类型的结构316。
在块424,存储器分析模块400可获得链接,将候选存储指令(一个或多个)314链接或映射到(未编译)软件程序302中的指令。此链接例如可从调试信息306获得。此类链接可作为链接318记录被存储在调试服务器存储器300中。
在闭环块426,存储器分析模块400可返回到开环块416以通过下一存储指令314上迭代,如果有的话。
在块428,存储器分析模块400可将块422的候选存储指令(一个或多个)314和块424的链接318传到或返回到另一过程、模块或用户。
返回的候选存储指令(一个或多个)314例如可由用户用于调试软件程序302。候选存储指令(一个或多个)314和链接(一个或多个)318例如可由插装模块500用于插装软件程序302以更容易地在将来执行重新编译的软件程序302(包含插装和任何漏洞修正)时识别基本块312。
在结束块430,存储器分析模块400可结束和/或返回到造成它的过程。
如图5中所示的插装模块500例如可由调试服务器200或另一适合的计算机(诸如调试客户端106或程序源104)执行。
在块502,插装模块500诸如从存储器分析模块400接收候选存储指令(一个或多个)和将候选存储指令(一个或多个)链接或映射到部分软件程序的链接。候选存储指令(一个或多个)可以是候选存储指令314记录(一个或多个),软件程序可以是软件程序302记录(一个或多个),并且链接(一个或多个)可以是链接(一个或多个)318。
在块504,插装模块500可接收候选存储指令(一个或多个)的选择以插装。这可由用户或另一过程提供。这是可选的;插装模块500可对于所有候选指令(一个或多个)插装软件程序。如本文所使用的,“插装”和“软件插装”是指执行如下至少一项的计算机软件和/或硬件:i)监视和/或测量计算机软件和/或硬件过程的性能和/或行为;ii)诊断或产生实现诊断错误的信息;以及iii)写入或产生实现追踪信息的信息,“以插装”意味着在源代码和/或二进制代码中包含指令,该代码执行前述一项,并报告原始数据或其处理结果。插装的非限制示例包括代码追踪、调试、性能计数器和事件日志。
在块506,插装模块500可在由链接识别的位置插入软件插装。软件插装例如可包括统一资源标识符(URI)和从URI请求数据和/或向URI提供数据的指令,该指令可识别在链接位置的基本块。软件插装可包括对调试信息的输出和/或在执行编译的软件程序期间的输出,所述输出可用于识别在链接位置的基本块、此类基本块的输入和输出、此类基本块的数据类型或数据类型结构等。
在结束块508,插装模块500可结束和/或返回到造成它的过程。
下面是图示此公开实施例的示例:
示例1:一种用于计算的设备,所述计算包含调试软件程序,所述设备包括:存储器分析模块,要由计算机处理器操作以:获得从所述软件程序编译的编译的软件程序和调试信息;接收所述编译的软件程序中的存储器损坏的标识;获得具有所述编译的软件程序的基本块列表的运行时间程序控制流追踪;分解或引起分解基本块列表以识别一组存储指令;在所述调试信息中识别所述组存储指令中的存储指令的和所述存储器损坏的数据类型或数据类型结构;确定具有所述存储器损坏的所述数据类型或数据类型结构的候选存储指令,并且获得将所述候选存储指令链接到所述软件程序的部分的至少一个链接;以及返回所述候选存储指令和所述链接。
示例2:示例1的设备,其中在所述软件程序编译期间准备所述调试信息,并且其中所述调试信息包括所述基本块列表中的基本块的定义、所述基本块的所述数据类型或数据类型结构以及将所述基本块的指令地址映射到所述软件程序的部分的链接。
示例3:示例1的设备,其中分解或引起分解所述基本块列表以识别所述组存储指令是通过代码分解器模块,并且其中所述存储器分析模块进一步接收包括所述存储器损坏的寄存器的崩溃日志,并且其中所述存储器分析模块进一步通过所述代码分解器模块在所述运行时间程序控制流追踪中从所述存储器损坏往回搜索或引起往回搜索以识别加载存储器损坏的所述寄存器并且具有寄存器的数据类型或数据类型结构的所述组存储指令中的至少一个存储指令,并将至少一个存储指令识别为所述候选存储指令。
示例4:示例1的设备,其中返回所述候选存储指令和所述链接包括对于用户显示所述候选存储指令和所述链接。
示例5:示例1的设备,其中返回所述候选存储指令和所述链接包括将所述候选存储指令和所述链接传递到插装模块,所述插装模块要对所述软件程序插装以识别将来调试信息中的所述候选存储指令。
示例6:示例1的设备,其中在执行所述编译的软件程序期间从处理器追踪模块获得所述运行时间程序控制流追踪,所述执行产生所述存储器损坏。
示例7:示例6的设备,其中所述处理器追踪模块是基于硬件的。
示例8:示例6的设备,其中所述编译的软件程序的所述执行通过多个中央处理单元,并且所述运行时间程序控制流追踪包括来自所述多个中央处理单元的数据。
示例9:示例1至示例8中任一示例的设备,其中所述基本块列表中的每个基本块包括软件指令,其没有分支入(不同于进入所述软件指令)并且没有分支出(不同于退出所述软件指令),并且所述基本块是所述运行时间程序控制流追踪中的节点。
示例10:示例1至示例8中任一示例的设备,其中所述存储指令将值、向量、矩阵或变量记录到计算机中的存储器位置。
示例11:一种用于调试软件程序的方法,包括:在包括处理器和存储器的计算装置中,获得从所述软件程序编译的编译的软件程序和调试信息;接收所述编译的软件程序中的存储器损坏的标识;获得具有所述编译的软件程序的基本块列表的运行时间程序控制流追踪;分解或引起分解基本块列表以识别一组存储指令;在所述调试信息中识别所述组存储指令中的存储指令的和所述存储器损坏的数据类型或数据类型结构;确定具有所述存储器损坏的所述数据类型或数据类型结构的候选存储指令,并且获得将所述候选存储指令链接到所述软件程序的部分的至少一个链接;以及返回所述候选存储指令和所述链接。
示例12:示例11的方法,其中在所述软件程序编译期间准备所述调试信息,并且其中所述调试信息包括所述基本块列表中基本块的定义、所述基本块的所述数据类型或数据类型结构以及将所述基本块的指令地址映射到所述软件程序的部分的链接。
示例13:示例11的方法,进一步包括:接收包括所述存储器损坏的输入寄存器的崩溃日志,通过代码分解器模块在所述运行时间程序控制流追踪中从所述存储器损坏往回搜索或引起往回搜索以识别加载所述存储器损坏的寄存器并且具有寄存器的数据类型或数据类型结构的所述组存储指令中的至少一个存储指令,并将至少一个存储指令识别为候选存储指令。
示例14:示例11的方法,其中返回所述候选存储指令和所述链接包括对于用户显示所述候选存储指令和所述链接。
示例15:示例11的方法,其中返回所述候选存储指令和所述链接包括插装所述软件程序以识别将来调试信息中的所述候选存储指令。
示例16:示例11的方法,进一步包括:其中在执行所述编译的软件程序期间从处理器追踪模块获得所述运行时间程序控制流追踪,所述执行产生所述存储器损坏。
示例17:示例16的方法,其中所述处理器追踪模块是基于硬件的。
示例18:示例16的方法,其中所述编译的软件程序的所述执行通过多个中央处理单元,并且所述运行时间程序控制流追踪包括来自所述多个中央处理单元的数据。
示例19:示例11至示例18中任一示例的方法,其中所述基本块列表中的每个基本块包括软件指令,其没有分支入(不同于进入所述软件指令)并且没有分支出(不同于退出所述软件指令),并且所述基本块是所述运行时间程序控制流追踪中的节点。
示例20:示例11至示例18中任一示例的方法,其中所述存储指令将值、向量、矩阵或变量记录到计算机中的存储器位置。
示例21:一种用于计算的设备,所述计算包含调试软件程序,所述设备包括:用于获得从所述软件程序编译的编译的软件程序和调试信息的部件;用于接收所述编译的软件程序中的存储器损坏的标识的部件;用于获得具有所述编译的软件程序的基本块列表的运行时间程序控制流追踪的部件;用于分解的部件或用于引起分解基本块列表以识别一组存储指令的部件;用于在所述调试信息中识别所述组存储指令中的存储指令的和所述存储器损坏的数据类型或数据类型结构的部件;用于确定具有所述存储器损坏的所述数据类型或数据类型结构的候选存储指令,并且获得将所述候选存储指令链接到所述软件程序的部分的至少一个链接的部件;以及用于返回所述候选存储指令和所述链接的部件。
示例22:示例21的设备,进一步包括:用于从所述软件程序的编译中获得所述调试信息的部件,并且其中所述调试信息包括所述基本块列表中基本块的定义、所述基本块的所述数据类型或数据类型结构以及将所述基本块的指令地址映射到所述软件程序的所述部分的链接。
示例23:示例21的设备,其中用于分解的部件或用于引起分解所述基本块列表以识别所述组存储指令的部件包括代码分解器模块,并且进一步包括用于接收包括所述存储器损坏的寄存器的崩溃日志的部件,并且进一步包括用于通过所述代码分解器模块在所述运行时间程序控制流追踪中从所述存储器损坏往回搜索或引起往回搜索以识别加载所述存储器损坏的寄存器并且具有所述寄存器的数据类型或数据类型结构的所述组存储指令中的至少一个存储指令的部件,以及用于将至少一个存储指令识别为候选存储指令的部件。
示例24:示例21的设备,其中用于返回所述候选存储指令和所述链接的部件包括用于对于用户显示所述候选存储指令和所述链接的部件。
示例25:示例21的设备,其中用于返回所述候选存储指令和所述链接的部件包括用于插装所述软件程序以识别将来调试信息中的所述候选存储指令的部件。
示例26:示例21的设备,进一步包括:用于处理器追踪模块的部件,用于处理器追踪模块的所述部件确定在所述编译的软件程序执行期间的所述运行时间程序控制流追踪,所述执行产生所述存储器损坏。
示例27:示例26的设备,其中用于处理器追踪模块的部件是基于硬件的。
示例28:示例26的设备,其中所述编译的软件程序的所述执行通过多个中央处理单元,并且运行时间程序控制流追踪包括来自所述多个中央处理单元的数据。
示例29:示例21至示例28中任一示例的设备,其中所述基本块列表中的每个基本块包括软件指令,其没有分支入(不同于进入所述软件指令)并且没有分支出(不同于退出所述软件指令),并且所述基本块是所述运行时间程序控制流追踪中的节点。
示例30:示例21至示例28中任一示例的设备,其中所述存储指令将值、向量、矩阵或变量记录到计算机中的存储器位置。
示例31:一个或多个计算机可读媒体,包括指令,所述指令使计算装置响应于由计算装置的一个或多个处理器对指令的执行而调试软件程序,其中调试软件程序包含:获得从所述软件程序编译的编译的软件程序和调试信息;接收所述编译的软件程序中的存储器损坏的标识;获得具有所述编译的软件程序的基本块列表的运行时间程序控制流追踪;分解或引起分解基本块列表以识别一组存储指令;在所述调试信息中识别所述组存储指令中的存储指令的和所述存储器损坏的数据类型或数据类型结构;确定具有所述存储器损坏的所述数据类型或数据类型结构的候选存储指令,并且获得将所述候选存储指令链接到所述软件程序的部分的至少一个链接;以及返回所述候选存储指令和所述链接。
示例32:示例31的计算机可读媒体,其中在所述软件程序编译期间准备所述调试信息,并且其中所述调试信息包括所述基本块列表中的基本块的定义、所述基本块的所述数据类型或数据类型结构以及将所述基本块的指令地址映射到所述软件程序的所述部分的链接。
示例33:示例31的计算机可读媒体,其中调试软件程序包含通过代码分解器模块分解或引起分解基本块列表以识别所述组存储指令,接收包括存储器损坏的寄存器的崩溃日志,通过代码分解器模块在运行时间程序控制流追踪中从存储器损坏往回搜索或引起往回搜索以识别加载存储器损坏的寄存器并且具有寄存器的数据类型或数据类型结构的所述组存储指令中的至少一个存储指令,以及将至少一个存储指令识别为候选存储指令。
示例34:示例31的计算机可读媒体,其中返回所述候选存储指令和所述链接包括对于用户显示所述候选存储指令和所述链接。
示例35:示例31的计算机可读媒体,其中返回候选存储指令和链接包括由插装模块插装或引起插装软件程序以识别将来调试信息中的候选存储指令。
示例36:示例31的计算机可读媒体,其中调试软件程序进一步在执行所述编译的软件程序期间从处理器追踪模块获得所述运行时间程序控制流追踪,所述执行产生所述存储器损坏。
示例37:示例36的计算机可读媒体,其中所述处理器追踪模块是基于硬件的。
示例38:示例36的计算机可读媒体,其中所述编译的软件程序的所述执行通过多个中央处理单元,并且所述运行时间程序控制流追踪包括来自所述多个中央处理单元的数据。
示例39:示例31至示例38中任一示例的计算机可读媒体,其中所述基本块列表中的每个基本块包括软件指令,其没有分支入(不同于进入所述软件指令)并且没有分支出(不同于退出所述软件指令),并且所述基本块是所述运行时间程序控制流追踪中的节点。
示例40:示例31至示例38中任一示例的计算机可读媒体,其中所述存储指令将值、向量、矩阵或变量记录到计算机中的存储器位置。
Claims (25)
1.一种用于计算的设备,所述计算包含调试软件程序,所述设备包括:
存储器分析模块,其要由计算机处理器操作以:
获得用于编译的软件程序的调试信息,所述编译的软件程序是从用于所述软件程序的源代码或字节代码编译的;
接收所述编译的软件程序中的存储器损坏的标识;
获得具有所述编译的软件程序的基本块列表的运行时间程序控制流追踪;
分解或引起分解所述基本块列表以识别一组存储指令;
在所述调试信息中识别所述组存储指令中的存储指令的和所述存储器损坏的数据类型或数据类型结构;
基于每个存储指令是否具有所述存储器损坏的所述数据类型或数据类型结构并是否已经写入与所述存储器损坏相关联的存储器位置来确定所述一组存储指令中的每个存储指令是否为候选存储指令,并且
获得并输出将每个候选存储指令映射到所述软件程序的所述源代码或字节代码的部分的至少一个链接;
其中所述基本块列表中的每个基本块包括软件指令,其没有分支入,不同于进入所述软件指令,并且没有分支出,不同于退出所述软件指令,并且每个基本块是所述运行时间程序控制流追踪中的节点。
2.如权利要求1所述的设备,其中在所述源代码或字节代码编译期间准备所述调试信息,并且其中所述调试信息包括所述基本块列表中基本块的定义、所述基本块的所述数据类型或数据类型结构以及将所述基本块的指令地址映射到所述软件程序的所述部分的链接。
3.如权利要求1所述的设备,其中分解或引起分解所述基本块列表以识别所述组存储指令是通过代码分解器模块,并且其中所述存储器分析模块进一步接收包括所述存储器损坏的输入寄存器的崩溃日志,并且其中所述存储器分析模块进一步用所述代码分解器模块在所述运行时间程序控制流追踪中从所述存储器损坏往回搜索或引起往回搜索以识别加载所述存储器损坏的所述输入寄存器并且具有所述输入寄存器的所述数据类型或数据类型结构的所述组存储指令中的至少一个存储指令,并将所述至少一个存储指令识别为所述候选存储指令。
4.如权利要求1所述的设备,其中所述存储器分析模块进一步用于对于用户显示所述候选存储指令和所述链接。
5.如权利要求1所述的设备,其中所述存储器分析模块进一步用于将所述候选存储指令和所述链接传递到插装模块,所述插装模块要将所述软件程序插装以识别将来调试信息中的所述候选存储指令。
6.如权利要求1所述的设备,其中在执行所述编译的软件程序期间从处理器追踪模块获得所述运行时间程序控制流追踪,所述执行产生所述存储器损坏。
7.如权利要求6所述的设备,其中所述处理器追踪模块是基于硬件的。
8.如权利要求6所述的设备,其中所述编译的软件程序的所述执行是通过多个中央处理单元,并且所述运行时间程序控制流追踪包括来自所述多个中央处理单元的数据。
9.如权利要求1至8中任一项所述的设备,其中所述存储指令将值、向量、矩阵或变量记录到所述计算机中的存储器位置。
10.一种用于调试软件程序的方法,包括:
在包括处理器和存储器的计算装置中,
获得用于编译的软件程序的调试信息,所述编译的软件程序是从用于所述软件程序的源代码或字节代码编译的;
接收所述编译的软件程序中的存储器损坏的标识;
获得具有所述编译的软件程序的基本块列表的运行时间程序控制流追踪;
分解或引起分解所述基本块列表以识别一组存储指令;
在所述调试信息中识别所述组存储指令中的存储指令的和所述存储器损坏的数据类型或数据类型结构;
基于每个存储指令是否具有所述存储器损坏的所述数据类型或数据类型结构并是否已经写入与所述存储器损坏相关联的存储器位置来确定所述一组存储指令中的每个存储指令是否为候选存储指令,并且
获得并输出将每个候选存储指令映射到所述软件程序的所述源代码或字节代码的部分的至少一个链接;
其中所述基本块列表中的每个基本块包括软件指令,其没有分支入,不同于进入所述软件指令,并且没有分支出,不同于退出所述软件指令,并且每个基本块是所述运行时间程序控制流追踪中的节点。
11.如权利要求10所述的方法,其中在所述源代码或字节代码的编译期间准备所述调试信息,并且其中所述调试信息包括所述基本块列表中基本块的定义、所述基本块的所述数据类型或数据类型结构以及将所述基本块的指令地址映射到所述软件程序的所述部分的链接。
12.如权利要求10所述的方法,进一步包括:接收包括所述存储器损坏的输入寄存器的崩溃日志,用代码分解器模块在所述运行时间程序控制流追踪中从所述存储器损坏往回搜索或引起往回搜索以识别加载所述存储器损坏的所述输入寄存器并且具有所述输入寄存器的所述数据类型或数据类型结构的所述组存储指令中的至少一个存储指令,并将所述至少一个存储指令识别为所述候选存储指令。
13.如权利要求10所述的方法,进一步包括对于用户显示所述候选存储指令和所述链接。
14.如权利要求10所述的方法,进一步包括插装所述软件程序以识别将来调试信息中的所述候选存储指令。
15.如权利要求10所述的方法,进一步包括:在执行所述编译的软件程序期间从处理器追踪模块获得所述运行时间程序控制流追踪,所述执行产生所述存储器损坏。
16.如权利要求15所述的方法,其中所述处理器追踪模块是基于硬件的,并且其中所述编译的软件程序的所述执行是通过多个中央处理单元,并且所述运行时间程序控制流追踪包括来自所述多个中央处理单元的数据并且其中所述存储指令将值、向量、矩阵或变量记录到所述计算机中的存储器位置。
17.一个或多个计算机可读介质,包括使计算装置执行如权利要求10至16中任一项所述的方法的指令。
18.一种用于计算的设备,所述计算包含调试软件程序,所述设备包括:
用于获得用于编译的软件程序的调试信息的部件,所述编译的软件程序是从用于所述软件程序的源代码或字节代码编译的;
用于接收所述编译的软件程序中的存储器损坏的标识的部件;
用于获得具有所述编译的软件程序的基本块列表的运行时间程序控制流追踪的部件;
用于分解的部件或用于引起分解所述基本块列表以识别一组存储指令的部件;
用于在所述调试信息中识别所述组存储指令中的存储指令的和所述存储器损坏的数据类型或数据类型结构的部件;
用于基于每个存储指令是否具有所述存储器损坏的所述数据类型或数据类型结构并是否已经写入与所述存储器损坏相关联的存储器位置来确定所述一组存储指令中的每个存储指令是否为候选存储指令,以及
用于获得并输出将每个候选存储指令映射到所述软件程序的所述源代码或字节代码的部分的至少一个链接的部件;
其中所述基本块列表中的每个基本块包括软件指令,其没有分支入,不同于进入所述软件指令,并且没有分支出,不同于退出所述软件指令,并且每个基本块是所述运行时间程序控制流追踪中的节点。
19.如权利要求18所述的设备,进一步包括:用于从所述源代码或字节代码的编译中获得所述调试信息的部件,并且其中所述调试信息包括所述基本块列表中基本块的定义、所述基本块的所述数据类型或数据类型结构以及将所述基本块的指令地址映射到所述软件程序的所述部分的链接。
20.如权利要求18所述的设备,其中用于分解的部件或用于引起分解所述基本块列表以识别所述组存储指令的部件包括代码分解器模块,并且进一步包括用于接收包括所述存储器损坏的输入寄存器的崩溃日志的部件,并且进一步包括用于用所述代码分解器模块在所述运行时间程序控制流追踪中从所述存储器损坏往回搜索或引起往回搜索以识别加载所述存储器损坏的所述输入寄存器并且具有所述输入寄存器的所述数据类型或数据类型结构的所述组存储指令中的至少一个存储指令的部件,以及用于将所述至少一个存储指令识别为所述候选存储指令的部件。
21.如权利要求18所述的设备,进一步包括用于对于用户显示所述候选存储指令和所述链接的部件。
22.如权利要求18所述的设备,进一步包括用于插装所述软件程序以识别将来调试信息中的所述候选存储指令的部件。
23.如权利要求18所述的设备,进一步包括:用于处理器追踪模块的部件,所述用于处理器追踪模块的部件确定在所述编译的软件程序执行期间的所述运行时间程序控制流追踪,所述执行产生所述存储器损坏。
24.如权利要求23所述的设备,其中用于所述处理器追踪模块的所述部件是基于硬件的,并且其中所述编译的软件程序的所述执行是通过多个中央处理单元,并且所述运行时间程序控制流追踪包括来自所述多个中央处理单元的数据。
25.如权利要求18至24中任一项所述的设备,其中所述存储指令将值、向量、矩阵或变量记录到所述计算机中的存储器位置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110939851.2A CN113704097A (zh) | 2015-12-21 | 2016-11-21 | 在处理器追踪日志中使用编译器类型信息进行数据流分析的方法和设备 |
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US14/977,071 US10013335B2 (en) | 2015-12-21 | 2015-12-21 | Data flow analysis in processor trace logs using compiler-type information method and apparatus |
US14/977071 | 2015-12-21 |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110939851.2A Division CN113704097A (zh) | 2015-12-21 | 2016-11-21 | 在处理器追踪日志中使用编译器类型信息进行数据流分析的方法和设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107025167A CN107025167A (zh) | 2017-08-08 |
CN107025167B true CN107025167B (zh) | 2021-09-03 |
Family
ID=59064917
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110939851.2A Pending CN113704097A (zh) | 2015-12-21 | 2016-11-21 | 在处理器追踪日志中使用编译器类型信息进行数据流分析的方法和设备 |
CN201611022239.4A Active CN107025167B (zh) | 2015-12-21 | 2016-11-21 | 在处理器追踪日志中使用编译器类型信息进行数据流分析的方法和设备 |
Family Applications Before (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110939851.2A Pending CN113704097A (zh) | 2015-12-21 | 2016-11-21 | 在处理器追踪日志中使用编译器类型信息进行数据流分析的方法和设备 |
Country Status (4)
Country | Link |
---|---|
US (1) | US10013335B2 (zh) |
JP (1) | JP6363152B2 (zh) |
CN (2) | CN113704097A (zh) |
WO (1) | WO2017112127A1 (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10013335B2 (en) * | 2015-12-21 | 2018-07-03 | Intel Corporation | Data flow analysis in processor trace logs using compiler-type information method and apparatus |
US10372902B2 (en) * | 2017-03-06 | 2019-08-06 | Intel Corporation | Control flow integrity |
US10540261B2 (en) | 2017-04-07 | 2020-01-21 | International Business Machines Corporation | Problem diagnosis technique of memory corruption based on regular expression generated during application compiling |
CN107678948B (zh) * | 2017-09-18 | 2021-09-07 | 茂佳科技(广东)有限公司 | 测试用例生成方法、终端及存储介质 |
US11068378B2 (en) * | 2019-04-11 | 2021-07-20 | Microsoft Technology Licensing, Llc | Memory value exposure in time-travel debugging traces |
CN112579169B (zh) * | 2019-09-27 | 2024-04-09 | 阿里巴巴集团控股有限公司 | 处理器追踪流的生成方法及装置 |
US20220092179A1 (en) * | 2021-12-02 | 2022-03-24 | Intel Corporation | Detecting data oriented attacks using hardware-based data flow anomaly detection |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6353924B1 (en) * | 1999-02-08 | 2002-03-05 | Incert Software Corporation | Method for back tracing program execution |
CN101105780A (zh) * | 2006-07-10 | 2008-01-16 | 株式会社日立制作所 | 存储控制系统及其控制方法,端口选择器,以及控制器 |
CN101526921A (zh) * | 2008-12-31 | 2009-09-09 | 北京飞天诚信科技有限公司 | 写入数据的方法及装置 |
CN102857358A (zh) * | 2011-06-29 | 2013-01-02 | 环旭电子股份有限公司 | 可修复固件的客户端设备及其固件修复方法 |
CN104049941A (zh) * | 2013-03-15 | 2014-09-17 | 英特尔公司 | 跟踪指令的控制流程 |
Family Cites Families (34)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS6292035A (ja) | 1985-10-17 | 1987-04-27 | Omron Tateisi Electronics Co | プログラムデバツグ装置 |
JPH02235150A (ja) | 1989-03-09 | 1990-09-18 | Nec Corp | 情報処理装置 |
US5615357A (en) * | 1994-12-29 | 1997-03-25 | Sun Microsystems, Inc. | System and method for verifying processor performance |
JPH08297597A (ja) | 1995-04-26 | 1996-11-12 | Mitsubishi Electric Corp | エミュレータ |
US5907709A (en) * | 1996-02-08 | 1999-05-25 | Inprise Corporation | Development system with methods for detecting invalid use and management of resources and memory at runtime |
US5848264A (en) * | 1996-10-25 | 1998-12-08 | S3 Incorporated | Debug and video queue for multi-processor chip |
US6769116B1 (en) | 1999-10-21 | 2004-07-27 | Oracle International Corporation | Diagnostic technique for debugging memory corruption |
US6718485B1 (en) * | 1999-11-16 | 2004-04-06 | Parasoft Corporation | Software emulating hardware for analyzing memory references of a computer program |
US6748584B1 (en) * | 1999-12-29 | 2004-06-08 | Veritas Operating Corporation | Method for determining the degree to which changed code has been exercised |
US6543028B1 (en) * | 2000-03-31 | 2003-04-01 | Intel Corporation | Silent data corruption prevention due to instruction corruption by soft errors |
US7313734B2 (en) * | 2002-01-14 | 2007-12-25 | International Business Machines Corporation | Method and system for instruction tracing with enhanced interrupt avoidance |
US7231634B2 (en) * | 2002-09-17 | 2007-06-12 | Sun Microsystems, Inc. | Method for determining scope and cause of memory corruption |
US8407798B1 (en) * | 2002-10-01 | 2013-03-26 | Skybox Secutiry Inc. | Method for simulation aided security event management |
US7409602B2 (en) * | 2003-11-12 | 2008-08-05 | Lsi Corporation | Methodology for debugging RTL simulations of processor based system on chip |
US7739374B1 (en) * | 2003-12-30 | 2010-06-15 | Sap Ag | System and method for configuring tracing and logging functions |
JP2006215931A (ja) * | 2005-02-07 | 2006-08-17 | Yasuo Oka | インターネット個人メモリサーバ |
US8266608B2 (en) * | 2005-02-18 | 2012-09-11 | Green Hills Software, Inc. | Post-compile instrumentation of object code for generating execution trace data |
US7711914B2 (en) | 2005-06-28 | 2010-05-04 | Hewlett-Packard Development Company, L.P. | Debugging using virtual watchpoints |
US7526758B2 (en) * | 2005-06-30 | 2009-04-28 | Microsoft Corporation | Execution failure investigation using static analysis |
US8813055B2 (en) * | 2006-11-08 | 2014-08-19 | Oracle America, Inc. | Method and apparatus for associating user-specified data with events in a data space profiler |
US8032875B2 (en) * | 2006-11-28 | 2011-10-04 | Oracle America, Inc. | Method and apparatus for computing user-specified cost metrics in a data space profiler |
US8762951B1 (en) * | 2007-03-21 | 2014-06-24 | Oracle America, Inc. | Apparatus and method for profiling system events in a fine grain multi-threaded multi-core processor |
US8261242B2 (en) * | 2008-06-09 | 2012-09-04 | International Business Machines Corporation | Assisting debug memory tracing using an instruction array that tracks the addresses of instructions modifying user specified objects |
US20110016455A1 (en) * | 2009-07-20 | 2011-01-20 | Glenn Perry | Power Profiling for Embedded System Design |
US8490060B2 (en) | 2009-09-23 | 2013-07-16 | International Business Machines Corporation | Tracing memory updates and accesses for debugging computer programs |
US8621337B1 (en) | 2010-09-30 | 2013-12-31 | Juniper Networks, Inc. | Detecting memory corruption |
US8732681B2 (en) * | 2011-05-16 | 2014-05-20 | Texas Instruments Incorporated | Stack analysis for post mortem analysis |
US20130055033A1 (en) * | 2011-08-22 | 2013-02-28 | International Business Machines Corporation | Hardware-assisted program trace collection with selectable call-signature capture |
US8756582B2 (en) * | 2011-08-22 | 2014-06-17 | International Business Machines Corporation | Tracking a programs calling context using a hybrid code signature |
CN103064752B (zh) * | 2011-09-27 | 2016-12-21 | 北京奇虎科技有限公司 | 一种文件修复方法及装置 |
US9672298B2 (en) | 2014-05-01 | 2017-06-06 | Oracle International Corporation | Precise excecution of versioned store instructions |
US9619313B2 (en) * | 2015-06-19 | 2017-04-11 | Intel Corporation | Memory write protection for memory corruption detection architectures |
US10013335B2 (en) * | 2015-12-21 | 2018-07-03 | Intel Corporation | Data flow analysis in processor trace logs using compiler-type information method and apparatus |
US11461025B2 (en) * | 2020-11-05 | 2022-10-04 | Macronix International Co., Ltd. | Data retention in memory devices |
-
2015
- 2015-12-21 US US14/977,071 patent/US10013335B2/en not_active Expired - Fee Related
-
2016
- 2016-11-14 WO PCT/US2016/061856 patent/WO2017112127A1/en active Application Filing
- 2016-11-18 JP JP2016225010A patent/JP6363152B2/ja not_active Expired - Fee Related
- 2016-11-21 CN CN202110939851.2A patent/CN113704097A/zh active Pending
- 2016-11-21 CN CN201611022239.4A patent/CN107025167B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6353924B1 (en) * | 1999-02-08 | 2002-03-05 | Incert Software Corporation | Method for back tracing program execution |
CN101105780A (zh) * | 2006-07-10 | 2008-01-16 | 株式会社日立制作所 | 存储控制系统及其控制方法,端口选择器,以及控制器 |
CN101526921A (zh) * | 2008-12-31 | 2009-09-09 | 北京飞天诚信科技有限公司 | 写入数据的方法及装置 |
CN102857358A (zh) * | 2011-06-29 | 2013-01-02 | 环旭电子股份有限公司 | 可修复固件的客户端设备及其固件修复方法 |
CN104049941A (zh) * | 2013-03-15 | 2014-09-17 | 英特尔公司 | 跟踪指令的控制流程 |
Also Published As
Publication number | Publication date |
---|---|
CN113704097A (zh) | 2021-11-26 |
JP6363152B2 (ja) | 2018-07-25 |
US20170177463A1 (en) | 2017-06-22 |
WO2017112127A1 (en) | 2017-06-29 |
US10013335B2 (en) | 2018-07-03 |
JP2017117442A (ja) | 2017-06-29 |
CN107025167A (zh) | 2017-08-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107025167B (zh) | 在处理器追踪日志中使用编译器类型信息进行数据流分析的方法和设备 | |
US8352907B2 (en) | Software application recreation | |
US9898387B2 (en) | Development tools for logging and analyzing software bugs | |
US8776029B2 (en) | System and method of software execution path identification | |
EP2827253B1 (en) | Metaphor based language fuzzing of computer code | |
US9594670B2 (en) | Managing software dependencies during software testing and debugging | |
CN106557413A (zh) | 基于代码覆盖率获取测试用例的方法和设备 | |
US9588872B2 (en) | Discovery of code paths | |
US20140380280A1 (en) | Debugging tool with predictive fault location | |
US8819640B2 (en) | Establishing cloud debug breakpoints assigned to users | |
US10579502B2 (en) | Resuming applications using pass-through servers and trace data | |
US8943480B2 (en) | Setting breakpoints in optimized instructions | |
Marra et al. | A debugging approach for live Big Data applications | |
US9442818B1 (en) | System and method for dynamic data collection | |
CN115994085A (zh) | 代码覆盖率的测试处理方法、装置、设备及存储介质 | |
US9465686B2 (en) | Detecting uninitialized memory references | |
US20070150866A1 (en) | Displaying parameters associated with call statements | |
CN110597704A (zh) | 应用程序的压力测试方法、装置、服务器和介质 | |
US9841960B2 (en) | Dynamic provision of debuggable program code | |
Fedorova et al. | Performance comprehension at WiredTiger | |
US8819494B2 (en) | Automatically changing parts in response to tests | |
US10169195B2 (en) | Detecting uninitialized memory references | |
Altekar et al. | Dcr: Replay debugging for the datacenter | |
Getman et al. | Combined approach to solving problems in binary code analysis | |
CN114968751A (zh) | 一种无代码开发平台的程序调试方法和程序调试装置 |
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 |