CN104731696B - 定位程序代码中bug的方法及相关装置 - Google Patents

定位程序代码中bug的方法及相关装置 Download PDF

Info

Publication number
CN104731696B
CN104731696B CN201310704156.3A CN201310704156A CN104731696B CN 104731696 B CN104731696 B CN 104731696B CN 201310704156 A CN201310704156 A CN 201310704156A CN 104731696 B CN104731696 B CN 104731696B
Authority
CN
China
Prior art keywords
logical
subsegment
variable
state machine
value
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
Application number
CN201310704156.3A
Other languages
English (en)
Other versions
CN104731696A (zh
Inventor
周飞虎
谢立强
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tencent Technology Shenzhen Co Ltd
Tencent Cloud Computing Beijing Co Ltd
Original Assignee
Tencent Technology Shenzhen Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN201310704156.3A priority Critical patent/CN104731696B/zh
Priority to PCT/CN2014/092951 priority patent/WO2015090143A1/en
Publication of CN104731696A publication Critical patent/CN104731696A/zh
Priority to US15/182,463 priority patent/US9772924B2/en
Application granted granted Critical
Publication of CN104731696B publication Critical patent/CN104731696B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3636Software debugging by tracing the execution of the program
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3648Software debugging using additional hardware
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3664Environments for testing or debugging software

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)
  • Retry When Errors Occur (AREA)

Abstract

本发明实施例公开了定位程序代码中bug的方法及相关装置。其中,一种定位程序代码中bug的方法,可包括:在程序代码段中的逻辑代码子段操作状态机的过程中,将逻辑代码子段所对应的逻辑标识变量的取值,赋给逻辑代码子段所操作的状态机的探测标记变量;获取程序代码段中的逻辑代码子段操作状态机过程中异常退出时所对应的最顶层上下文;获取在最顶层上下文所对应的堆栈环境之中被操作的状态机的探测标记变量的当前取值;利用获取的被操作的状态机的探测标记变量的当前取值,查找出程序代码段中的第一逻辑代码子段;输出程序代码段的bug定位信息。本发明实施例提供的技术方案有利于提高定位程序代码中bug的效率和精确度。

Description

定位程序代码中bug的方法及相关装置
技术领域
本发明涉及计算机技术领域,具体主要涉及了一种定位程序代码中bug的方法及相关装置。
背景技术
业内通常将计算机程序中存在的比较隐晦,不是显而易见的一些缺陷或问题统称为bug。
在日常编写程序的过程中,随着代码量的增多,尤其是修改老代码时由于对老代码理解不够,考虑不周等,很可能在不经意间引入bug。bug的存在普遍且难以完全避免的。因此如何定位程序中的bug是长期的重要课题。
在现有技术中,当程序异常退出(core)之后,定位bug的主要方法是通过gdb工具查看core文件,借助core文件中记录的程序在core时所处的代码位置和一些变量的值,来查找程序出问题的原因。
本发明的发明人在研究和实践过程中发现,现有技术至少存在以下的技术问题:有些情况下,通过查看core文件,可较快的找到问题的原因。但是有时有一些情况,从core文件中可以看到异常,但是却难以找到更为有指导性的问题原因;这时往往需要花费较多时间来核查代码,但是核查代码通常难以快速找到问题所在。
发明内容
本发明实施例定位程序代码中bug的方法及相关装置,以期提高定位程序代码中bug的效率和精确度。
本发明实施例一方面提供一种定位程序代码中bug的方法,可包括:
在程序代码段中的逻辑代码子段操作状态机的过程中,将所述逻辑代码子段所对应的逻辑标识变量的取值,赋给所述逻辑代码子段所操作的状态机的探测标记变量,或者,将所述逻辑代码子段所对应的逻辑标识变量的取值进行预设数学变换而得到的变换值,赋给所述逻辑代码子段所操作的状态机的探测标记变量;
获取所述程序代码段中的逻辑代码子段操作状态机过程中异常退出时所对应的最顶层上下文;获取在所述最顶层上下文所对应的堆栈环境之中被操作的状态机的探测标记变量的当前取值;
利用获取的所述被操作的状态机的探测标记变量的当前取值,查找出所述程序代码段中的第一逻辑代码子段,其中,所述第一逻辑代码子段所对应的逻辑标识变量的取值或所述第一逻辑代码子段所对应的逻辑标识变量的取值进行预设数学变换而得到的变换值,等于所述获取的所述被操作的状态机的探测标记变量的当前取值;
输出所述程序代码段的bug定位信息,其中,所述bug定位信息包括所述第一逻辑代码子段中的至少一个语句。
本发明实施例另一方面提供一种定位程序代码中bug的装置,可包括:
赋值单元,用于在程序代码段中的逻辑代码子段操作状态机的过程中,将所述逻辑代码子段所对应的逻辑标识变量的取值,赋给所述逻辑代码子段所操作的状态机的探测标记变量,或者,将所述逻辑代码子段所对应的逻辑标识变量的取值进行预设数学变换而得到的变换值,赋给所述逻辑代码子段所操作的状态机的探测标记变量;
获取单元,用于获取所述程序代码段中的逻辑代码子段操作状态机过程中异常退出时所对应的最顶层上下文;获取在所述最顶层上下文所对应的堆栈环境之中被操作的状态机的探测标记变量的当前取值;
查找单元,用于利用所述获取单元获取的所述被操作的状态机的探测标记变量的当前取值,查找出所述程序代码段中的第一逻辑代码子段,其中,所述第一逻辑代码子段所对应的逻辑标识变量的取值或所述第一逻辑代码子段所对应的逻辑标识变量的取值进行预设数学变换而得到的变换值,等于所述获取的所述被操作的状态机的探测标记变量的当前取值;
输出单元,用于输出所述程序代码段的bug定位信息,其中,所述bug定位信息包括所述第一逻辑代码子段中的至少一个语句。
可以看出,本发明实施例的技术方案中,由于在不同逻辑代码子段操作状态机的过程中对状态机的探测标记变量进行相应赋值,这就相当于在状态机上打上了当前操作该状态机的逻辑代码子段的跟踪标记,利用异常退出时所对应的最顶层上下文,能够确定出异常退出时被操作的状态机和该状态机的探测标记变量当前取值,而状态机的探测标记变量当前取值与操作该状态机的逻辑代码子段所对应的逻辑标识变量的取值之间具有映射关系,因此,根据确定出异常退出时被操作的状态机的探测标记变量当前取值,就能够比较精确的定位到异常退出时操作状态机的逻辑代码子段,进而有利于从定位出的很可能存在bug的逻辑代码子段中快速定位bug。可见,上述技术方案有利于提高定位程序代码中bug的效率和精确度。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例的一种定位程序代码中bug的方法的流程示意图;
图2-a是本发明实施例的另一种定位程序代码中bug的方法的流程示意图;
图2-b是本发明实施例的一种程序代码段中的逻辑代码子段操作状态机的状态迁移示意图;
图3是本发明实施例的另一种定位程序代码中bug的方法的流程示意图;
图4是本发明实施例的另一种定位程序代码中bug的方法的流程示意图;
图5是本发明实施例的另一种定位程序代码中bug的方法的流程示意图;
图6-a是本发明实施例提供的一种定位程序代码中bug的装置的示意图;
图6-b是本发明实施例提供的另一种定位程序代码中bug的装置的示意图;
图7是本发明实施例提供的一种计算节点的示意图。
具体实施方式
本发明实施例定位程序代码中bug的方法及相关装置,以期提高定位程序代码中bug的效率和精确度。
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
以下分别进行详细说明。
本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例例如能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
本发明一种定位程序代码中bug的方法的一个实施例,其中,一种定位程序代码中bug的方法可包括:在程序代码段中的逻辑代码子段操作状态机的过程中,将上述逻辑代码子段所对应的逻辑标识变量的取值,赋给上述逻辑代码子段所操作的状态机的探测标记变量,或者,将上述逻辑代码子段所对应的逻辑标识变量的取值进行预设数学变换而得到的变换值,赋给上述逻辑代码子段所操作的状态机的探测标记变量;获取上述程序代码段中的逻辑代码子段操作状态机过程中异常退出时所对应的最顶层上下文;获取在上述最顶层上下文所对应的堆栈环境之中被操作的状态机的探测标记变量的当前取值;利用获取的上述被操作的状态机的探测标记变量的当前取值,查找出上述程序代码段中的第一逻辑代码子段,其中,上述第一逻辑代码子段所对应的逻辑标识变量的取值或上述第一逻辑代码子段所对应的逻辑标识变量的取值进行预设数学变换而得到的变换值,等于上述获取的上述被操作的状态机的探测标记变量的当前取值;输出上述程序代码段的bug定位信息,其中,上述bug定位信息包括上述第一逻辑代码子段中的至少一个语句。
请参见图1,图1是本发明一个实施例提供的一种定位程序代码中bug的方法的流程示意图。如图1所示,本发明一个实施例提供的一种定位程序代码中bug的方法可包括以下内容:
101、在程序代码段中的逻辑代码子段操作状态机的过程中(例如可在程序代码段中的逻辑代码子段对状态机进行切入操作之前、同时或进行切出操作之前),将上述逻辑代码子段所对应的逻辑标识变量的取值,赋给上述逻辑代码子段所操作的状态机的探测标记变量,或者,将上述逻辑代码子段所对应的逻辑标识变量的取值进行预设数学变换而得到的变换值,赋给上述逻辑代码子段所操作的状态机的探测标记变量。
其中,将上述逻辑代码子段所对应的逻辑标识变量的取值进行预设数学变换而得到的变换值例如可以是,将上述逻辑代码子段所对应的逻辑标识变量的取值加上或减去或乘以或除以某预设值而得到变换值,上述预设数学变换也可以是其它数学变换,只要能够根据变换值反推出上述逻辑代码子段所对应的逻辑标识变量的取值即可。
其中,程序代码段中的不同逻辑代码子段所对应的逻辑标识变量的取值互不相同,或者程序代码段中的不同逻辑代码子段所对应的逻辑标识变量的取值行预设数学变换而得到的变换值互不相同。
其中,逻辑代码子段为程序代码段中能够对状态机进行一次切入和切出操作的最小代码粒度。上述程序代码段中可能包括几个、几十个、几百个甚至几千几万或更多个逻辑代码子段。
其中,本发明各实施例中提及的状态机可以是指,在外部事件的驱动下(例如逻辑代码子段的操作下)可以在有限个内部状态之间进行转移的一种对象模型。
102、获取上述程序代码段中的逻辑代码子段操作状态机过程中异常退出时所对应的最顶层上下文;获取在上述最顶层上下文所对应的堆栈环境之中被操作的状态机的探测标记变量的当前取值。
其中,各个逻辑代码子段所操作的状态机可能全部相同或部分相同或互不相同,在不同时刻由于操作状态机的逻辑代码子段可能不同,因此状态机中的探测标记变量的当前取值在不同时刻可能不同,因此可根据状态机中的探测标记变量的当前取值,确定出异常退出时是哪个逻辑代码子段在操作状态机。异常退出时状态机中的探测标记变量的当前取值,等于异常退出时操作状态机的逻辑代码子段所对应的逻辑标识变量的取值。或者,异常退出时状态机中的探测标记变量的当前取值,等于异常退出时操作状态机的逻辑代码子段所对应的逻辑标识变量的取值进行预设数学变换而得到的变换值。
其中,本发明的各实施例中提及的异常退出,可以是指程序代码段没有按设定流程执行并且非正常结束运行的行为。
103、利用获取的上述被操作的状态机的探测标记变量的当前取值,查找出上述程序代码段中的第一逻辑代码子段,其中,上述第一逻辑代码子段所对应的逻辑标识变量的取值或上述第一逻辑代码子段所对应的逻辑标识变量的取值进行预设数学变换而得到的变换值,等于上述获取的上述被操作的状态机的探测标记变量的当前取值。
104、输出上述程序代码段的bug定位信息,其中,上述bug定位信息包括上述第一逻辑代码子段中的至少一个语句。
在本发明的一些实施例中,上述在程序代码段中的逻辑代码子段操作状态机的过程中,将上述逻辑代码子段所对应的逻辑标识变量的取值,赋给上述逻辑代码子段所操作的状态机的探测标记变量,或者,将上述逻辑代码子段所对应的逻辑标识变量的取值进行预设数学变换而得到的变换值,赋给上述逻辑代码子段所操作的状态机的探测标记变量,可以包括:在程序代码段中的逻辑代码子段操作状态机的过程中,调用上述逻辑代码子段中的探测标记变量赋值语句,将上述逻辑代码子段所对应的逻辑标识变量的取值,赋给上述逻辑代码子段所操作的状态机的探测标记变量,或者,将上述逻辑代码子段所对应的逻辑标识变量的取值进行预设数学变换而得到的变换值,赋给上述逻辑代码子段所操作的状态机的探测标记变量。
在本发明另一些实施例中,上述在程序代码段中的逻辑代码子段操作状态机的过程中,将上述逻辑代码子段所对应的逻辑标识变量的取值,赋给上述逻辑代码子段所操作的状态机的探测标记变量,或者,将上述逻辑代码子段所对应的逻辑标识变量的取值进行预设数学变换而得到的变换值,赋给上述逻辑代码子段所操作的状态机的探测标记变量,可包括:在程序代码段中的逻辑代码子段操作状态机的过程中,调用第三方工具或代码调试工具(例如gdb调试工具等)中的探测标记变量赋值语句,将上述逻辑代码子段所对应的逻辑标识变量的取值,赋给上述逻辑代码子段所操作的状态机的探测标记变量,或者将上述逻辑代码子段所对应的逻辑标识变量的取值进行预设数学变换而得到的变换值,赋给上述逻辑代码子段所操作的状态机的探测标记变量。
在本发明的一些实施例中,上述bug定位信息还可包括:上述第一逻辑代码子段中的探测标记变量赋值语句和/或其它语句的行号、上述第一逻辑代码子段中的探测标记变量赋值语句和/或其它语句所属函数的函数名、和/或上述第一逻辑代码子段中的探测标记变量赋值语句和/或其它语句所属源文件的文件名。当然,上述bug定位信息还可包括其它利于进行bug定位的信息。
在本发明一些实施例中,上述定位程序代码中bug的方法还可包括:以上述第一逻辑代码子段中的探测标记变量的变量名为键值,利用链表存储上述第一逻辑代码子段中的探测标记变量和上述bug定位信息。可以理解,以上述探测标记变量的变量名为键值,利用链表存储上述第一逻辑代码子段中的探测标记变量和上述bug定位信息,有利于后续更简易更快捷的索引到上述bug定位信息。
在本发明一些实施例中,上述获取程序代码段中的逻辑代码子段操作状态机过程中异常退出时所对应的最顶层上下文,包括:获取程序代码段中的逻辑代码子段操作状态机过程中异常退出而产生的core文件,解析上述core文件以得到程序代码段中的逻辑代码子段操作状态机过程中异常退出时所对应的最顶层上下文。
在本发明一些实施例中,上述利用获取的上述被操作的状态机的探测标记变量的当前取值,查找出上述程序代码段中的第一逻辑代码子段,包括:打印出上述程序代码段中的所有逻辑标识变量的取值;从打印出的上述程序代码段中的所有逻辑标识变量的取值中捕获到第一逻辑标识变量的取值,其中,上述第一逻辑标识变量的取值,等于上述获取的上述被操作的状态机的探测标记变量的当前取值;从上述程序代码段中查找出上述第一逻辑标识变量对应的第一逻辑代码子段。
在本发明另一些实施例中,上述利用获取的上述被操作的状态机的探测标记变量的当前取值,查找出上述程序代码段中的第一逻辑代码子段包括:打印出上述程序代码段中的所有逻辑标识变量的取值进行预设数学变换而得到的变换值;从打印出的上述程序代码段中的所有逻辑标识变量的取值进行预设数学变换而得到的变换值中,捕获到第一逻辑标识变量的取值进行预设数学变换而得到的变换值,其中,上述第一逻辑标识变量的取值进行预设数学变换而得到的变换值,等于上述获取的上述被操作的状态机的探测标记变量的当前取值;从上述程序代码段中查找出上述第一逻辑标识变量所对应的第一逻辑代码子段。
可以看出,本实施例方案中,在程序代码段中的逻辑代码子段操作状态机的过程中,将上述逻辑代码子段所对应的逻辑标识变量的取值,赋给上述逻辑代码子段所操作的状态机的探测标记变量,或将上述逻辑代码子段所对应的逻辑标识变量的取值进行预设数学变换而得到的变换值,赋给上述逻辑代码子段所操作的状态机的探测标记变量;获取上述程序代码段中的逻辑代码子段操作状态机过程中异常退出时所对应的最顶层上下文;获取在上述最顶层上下文所对应的堆栈环境之中被操作的状态机的探测标记变量的当前取值;利用获取的上述被操作的状态机的探测标记变量的当前取值,查找出上述程序代码段中的第一逻辑代码子段;输出上述程序代码段的bug定位信息,上述bug定位信息包括上述第一逻辑代码子段中的至少一个语句。由于在不同逻辑代码子段操作状态机的过程中对状态机的探测标记变量进行相应赋值,这就相当于在状态机上打上了当前操作该状态机的逻辑代码子段的跟踪标记,利用异常退出时所对应的最顶层上下文,能够确定出异常退出时被操作的状态机和该状态机的探测标记变量当前取值,而状态机的探测标记变量当前取值与操作该状态机的逻辑代码子段所对应的逻辑标识变量的取值之间具有映射关系,因此,根据确定出异常退出时被操作的状态机的探测标记变量当前取值,就能够比较精确的定位到异常退出时操作状态机的逻辑代码子段,进而有利于从定位出的很可能存在bug的逻辑代码子段中快速定位bug。可见,上述技术方案有利于提高定位程序代码中bug的效率和精确度。
为便于更好的理解和实施本发明实施例的上述方案,下面通过一些具体例子进行举例说明。
请参见图2-a,图2-a是本发明的另一个实施例提供的另一种定位程序代码中bug的方法的流程示意图。本实施例中假设程序代码段包括五个逻辑代码子段(即逻辑代码子段A1、逻辑代码子段A2、逻辑代码子段A3、逻辑代码子段A4和逻辑代码子段A5),并且,每个逻辑代码子段所操作的状态机是相同的。如图2所示,本发明另一个实施例提供的另一种定位程序代码中bug的方法可包括以下内容:
201、在程序代码段中的每个逻辑代码子段(即逻辑代码子段A1、逻辑代码子段A2、逻辑代码子段A3、逻辑代码子段A4和逻辑代码子段A5)操作状态机的过程中(例如可在程序代码段中的逻辑代码子段对状态机进行切入操作之前、同时或进行切出操作之前),调用上述逻辑代码子段中的探测标记变量赋值语句,将上述逻辑代码子段所对应的逻辑标识变量的取值,赋给上述逻辑代码子段所操作的状态机的探测标记变量。
其中,程序代码段中的不同逻辑代码子段所对应的逻辑标识变量的取值互不相同。其中,逻辑代码子段为程序代码段中能够对状态机进行一次切入和切出操作的最小代码粒度。上述程序代码段中可能包括几个、几十个、几百个甚至几千几万或更多个逻辑代码子段。
202、获取上述程序代码段中的逻辑代码子段操作状态机过程中异常退出而产生的core文件。
可以理解的是,例如在逻辑代码子段A1、逻辑代码子段A2、逻辑代码子段A3、逻辑代码子段A4或逻辑代码子段A5操作状态机的过程中均可能产生异常退出。逻辑代码子段A1、逻辑代码子段A2、逻辑代码子段A3、逻辑代码子段A4和逻辑代码子段A5中的每个逻辑代码子段所操作的状态机可能相同或部分相同或互不相同。本实施例中以各逻辑代码子段所操作的状态机全部相同为例。
203、解析上述core文件以得到上述程序代码段中的逻辑代码子段操作状态机过程中异常退出时所对应的最顶层上下文。
204、获取在上述最顶层上下文所对应的堆栈环境之中被操作的状态机的探测标记变量的当前取值。
其中,由于本实施例中以各逻辑代码子段所操作的状态机全部相同为例记性说明。因此,任何时候获取到的最顶层上下文所对应的堆栈环境之中被操作的状态机都是确定的,但是,在不同时刻由于操作状态机的逻辑代码子段可能不同,因此状态机中的探测标记变量的当前取值在不同时刻可能不同,因此可以根据状态机中的探测标记变量的当前取值,确定出异常退出时是哪个逻辑代码子段在操作状态机。异常退出时状态机中的探测标记变量的当前取值,等于异常退出时操作状态机的逻辑代码子段所对应的逻辑标识变量的取值。
举例来说,例如图2-b所示,在A1状态,由逻辑代码子段A1对状态机进行操作,调用逻辑代码子段A1中的探测标记变量赋值语句,将逻辑代码子段A1所对应的逻辑标识变量A11的取值,赋给逻辑代码子段A2所操作的状态机的探测标记变量。而在A2状态,由逻辑代码子段A2操作状态机,调用逻辑代码子段A2中的探测标记变量赋值语句,将逻辑代码子段A2所对应的逻辑标识变量A22的取值,赋给逻辑代码子段A2所操作的状态机的探测标记变量。同理,在A3状态,由逻辑代码子段A3操作状态机,调用逻辑代码子段A3中的探测标记变量赋值语句,将逻辑代码子段A3所对应的逻辑标识变量A23的取值,赋给逻辑代码子段A3所操作的状态机的探测标记变量。其它逻辑代码子段操作状态机的过程以此类推。
假设,在A3状态出现异常退出,则可以获取异常退出时对应的最顶层上下文,在上述最顶层上下文所对应的堆栈环境之中被操作的状态机的探测标记变量的当前取值,由于A3状态下由逻辑代码子段A3操作状态机,此时状态机的探测标记变量的当前取值为逻辑代码子段A3所对应的逻辑标识变量A23的取值,因此,可根据状态机的探测标记变量的当前取值定位到当时操作状态机的逻辑代码子段A3,而逻辑代码子段A3中也很可能存在bug。
205、利用获取的上述被操作的状态机的探测标记变量的当前取值,查找出上述程序代码段中的第一逻辑代码子段(其中,第一逻辑代码子段可能为逻辑代码子段A1、逻辑代码子段A2、逻辑代码子段A3、逻辑代码子段A4和逻辑代码子段A5中的任意一个),其中,上述第一逻辑代码子段所对应的逻辑标识变量的取值,等于上述获取的上述被操作的状态机的探测标记变量的当前取值。
在本发明一些实施例中,上述利用获取的上述被操作的状态机的探测标记变量的当前取值,查找出上述程序代码段中的第一逻辑代码子段,包括:打印出上述程序代码段中的所有逻辑标识变量的取值;从打印出的上述程序代码段中的所有逻辑标识变量的取值中捕获到第逻辑标识变量的取值,其中,上述第一逻辑标识变量的取值等于上述获取的上述被操作的状态机的探测标记变量的当前取值;从上述程序代码段中查找出上述第一逻辑标识变量对应的第一逻辑代码子段。
206、输出上述程序代码段的bug定位信息,其中,上述bug定位信息包括上述第一逻辑代码子段中的至少一个语句。
在本发明的一些实施例中,上述bug定位信息还可包括:上述第一逻辑代码子段中的探测标记变量赋值语句的行号、上述第一逻辑代码子段中的探测标记变量赋值语句所属函数的函数名、和/或上述第一逻辑代码子段中的探测标记变量赋值语句所属源文件的文件名。当然,上述bug定位信息还可包括其它利于进行bug定位的信息。
举例来说,假设第一逻辑代码子段为逻辑代码子段A3,则输出的上述程序代码段的bug定位信息可包括:逻辑代码子段A3中的至少一个语句,还可包括逻辑代码子段A3中的探测标记变量赋值语句或其它语句的行号、上述逻辑代码子段A3中的探测标记变量赋值语句或其它语句所属函数的函数名和/或上述逻辑代码子段A3中的探测标记变量赋值语句或其它语句所属源文件的文件名。当然,上述bug定位信息还可包括与逻辑代码子段A3相关的其它利于进行bug定位的信息。
在本发明一些实施例中,上述定位程序代码中bug的方法还可包括:以上述第一逻辑代码子段中的探测标记变量的变量名为键值,利用链表存储上述第一逻辑代码子段中的探测标记变量和上述bug定位信息。可以理解,以上述探测标记变量的变量名为键值,利用链表存储上述第一逻辑代码子段中的探测标记变量和上述bug定位信息,有利于后续更简易更快捷的索引到上述bug定位信息。
可以看出,本实施例方案中,由于在不同逻辑代码子段操作状态机的过程中对状态机的探测标记变量进行相应赋值,这就相当于在状态机上打上了当前操作该状态机的逻辑代码子段的跟踪标记,将逻辑代码子段所对应的逻辑标识变量的取值,赋给该逻辑代码子段所操作的状态机的探测标记变量,而利用异常退出时所对应的最顶层上下文,能够确定出异常退出时被操作的状态机和该状态机的探测标记变量当前取值,而状态机的探测标记变量当前取值与操作该状态机的逻辑代码子段所对应的逻辑标识变量的取值之间具有映射关系,因此根据确定出异常退出时被操作的状态机的探测标记变量当前取值,就能够比较快速精确的定位到异常退出时操作状态机的逻辑代码子段,进而有利于定位出的从很可能存在bug的逻辑代码子段中快速定位bug。可见,上述技术方案有利于提高定位程序代码中bug的效率和精确度。
请参见图3,图3是本发明另一个实施例提供的另一种定位程序代码中bug的方法的流程示意图。假设程序代码段包括五个逻辑代码子段(即逻辑代码子段A1、逻辑代码子段A2、逻辑代码子段A3、逻辑代码子段A4和逻辑代码子段A5),并且,每个逻辑代码子段所操作的状态机是相同的。其中,如图3所示,本发明另一个实施例提供的另一种定位程序代码中bug的方法可包括以下内容:
301、在程序代码段中的每个逻辑代码子段(即逻辑代码子段A1、逻辑代码子段A2、逻辑代码子段A3、逻辑代码子段A4和逻辑代码子段A5)操作状态机的过程中(例如可在程序代码段中的逻辑代码子段对状态机进行切入操作之前、同时或进行切出操作之前),调用上述逻辑代码子段中的探测标记变量赋值语句,将上述逻辑代码子段所对应的逻辑标识变量的取值进行预设数学变换而得到的变换值,赋给上述逻辑代码子段所操作的状态机的探测标记变量。
其中,程序代码段中的不同逻辑代码子段所对应的逻辑标识变量的取值进行预设数学变换而得到的变换值互不相同。其中,逻辑代码子段为程序代码段中能够对状态机进行一次切入和切出操作的最小代码粒度。上述程序代码段中可能包括几个、几十个、几百个甚至几千几万或更多个逻辑代码子段。
其中,将上述逻辑代码子段所对应的逻辑标识变量的取值进行预设数学变换而得到的变换值例如可以是,将上述逻辑代码子段所对应的逻辑标识变量的取值加上或减去或乘以或除以某预设值而得到变换值,上述预设数学变换也可以是其它数学变换,只要能够根据变换值反推出上述逻辑代码子段所对应的逻辑标识变量的取值即可。
302、获取上述程序代码段中的逻辑代码子段操作状态机过程中异常退出而产生的core文件。
可以理解的是,例如在逻辑代码子段A1、逻辑代码子段A2、逻辑代码子段A3、逻辑代码子段A4或逻辑代码子段A5操作状态机的过程中均可能产生异常退出。逻辑代码子段A1、逻辑代码子段A2、逻辑代码子段A3、逻辑代码子段A4和逻辑代码子段A5中的每个逻辑代码子段所操作的状态机可能相同或部分相同或互不相同。本实施例中以各逻辑代码子段所操作的状态机全部相同为例。
303、解析上述core文件以得到上述程序代码段中的逻辑代码子段操作状态机过程中异常退出时所对应的最顶层上下文。
304、获取在上述最顶层上下文所对应的堆栈环境之中被操作的状态机的探测标记变量的当前取值。
其中,由于本实施例中以各逻辑代码子段所操作的状态机全部相同为例记性说明,因此,任何时候获取到的最顶层上下文所对应的堆栈环境之中被操作的状态机都是确定的,但是,在不同时刻由于操作状态机的逻辑代码子段可能不同,因此状态机中的探测标记变量的当前取值在不同时刻可能不同,因此可以根据状态机中的探测标记变量的当前取值,确定出异常退出时是哪个逻辑代码子段在操作状态机。异常退出时状态机中的探测标记变量的当前取值,等于异常退出时操作状态机的逻辑代码子段所对应的逻辑标识变量的取值进行预设数学变换而得到的变换值。
305、利用获取的上述被操作的状态机的探测标记变量的当前取值,查找出上述程序代码段中的第一逻辑代码子段(其中,第一逻辑代码子段可能为逻辑代码子段A1、逻辑代码子段A2、逻辑代码子段A3、逻辑代码子段A4和逻辑代码子段A5中的任意一个),其中,上述第一逻辑代码子段所对应的逻辑标识变量的取值进行预设数学变换而得到的变换值,等于上述获取的上述被操作的状态机的探测标记变量的当前取值。
在本发明的一些实施例中,上述利用获取的上述被操作的状态机的探测标记变量的当前取值,查找出上述程序代码段中的第一逻辑代码子段包括:打印出上述程序代码段中的所有逻辑标识变量的取值进行预设数学变换而得到的变换值;从打印出的上述程序代码段中的所有逻辑标识变量的取值进行预设数学变换而得到的变换值中,捕获到第一逻辑标识变量的取值进行预设数学变换而得到的变换值,其中,上述第一逻辑标识变量的取值进行预设数学变换而得到的变换值,等于上述获取的上述被操作的状态机的探测标记变量的当前取值;从上述程序代码段中查找出上述第一逻辑标识变量所对应的第一逻辑代码子段。
306、输出上述程序代码段的bug定位信息,其中,上述bug定位信息包括上述第一逻辑代码子段中的至少一个语句。
在本发明的一些实施例中,上述bug定位信息还可包括:上述第一逻辑代码子段中的探测标记变量赋值语句的行号、上述第一逻辑代码子段中的探测标记变量赋值语句所属函数的函数名、和/或上述第一逻辑代码子段中的探测标记变量赋值语句所属源文件的文件名。当然,上述bug定位信息还可包括其它利于进行bug定位的信息。
举例来说,假设第一逻辑代码子段为逻辑代码子段A3,则输出的上述程序代码段的bug定位信息可包括:逻辑代码子段A3中的至少一个语句,还可包括逻辑代码子段A3中的探测标记变量赋值语句或其它语句的行号、上述逻辑代码子段A3中的探测标记变量赋值语句或其它语句所属函数的函数名和/或上述逻辑代码子段A3中的探测标记变量赋值语句或其它语句所属源文件的文件名。当然,上述bug定位信息还可包括与逻辑代码子段A3相关的其它利于进行bug定位的信息。
在本发明一些实施例中,上述定位程序代码中bug的方法还可包括:以上述第一逻辑代码子段中的探测标记变量的变量名为键值,利用链表存储上述第一逻辑代码子段中的探测标记变量和上述bug定位信息。可以理解,以上述探测标记变量的变量名为键值,利用链表存储上述第一逻辑代码子段中的探测标记变量和上述bug定位信息,有利于后续更简易更快捷的索引到上述bug定位信息。
可以看出,本实施例的技术方案中,由于在不同逻辑代码子段操作状态机的过程中对状态机的探测标记变量进行相应赋值,这就相当于在状态机上打上了当前操作该状态机的逻辑代码子段的跟踪标记,将逻辑代码子段所对应的逻辑标识变量的取值进行预设数学变换而得到的变换值,赋给该逻辑代码子段所操作的状态机的探测标记变量,而利用异常退出时所对应的最顶层上下文,能够确定出异常退出时被操作的状态机和该状态机的探测标记变量当前取值,而状态机的探测标记变量当前取值与操作该状态机的逻辑代码子段所对应的逻辑标识变量的取值之间具有映射关系,因此,根据确定出异常退出时被操作的状态机的探测标记变量当前取值,就能够比较快速精确的定位到异常退出时操作状态机的逻辑代码子段,进而有利于从定位出的很可能存在bug的逻辑代码子段中快速定位bug。可见,上述技术方案有利于提高定位程序代码中bug的效率和精确度。
请参见图4,图4是本发明另一个实施例提供的另一种定位程序代码中bug的方法的流程示意图。假设程序代码段包括五个逻辑代码子段(即逻辑代码子段A1、逻辑代码子段A2、逻辑代码子段A3、逻辑代码子段A4和逻辑代码子段A5),并且每个逻辑代码子段所操作的状态机部分相同或互不相同。如图4所示,本发明另一个实施例提供的另一种定位程序代码中bug的方法可包括以下内容:
401、在程序代码段中的每个逻辑代码子段(即逻辑代码子段A1、逻辑代码子段A2、逻辑代码子段A3、逻辑代码子段A4和逻辑代码子段A5)操作状态机的过程中(例如可在程序代码段中的逻辑代码子段对状态机进行切入操作之前、同时或进行切出操作之前),调用上述逻辑代码子段中的探测标记变量赋值语句,将上述逻辑代码子段所对应的逻辑标识变量的取值,赋给上述逻辑代码子段所操作的状态机的探测标记变量。
其中,程序代码段中的不同逻辑代码子段所对应的逻辑标识变量的取值互不相同。其中,逻辑代码子段为程序代码段中能够对状态机进行一次切入和切出操作的最小代码粒度。上述程序代码段中可能包括几个、几十个、几百个甚至几千几万或更多个逻辑代码子段。
402、获取上述程序代码段中的逻辑代码子段操作状态机过程中异常退出而产生的core文件。
可以理解的是,例如在逻辑代码子段A1、逻辑代码子段A2、逻辑代码子段A3、逻辑代码子段A4或逻辑代码子段A5操作状态机的过程中均可能产生异常退出。逻辑代码子段A1、逻辑代码子段A2、逻辑代码子段A3、逻辑代码子段A4和逻辑代码子段A5中的每个逻辑代码子段所操作的状态机可能相同或部分相同或互不相同。本实施例中以各逻辑代码子段所操作的状态机部分相同或互不相同为例。
403、解析上述core文件以得到上述程序代码段中的逻辑代码子段操作状态机过程中异常退出时所对应的最顶层上下文。
404、获取在上述最顶层上下文所对应的堆栈环境之中被操作的状态机的探测标记变量的当前取值。
其中,由于本实施例中以各逻辑代码子段所操作的状态机部分相同或互不相同为例记性说明。因此,任何时候获取到的最顶层上下文所对应的堆栈环境之中被操作的状态机可能是不确定的,在不同时刻由于操作状态机的逻辑代码子段可能不同,因此,异常退出时被操作的状态机中的探测标记变量的当前取值在不同时刻可能不同,因此可根据异常退出时被操作的状态机中的探测标记变量的当前取值,确定出异常退出时是哪个逻辑代码子段在操作状态机。异常退出时状态机中的探测标记变量的当前取值,等于异常退出时操作该状态机的逻辑代码子段所对应的逻辑标识变量的取值。
405、利用获取的上述被操作的状态机的探测标记变量的当前取值,查找出上述程序代码段中的第一逻辑代码子段(其中,第一逻辑代码子段可能为逻辑代码子段A1、逻辑代码子段A2、逻辑代码子段A3、逻辑代码子段A4和逻辑代码子段A5中的任意一个),其中,上述第一逻辑代码子段所对应的逻辑标识变量的取值,等于上述获取的上述被操作的状态机的探测标记变量的当前取值。
在本发明一些实施例中,上述利用获取的上述被操作的状态机的探测标记变量的当前取值,查找出上述程序代码段中的第一逻辑代码子段,包括:打印出上述程序代码段中的所有逻辑标识变量的取值;从打印出的上述程序代码段中的所有逻辑标识变量的取值中捕获到第逻辑标识变量的取值,其中,上述第一逻辑标识变量的取值等于上述获取的上述被操作的状态机的探测标记变量的当前取值;从上述程序代码段中查找出上述第一逻辑标识变量对应的第一逻辑代码子段。
406、输出上述程序代码段的bug定位信息,其中,上述bug定位信息包括上述第一逻辑代码子段中的至少一个语句。
在本发明的一些实施例中,上述bug定位信息还可包括:上述第一逻辑代码子段中的探测标记变量赋值语句的行号、上述第一逻辑代码子段中的探测标记变量赋值语句所属函数的函数名、和/或上述第一逻辑代码子段中的探测标记变量赋值语句所属源文件的文件名。当然,上述bug定位信息还可包括其它利于进行bug定位的信息。
举例来说,假设第一逻辑代码子段为逻辑代码子段A3,则输出的上述程序代码段的bug定位信息可包括:逻辑代码子段A3中的至少一个语句,还可包括逻辑代码子段A3中的探测标记变量赋值语句或其它语句的行号、上述逻辑代码子段A3中的探测标记变量赋值语句或其它语句所属函数的函数名和/或上述逻辑代码子段A3中的探测标记变量赋值语句或其它语句所属源文件的文件名。当然,上述bug定位信息还可包括与逻辑代码子段A3相关的其它利于进行bug定位的信息。
在本发明一些实施例中,上述定位程序代码中bug的方法还可包括:以上述第一逻辑代码子段中的探测标记变量的变量名为键值,利用链表存储上述第一逻辑代码子段中的探测标记变量和上述bug定位信息。可以理解,以上述探测标记变量的变量名为键值,利用链表存储上述第一逻辑代码子段中的探测标记变量和上述bug定位信息,有利于后续更简易更快捷的索引到上述bug定位信息。
可以看出,本实施例方案中,由于在不同逻辑代码子段操作状态机的过程中对状态机的探测标记变量进行相应赋值,这就相当于在状态机上打上了当前操作该状态机的逻辑代码子段的跟踪标记,将逻辑代码子段所对应的逻辑标识变量的取值,赋给该逻辑代码子段所操作的状态机的探测标记变量,而利用异常退出时所对应的最顶层上下文,能够确定出异常退出时被操作的状态机和该状态机的探测标记变量当前取值,而状态机的探测标记变量当前取值与操作该状态机的逻辑代码子段所对应的逻辑标识变量的取值之间具有映射关系,因此根据确定出异常退出时被操作的状态机的探测标记变量当前取值,就能够比较快速精确的定位到异常退出时操作状态机的逻辑代码子段,进而有利于定位出的从很可能存在bug的逻辑代码子段中快速定位bug。可见,上述技术方案有利于提高定位程序代码中bug的效率和精确度。
请参见图5,图5是本发明另一个实施例提供的另一种定位程序代码中bug的方法的流程示意图。假设程序代码段包括五个逻辑代码子段(即逻辑代码子段A1、逻辑代码子段A2、逻辑代码子段A3、逻辑代码子段A4和逻辑代码子段A5),并且每个逻辑代码子段所操作的状态机部分相同或互不相同。如图5所示,本发明另一个实施例提供的另一种定位程序代码中bug的方法可包括以下内容:
501、在程序代码段中的每个逻辑代码子段(即逻辑代码子段A1、逻辑代码子段A2、逻辑代码子段A3、逻辑代码子段A4和逻辑代码子段A5)操作状态机的过程中(例如可在程序代码段中的逻辑代码子段对状态机进行切入操作之前、同时或进行切出操作之前),调用上述逻辑代码子段中的探测标记变量赋值语句,将上述逻辑代码子段所对应的逻辑标识变量的取值进行预设数学变换而得到的变换值,赋给上述逻辑代码子段所操作的状态机的探测标记变量。
其中,程序代码段中的不同逻辑代码子段所对应的逻辑标识变量的取值进行预设数学变换而得到的变换值互不相同。其中,逻辑代码子段为程序代码段中能够对状态机进行一次切入和切出操作的最小代码粒度。上述程序代码段中可能包括几个、几十个、几百个甚至几千几万或更多个逻辑代码子段。
其中,将上述逻辑代码子段所对应的逻辑标识变量的取值进行预设数学变换而得到的变换值例如可以是,将上述逻辑代码子段所对应的逻辑标识变量的取值加上或减去或乘以或除以某预设值而得到变换值,上述预设数学变换也可以是其它数学变换,只要能够根据变换值反推出上述逻辑代码子段所对应的逻辑标识变量的取值即可。
502、获取上述程序代码段中的逻辑代码子段操作状态机过程中异常退出而产生的core文件。
可以理解的是,例如在逻辑代码子段A1、逻辑代码子段A2、逻辑代码子段A3、逻辑代码子段A4或逻辑代码子段A5操作状态机的过程中均可能产生异常退出。逻辑代码子段A1、逻辑代码子段A2、逻辑代码子段A3、逻辑代码子段A4和逻辑代码子段A5中的每个逻辑代码子段所操作的状态机可能相同或部分相同或互不相同。本实施例中以各逻辑代码子段所操作的状态机全部相同为例。
503、解析上述core文件以得到上述程序代码段中的逻辑代码子段操作状态机过程中异常退出时所对应的最顶层上下文。
504、获取在上述最顶层上下文所对应的堆栈环境之中被操作的状态机的探测标记变量的当前取值。
其中,由于本实施例中以各逻辑代码子段所操作的状态机部分相同或互不相同为例记性说明。因此,任何时候获取到的最顶层上下文所对应的堆栈环境之中被操作的状态机可能是不确定的,在不同时刻由于操作状态机的逻辑代码子段可能不同,因此,异常退出时被操作的状态机中的探测标记变量的当前取值在不同时刻可能不同,因此可根据异常退出时被操作的状态机中的探测标记变量的当前取值,确定出异常退出时是哪个逻辑代码子段在操作状态机。异常退出时状态机中的探测标记变量的当前取值,等于异常退出时操作该状态机的逻辑代码子段所对应的逻辑标识变量的取值进行预设数学变换而得到的变换值。
505、利用获取的上述被操作的状态机的探测标记变量的当前取值,查找出上述程序代码段中的第一逻辑代码子段(其中,第一逻辑代码子段可能为逻辑代码子段A1、逻辑代码子段A2、逻辑代码子段A3、逻辑代码子段A4和逻辑代码子段A5中的任意一个),其中,上述第一逻辑代码子段所对应的逻辑标识变量的取值进行预设数学变换而得到的变换值,等于上述获取的上述被操作的状态机的探测标记变量的当前取值。
在本发明的一些实施例中,上述利用获取的上述被操作的状态机的探测标记变量的当前取值,查找出上述程序代码段中的第一逻辑代码子段包括:打印出上述程序代码段中的所有逻辑标识变量的取值进行预设数学变换而得到的变换值;从打印出的上述程序代码段中的所有逻辑标识变量的取值进行预设数学变换而得到的变换值中,捕获到第一逻辑标识变量的取值进行预设数学变换而得到的变换值,其中,上述第一逻辑标识变量的取值进行预设数学变换而得到的变换值,等于上述获取的上述被操作的状态机的探测标记变量的当前取值;从上述程序代码段中查找出上述第一逻辑标识变量所对应的第一逻辑代码子段。
506、输出上述程序代码段的bug定位信息,其中,上述bug定位信息包括上述第一逻辑代码子段中的至少一个语句。
在本发明的一些实施例中,上述bug定位信息还可包括:上述第一逻辑代码子段中的探测标记变量赋值语句的行号、上述第一逻辑代码子段中的探测标记变量赋值语句所属函数的函数名、和/或上述第一逻辑代码子段中的探测标记变量赋值语句所属源文件的文件名。当然,上述bug定位信息还可包括其它利于进行bug定位的信息。
举例来说,假设第一逻辑代码子段为逻辑代码子段A3,则输出的上述程序代码段的bug定位信息可包括:逻辑代码子段A3中的至少一个语句,还可包括逻辑代码子段A3中的探测标记变量赋值语句或其它语句的行号、上述逻辑代码子段A3中的探测标记变量赋值语句或其它语句所属函数的函数名和/或上述逻辑代码子段A3中的探测标记变量赋值语句或其它语句所属源文件的文件名。当然,上述bug定位信息还可包括与逻辑代码子段A3相关的其它利于进行bug定位的信息。
在本发明一些实施例中,上述定位程序代码中bug的方法还可包括:以上述第一逻辑代码子段中的探测标记变量的变量名为键值,利用链表存储上述第一逻辑代码子段中的探测标记变量和上述bug定位信息。可以理解,以上述探测标记变量的变量名为键值,利用链表存储上述第一逻辑代码子段中的探测标记变量和上述bug定位信息,有利于后续更简易更快捷的索引到上述bug定位信息。
可以看出,本实施例的技术方案中,由于在不同逻辑代码子段操作状态机的过程中对状态机的探测标记变量进行相应赋值,这就相当于在状态机上打上了当前操作该状态机的逻辑代码子段的跟踪标记,将逻辑代码子段所对应的逻辑标识变量的取值进行预设数学变换而得到的变换值,赋给该逻辑代码子段所操作的状态机的探测标记变量,而利用异常退出时所对应的最顶层上下文,能够确定出异常退出时被操作的状态机和该状态机的探测标记变量当前取值,而状态机的探测标记变量当前取值与操作该状态机的逻辑代码子段所对应的逻辑标识变量的取值之间具有映射关系,因此,根据确定出异常退出时被操作的状态机的探测标记变量当前取值,就能够比较快速精确的定位到异常退出时操作状态机的逻辑代码子段,进而有利于定位出的从很可能存在bug的逻辑代码子段中快速定位bug。可见,上述技术方案有利于提高定位程序代码中bug的效率和精确度。
为便于更好的实施本发明实施例的上述方法,下面还提供用于实施上述方案的相关装置。
参见图6-a,本发明实施例提供一种定位程序代码中bug的装置600,可以包括:赋值单元610、获取单元620、查找单元630和输出单元640。
其中,赋值单元610,用于在程序代码段中的逻辑代码子段操作状态机的过程中(例如可在程序代码段中的逻辑代码子段对状态机进行切入操作之前、同时或进行切出操作之前),将上述逻辑代码子段所对应的逻辑标识变量的取值,赋给上述逻辑代码子段所操作的状态机的探测标记变量,或者,将上述逻辑代码子段所对应的逻辑标识变量的取值进行预设数学变换而得到的变换值,赋给上述逻辑代码子段所操作的状态机的探测标记变量。
其中,将上述逻辑代码子段所对应的逻辑标识变量的取值进行预设数学变换而得到的变换值例如可以是,将上述逻辑代码子段所对应的逻辑标识变量的取值加上或减去或乘以或除以某预设值而得到变换值,上述预设数学变换也可以是其它数学变换,只要能够根据变换值反推出上述逻辑代码子段所对应的逻辑标识变量的取值即可。
其中,程序代码段中的不同逻辑代码子段所对应的逻辑标识变量的取值互不相同,或者程序代码段中的不同逻辑代码子段所对应的逻辑标识变量的取值行预设数学变换而得到的变换值互不相同。
其中,逻辑代码子段为程序代码段中能够对状态机进行一次切入和切出操作的最小代码粒度。上述程序代码段中可能包括几个、几十个、几百个甚至几千几万或更多个逻辑代码子段。
获取单元620,用于获取上述程序代码段中的逻辑代码子段操作状态机过程中异常退出时所对应的最顶层上下文;获取在上述最顶层上下文所对应的堆栈环境之中被操作的状态机的探测标记变量的当前取值。
查找单元630,用于利用上述获取单元620获取的上述被操作的状态机的探测标记变量的当前取值,查找出上述程序代码段中的第一逻辑代码子段,其中,上述第一逻辑代码子段所对应的逻辑标识变量的取值或上述第一逻辑代码子段所对应的逻辑标识变量的取值进行预设数学变换而得到的变换值,等于上述获取的上述被操作的状态机的探测标记变量的当前取值;
输出单元640,用于输出上述程序代码段的bug定位信息,其中,上述bug定位信息包括查找单元630查找出的第一逻辑代码子段中的至少一个语句。
在本发明的一些实施例中,赋值单元610具体用于,在程序代码段中的逻辑代码子段操作状态机的过程中,调用所述逻辑代码子段中的探测标记变量赋值语句,将所述逻辑代码子段所对应的逻辑标识变量的取值,赋给所述逻辑代码子段所操作的状态机的探测标记变量,或者,将所述逻辑代码子段所对应的逻辑标识变量的取值进行预设数学变换而得到的变换值,赋给所述逻辑代码子段所操作的状态机的探测标记变量。
在本发明的一些实施例中,上述bug定位信息还可包括:上述第一逻辑代码子段中的探测标记变量赋值语句和/或其它语句的行号、上述第一逻辑代码子段中的探测标记变量赋值语句和/或其它语句所属函数的函数名、和/或上述第一逻辑代码子段中的探测标记变量赋值语句和/或其它语句所属源文件的文件名。当然,上述bug定位信息还可包括其它利于进行bug定位的信息。
参见图6-b,在本发明一些实施例中,定位程序代码中bug的装置600还可包括:存储单元650,用于以上述第一逻辑代码子段中的探测标记变量的变量名为键值,利用链表存储上述第一逻辑代码子段中的探测标记变量和上述bug定位信息。
在本发明一些实施例中,在获取上述程序代码段中的逻辑代码子段操作状态机过程中异常退出时所对应的最顶层上下文的方面,上述获取单元620具体用于,获取上述程序代码段中的逻辑代码子段操作状态机过程中异常退出而产生的core文件,解析上述core文件以得到上述程序代码段中的逻辑代码子段操作状态机过程中异常退出时所对应的最顶层上下文。
在本发明一些实施例中,在上述利用获取的上述被操作的状态机的探测标记变量的当前取值,查找出上述程序代码段中的第一逻辑代码子段的方面,上述查找单元630具体用于打印出上述程序代码段中的所有逻辑标识变量的取值;从打印出的上述程序代码段中的所有逻辑标识变量的取值中捕获到第一逻辑标识变量的取值,其中,上述第一逻辑标识变量的取值等于上述获取的上述被操作的状态机的探测标记变量的当前取值;从上述程序代码段中查找出上述第一逻辑标识变量对应的第一逻辑代码子段。
其中,在本发明的另一些实施例中,在上述利用获取的上述被操作的状态机的探测标记变量的当前取值,查找出上述程序代码段中的第一逻辑代码子段的方面,上述查找单元630可具体用于,打印出上述程序代码段中的所有逻辑标识变量的取值进行预设数学变换而得到的变换值;从打印出的上述程序代码段中的所有逻辑标识变量的取值进行预设数学变换而得到的变换值中,捕获到第一逻辑标识变量的取值进行预设数学变换而得到的变换值,其中,上述第一逻辑标识变量的取值进行预设数学变换而得到的变换值,等于上述获取的上述被操作的状态机的探测标记变量的当前取值;从上述程序代码段中查找出上述第一逻辑标识变量所对应的第一逻辑代码子段。
可以理解的是,本实施例的装置的各功能模块的功能可根据上述方法实施例中的方法具体实现,其具体实现过程可以参照上述方法实施例的相关描述,此处不再赘述。
可以看出,本实施例技术方案中,定位程序代码中bug的装置600在程序代码段中的逻辑代码子段操作状态机的过程中,将上述逻辑代码子段所对应的逻辑标识变量的取值,赋给上述逻辑代码子段所操作的状态机的探测标记变量,或将上述逻辑代码子段所对应的逻辑标识变量的取值进行预设数学变换而得到的变换值,赋给上述逻辑代码子段所操作的状态机的探测标记变量;获取上述程序代码段中的逻辑代码子段操作状态机过程中异常退出时所对应的最顶层上下文;获取在上述最顶层上下文所对应的堆栈环境之中被操作的状态机的探测标记变量的当前取值;利用获取的上述被操作的状态机的探测标记变量的当前取值,查找出上述程序代码段中的第一逻辑代码子段;输出上述程序代码段的bug定位信息,上述bug定位信息包括上述第一逻辑代码子段中的至少一个语句。由于在不同逻辑代码子段操作状态机的过程中对状态机的探测标记变量进行相应赋值,这就相当于在状态机上打上了当前操作该状态机的逻辑代码子段的跟踪标记,利用异常退出时所对应的最顶层上下文,能够确定出异常退出时被操作的状态机和该状态机的探测标记变量当前取值,而状态机的探测标记变量当前取值与操作该状态机的逻辑代码子段所对应的逻辑标识变量的取值之间具有映射关系,因此,根据确定出异常退出时被操作的状态机的探测标记变量当前取值,就能够比较精确的定位到异常退出时操作状态机的逻辑代码子段,进而有利于从定位出的很可能存在bug的逻辑代码子段中快速定位bug。可见,上述技术方案有利于提高定位程序代码中bug的效率和精确度。
参见图7,图7是本发明另一实施例提供的计算节点700的结构框图。
其中,计算节点700可以包括:至少一个处理器701,至少一个网络接口704或者其他用户接口703,存储器705,至少一个通信总线702。通信总线702用于实现这些组件之间的连接通信。其中,该计算节点700可选的包含用户接口703,包括:显示器(例如,触摸屏、LCD、CRT、全息成像(Holographic)或者投影(Projector)等)、点击设备(例如,鼠标,轨迹球(trackball)触感板或触摸屏等)、摄像头和/或拾音装置等。
其中,存储器702可以包括只读存储器和随机存取存储器,并向处理器701提供指令和数据。存储器702中的一部分还可以包括非易失性随机存取存储器(NVRAM)。
在一些实施方式中,存储器705存储了如下的元素,可执行模块或者数据结构,或者他们的子集,或者他们的扩展集:
操作系统7051,包含各种系统程序,用于实现各种基础业务以及处理基于硬件的任务;
应用程序模块7052,包含各种应用程序,用于实现各种应用业务。
应用程序模块7052中包括但不限于赋值单元610、获取单元620、存储单元650、查找单元630和/或输出单元640等。
在本发明实施例中,通过调用存储器705存储的程序或指令,处理器701在程序代码段中的逻辑代码子段操作状态机的过程中(例如可在程序代码段中的逻辑代码子段对状态机进行切入操作之前、同时或进行切出操作之前),将上述逻辑代码子段所对应的逻辑标识变量的取值,赋给上述逻辑代码子段所操作的状态机的探测标记变量,或者,将上述逻辑代码子段所对应的逻辑标识变量的取值进行预设数学变换而得到的变换值,赋给上述逻辑代码子段所操作的状态机的探测标记变量;获取上述程序代码段中的逻辑代码子段操作状态机过程中异常退出时所对应的最顶层上下文;获取在上述最顶层上下文所对应的堆栈环境之中被操作的状态机的探测标记变量的当前取值;利用获取的上述被操作的状态机的探测标记变量的当前取值,查找出上述程序代码段中的第一逻辑代码子段,其中,上述第一逻辑代码子段所对应的逻辑标识变量的取值或上述第一逻辑代码子段所对应的逻辑标识变量的取值进行预设数学变换而得到的变换值,等于上述获取的上述被操作的状态机的探测标记变量的当前取值;输出上述程序代码段的bug定位信息,其中,上述bug定位信息包括上述第一逻辑代码子段中的至少一个语句。
其中,将上述逻辑代码子段所对应的逻辑标识变量的取值进行预设数学变换而得到的变换值例如可以是,将上述逻辑代码子段所对应的逻辑标识变量的取值加上或减去或乘以或除以某预设值而得到变换值,上述预设数学变换也可以是其它数学变换,只要能够根据变换值反推出上述逻辑代码子段所对应的逻辑标识变量的取值即可。
其中,程序代码段中的不同逻辑代码子段所对应的逻辑标识变量的取值互不相同,或者程序代码段中的不同逻辑代码子段所对应的逻辑标识变量的取值行预设数学变换而得到的变换值互不相同。
其中,逻辑代码子段为程序代码段中能够对状态机进行一次切入和切出操作的最小代码粒度。上述程序代码段中可能包括几个、几十个、几百个甚至几千几万或更多个逻辑代码子段。
在本发明一些实施例中,在上述在程序代码段中的逻辑代码子段操作状态机的过程中,将上述逻辑代码子段所对应的逻辑标识变量的取值,赋给上述逻辑代码子段所操作的状态机的探测标记变量,或者,将上述逻辑代码子段所对应的逻辑标识变量的取值进行预设数学变换而得到的变换值,赋给上述逻辑代码子段所操作的状态机的探测标记变量的方面,处理器701可具体用于在程序代码段中的逻辑代码子段操作状态机的过程中,调用上述逻辑代码子段中的探测标记变量赋值语句,将上述逻辑代码子段所对应的逻辑标识变量的取值,赋给上述逻辑代码子段所操作的状态机的探测标记变量,或者,将上述逻辑代码子段所对应的逻辑标识变量的取值进行预设数学变换而得到的变换值,赋给上述逻辑代码子段所操作的状态机的探测标记变量。
在本发明另一些实施例中,在上述在程序代码段中的逻辑代码子段操作状态机的过程中,将上述逻辑代码子段所对应的逻辑标识变量的取值,赋给上述逻辑代码子段所操作的状态机的探测标记变量,或者,将上述逻辑代码子段所对应的逻辑标识变量的取值进行预设数学变换而得到的变换值,赋给上述逻辑代码子段所操作的状态机的探测标记变量的方面,处理器701可具体用于在程序代码段中的逻辑代码子段操作状态机的过程中,调用第三方工具或代码调试工具(例如gdb调试工具等)中的探测标记变量赋值语句,将上述逻辑代码子段所对应的逻辑标识变量的取值,赋给上述逻辑代码子段所操作的状态机的探测标记变量,或者将上述逻辑代码子段所对应的逻辑标识变量的取值进行预设数学变换而得到的变换值,赋给上述逻辑代码子段所操作的状态机的探测标记变量。
在本发明的一些实施例中,上述bug定位信息还可包括:
上述第一逻辑代码子段中的探测标记变量赋值语句和/或其它语句的行号、上述第一逻辑代码子段中的探测标记变量赋值语句和/或其它语句所属函数的函数名、和/或上述第一逻辑代码子段中的探测标记变量赋值语句和/或其它语句所属源文件的文件名。当然,上述bug定位信息还可包括其它利于进行bug定位的信息。
在本发明一些实施例中,处理器701还可用于:以上述第一逻辑代码子段中的探测标记变量的变量名为键值,利用链表存储上述第一逻辑代码子段中的探测标记变量和上述bug定位信息。可以理解,以上述探测标记变量的变量名为键值,利用链表存储上述第一逻辑代码子段中的探测标记变量和上述bug定位信息,有利于后续更简易更快捷的索引到上述bug定位信息。
在本发明一些实施例中,在上述获取程序代码段中的逻辑代码子段操作状态机过程中异常退出时所对应的最顶层上下文的方面,处理器701可具体用于获取程序代码段中的逻辑代码子段操作状态机过程中异常退出而产生的core文件,解析上述core文件以得到程序代码段中的逻辑代码子段操作状态机过程中异常退出时所对应的最顶层上下文。
在本发明一些实施例中,在上述利用获取的上述被操作的状态机的探测标记变量的当前取值,查找出上述程序代码段中的第一逻辑代码子段的方面,处理器701可具体用于打印出上述程序代码段中的所有逻辑标识变量的取值;从打印出的上述程序代码段中的所有逻辑标识变量的取值中捕获到第一逻辑标识变量的取值,其中,上述第一逻辑标识变量的取值,等于上述获取的上述被操作的状态机的探测标记变量的当前取值;从上述程序代码段中查找出上述第一逻辑标识变量对应的第一逻辑代码子段。
在本发明的另一些实施例中,在上述利用获取的上述被操作的状态机的探测标记变量的当前取值,查找出上述程序代码段中的第一逻辑代码子段的方面,处理器701可具体用于,打印出上述程序代码段中的所有逻辑标识变量的取值进行预设数学变换而得到的变换值;从打印出的上述程序代码段中的所有逻辑标识变量的取值进行预设数学变换而得到的变换值中,捕获到第一逻辑标识变量的取值进行预设数学变换而得到的变换值,其中,上述第一逻辑标识变量的取值进行预设数学变换而得到的变换值,等于上述获取的上述被操作的状态机的探测标记变量的当前取值;从上述程序代码段中查找出上述第一逻辑标识变量所对应的第一逻辑代码子段。
可以理解的是,本实施例的计算节点700的各功能模块的功能可根据上述方法实施例中的方法具体实现,其具体实现过程可以参照上述方法实施例的相关描述,此处不再赘述。
可以看出,本实施例方案中,计算节点700在程序代码段中的逻辑代码子段操作状态机的过程中,将上述逻辑代码子段所对应的逻辑标识变量的取值,赋给上述逻辑代码子段所操作的状态机的探测标记变量,或将上述逻辑代码子段所对应的逻辑标识变量的取值进行预设数学变换而得到的变换值,赋给上述逻辑代码子段所操作的状态机的探测标记变量;获取上述程序代码段中的逻辑代码子段操作状态机过程中异常退出时所对应的最顶层上下文;获取在上述最顶层上下文所对应的堆栈环境之中被操作的状态机的探测标记变量的当前取值;利用获取的上述被操作的状态机的探测标记变量的当前取值,查找出上述程序代码段中的第一逻辑代码子段;输出上述程序代码段的bug定位信息,上述bug定位信息包括上述第一逻辑代码子段中的至少一个语句。由于在不同逻辑代码子段操作状态机的过程中对状态机的探测标记变量进行相应赋值,这就相当于在状态机上打上了当前操作该状态机的逻辑代码子段的跟踪标记,利用异常退出时所对应的最顶层上下文,能够确定出异常退出时被操作的状态机和该状态机的探测标记变量当前取值,而状态机的探测标记变量当前取值与操作该状态机的逻辑代码子段所对应的逻辑标识变量的取值之间具有映射关系,因此,根据确定出异常退出时被操作的状态机的探测标记变量当前取值,就能够比较精确的定位到异常退出时操作状态机的逻辑代码子段,进而有利于定位出的从很可能存在bug的逻辑代码子段中快速定位bug。可见,上述技术方案有利于提高定位程序代码中bug的效率和精确度。
本发明实施例还提供一种计算机存储介质,其中,该计算机存储介质可存储有程序,该程序执行时包括上述方法实施例中记载的定位程序代码中bug的方法的部分或全部步骤。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置,可通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

Claims (14)

1.一种定位程序代码中bug的方法,其特征在于,包括:
在程序代码段中的至少一个逻辑代码子段操作状态机的过程中,将所述至少一个逻辑代码子段所对应的逻辑标识变量的取值,赋给所述至少一个逻辑代码子段所操作的状态机的探测标记变量,或者,将所述至少一个逻辑代码子段所对应的逻辑标识变量的取值进行预设数学变换而得到的变换值,赋给所述至少一个逻辑代码子段所操作的状态机的探测标记变量;
获取所述程序代码段中的至少一个逻辑代码子段操作状态机过程中异常退出时所对应的最顶层上下文;获取在所述最顶层上下文所对应的堆栈环境之中被操作的状态机的探测标记变量的当前取值;
利用获取的所述被操作的状态机的探测标记变量的当前取值,查找出所述程序代码段中的第一逻辑代码子段,其中,所述第一逻辑代码子段所对应的逻辑标识变量的取值或所述第一逻辑代码子段所对应的逻辑标识变量的取值进行预设数学变换而得到的变换值,等于所述获取的所述被操作的状态机的探测标记变量的当前取值;
输出所述程序代码段的bug定位信息,其中,所述bug定位信息包括所述第一逻辑代码子段中的至少一个语句。
2.根据权利要求1所述的方法,其特征在于,
所述在程序代码段中的至少一个逻辑代码子段操作状态机的过程中,将所述至少一个逻辑代码子段所对应的逻辑标识变量的取值,赋给所述至少一个逻辑代码子段所操作的状态机的探测标记变量,或者,将所述至少一个逻辑代码子段所对应的逻辑标识变量的取值进行预设数学变换而得到的变换值,赋给所述至少一个逻辑代码子段所操作的状态机的探测标记变量,包括:
在程序代码段中的至少一个逻辑代码子段操作状态机的过程中,调用所述至少一个逻辑代码子段中的探测标记变量赋值语句,将所述至少一个逻辑代码子段所对应的逻辑标识变量的取值,赋给所述至少一个逻辑代码子段所操作的状态机的探测标记变量,或者,将所述至少一个逻辑代码子段所对应的逻辑标识变量的取值进行预设数学变换而得到的变换值,赋给所述至少一个逻辑代码子段所操作的状态机的探测标记变量。
3.根据权利要求2所述的方法,其特征在于,
所述bug定位信息还包括:所述第一逻辑代码子段中的探测标记变量赋值语句的行号、所述第一逻辑代码子段中的探测标记变量赋值语句所属函数的函数名、和/或所述第一逻辑代码子段中的探测标记变量赋值语句所属源文件的文件名。
4.根据权利要求3所述的方法,其特征在于,
所述方法还包括:以所述第一逻辑代码子段中的探测标记变量的变量名为键值,利用链表存储所述第一逻辑代码子段中的探测标记变量和所述bug定位信息。
5.根据权利要求1至4任一项所述的方法,其特征在于,
所述获取所述程序代码段中的至少一个逻辑代码子段操作状态机过程中异常退出时所对应的最顶层上下文,包括:
获取所述程序代码段中的至少一个逻辑代码子段操作状态机过程中异常退出而产生的core文件,解析所述core文件以得到所述程序代码段中的至少一个逻辑代码子段操作状态机过程中异常退出时所对应的最顶层上下文。
6.根据权利要求1至4任一项所述的方法,其特征在于,所述利用获取的所述被操作的状态机的探测标记变量的当前取值,查找出所述程序代码段中的第一逻辑代码子段,包括:打印出所述程序代码段中的所有逻辑标识变量的取值;从打印出的所述程序代码段中的所有逻辑标识变量的取值中捕获到第一逻辑标识变量的取值,其中,所述第一逻辑标识变量的取值等于所述获取的所述被操作的状态机的探测标记变量的当前取值;从所述程序代码段中查找出所述第一逻辑标识变量对应的第一逻辑代码子段。
7.根据权利要求1至4任一项所述的方法,其特征在于,所述利用获取的所述被操作的状态机的探测标记变量的当前取值,查找出所述程序代码段中的第一逻辑代码子段,包括:
打印出所述程序代码段中的所有逻辑标识变量的取值进行预设数学变换而得到的变换值;从打印出的所述程序代码段中的所有逻辑标识变量的取值进行预设数学变换而得到的变换值中,捕获到第一逻辑标识变量的取值进行预设数学变换而得到的变换值,其中,所述第一逻辑标识变量的取值进行预设数学变换而得到的变换值,等于所述获取的所述被操作的状态机的探测标记变量的当前取值;从所述程序代码段中查找出所述第一逻辑标识变量所对应的第一逻辑代码子段。
8.一种定位程序代码中bug的装置,其特征在于,包括:
赋值单元,用于在程序代码段中的至少一个逻辑代码子段操作状态机的过程中,将所述至少一个逻辑代码子段所对应的逻辑标识变量的取值,赋给所述至少一个逻辑代码子段所操作的状态机的探测标记变量,或者,将所述至少一个逻辑代码子段所对应的逻辑标识变量的取值进行预设数学变换而得到的变换值,赋给所述至少一个逻辑代码子段所操作的状态机的探测标记变量;
获取单元,用于获取所述程序代码段中的至少一个逻辑代码子段操作状态机过程中异常退出时所对应的最顶层上下文;获取在所述最顶层上下文所对应的堆栈环境之中被操作的状态机的探测标记变量的当前取值;
查找单元,用于利用所述获取单元获取的所述被操作的状态机的探测标记变量的当前取值,查找出所述程序代码段中的第一逻辑代码子段,其中,所述第一逻辑代码子段所对应的逻辑标识变量的取值或所述第一逻辑代码子段所对应的逻辑标识变量的取值进行预设数学变换而得到的变换值,等于所述获取的所述被操作的状态机的探测标记变量的当前取值;
输出单元,用于输出所述程序代码段的bug定位信息,其中,所述bug定位信息包括所述第一逻辑代码子段中的至少一个语句。
9.根据权利要求8所述的装置,其特征在于,
所述赋值单元具体用于,在程序代码段中的至少一个逻辑代码子段操作状态机的过程中,调用所述至少一个逻辑代码子段中的探测标记变量赋值语句,将所述至少一个逻辑代码子段所对应的逻辑标识变量的取值,赋给所述至少一个逻辑代码子段所操作的状态机的探测标记变量,或者,将所述至少一个逻辑代码子段所对应的逻辑标识变量的取值进行预设数学变换而得到的变换值,赋给所述至少一个逻辑代码子段所操作的状态机的探测标记变量。
10.根据权利要求9所述的装置,其特征在于,
所述bug定位信息还包括:所述第一逻辑代码子段中的探测标记变量赋值语句的行号、所述第一逻辑代码子段中的探测标记变量赋值语句所属函数的函数名、和/或所述第一逻辑代码子段中的探测标记变量赋值语句所属源文件的文件名。
11.根据权利要求10所述的装置,其特征在于,
所述装置还包括:存储单元,用于以所述第一逻辑代码子段中的探测标记变量的变量名为键值,利用链表存储所述第一逻辑代码子段中的探测标记变量和所述bug定位信息。
12.根据权利要求8至11任一项所述的装置,其特征在于,
在获取所述程序代码段中的至少一个逻辑代码子段操作状态机过程中异常退出时所对应的最顶层上下文的方面,所述获取单元具体用于,获取所述程序代码段中的至少一个逻辑代码子段操作状态机过程中异常退出而产生的core文件,解析所述core文件以得到所述程序代码段中的至少一个逻辑代码子段操作状态机过程中异常退出时所对应的最顶层上下文。
13.根据权利要求8至11任一项所述的装置,其特征在于,
在所述利用获取的所述被操作的状态机的探测标记变量的当前取值,查找出所述程序代码段中的第一逻辑代码子段的方面,所述查找单元具体用于打印出所述程序代码段中的所有逻辑标识变量的取值;从打印出的所述程序代码段中的所有逻辑标识变量的取值中捕获到第一逻辑标识变量的取值,其中,所述第一逻辑标识变量的取值等于所述获取的所述被操作的状态机的探测标记变量的当前取值;从所述程序代码段中查找出所述第一逻辑标识变量对应的第一逻辑代码子段。
14.根据权利要求8至11任一项所述的装置,其特征在于,
在所述利用获取的所述被操作的状态机的探测标记变量的当前取值,查找出所述程序代码段中的第一逻辑代码子段的方面,所述查找单元具体用于打印出所述程序代码段中的所有逻辑标识变量的取值进行预设数学变换而得到的变换值;从打印出的所述程序代码段中的所有逻辑标识变量的取值进行预设数学变换而得到的变换值中,捕获到第一逻辑标识变量的取值进行预设数学变换而得到的变换值,其中,所述第一逻辑标识变量的取值进行预设数学变换而得到的变换值,等于所述获取的所述被操作的状态机的探测标记变量的当前取值;从所述程序代码段中查找出所述第一逻辑标识变量所对应的第一逻辑代码子段。
CN201310704156.3A 2013-12-19 2013-12-19 定位程序代码中bug的方法及相关装置 Active CN104731696B (zh)

Priority Applications (3)

Application Number Priority Date Filing Date Title
CN201310704156.3A CN104731696B (zh) 2013-12-19 2013-12-19 定位程序代码中bug的方法及相关装置
PCT/CN2014/092951 WO2015090143A1 (en) 2013-12-19 2014-12-03 Method and apparatus for finding bugs in computer program codes
US15/182,463 US9772924B2 (en) 2013-12-19 2016-06-14 Method and apparatus for finding bugs in computer program codes

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201310704156.3A CN104731696B (zh) 2013-12-19 2013-12-19 定位程序代码中bug的方法及相关装置

Publications (2)

Publication Number Publication Date
CN104731696A CN104731696A (zh) 2015-06-24
CN104731696B true CN104731696B (zh) 2017-10-10

Family

ID=53402089

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310704156.3A Active CN104731696B (zh) 2013-12-19 2013-12-19 定位程序代码中bug的方法及相关装置

Country Status (3)

Country Link
US (1) US9772924B2 (zh)
CN (1) CN104731696B (zh)
WO (1) WO2015090143A1 (zh)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106339288B (zh) * 2016-06-06 2019-02-01 西北工业大学 一种软件故障上下文定位的方法及装置
CN106339315B (zh) * 2016-08-19 2019-03-22 东软集团股份有限公司 定位缺陷的方法及装置
CN108241577A (zh) * 2016-12-27 2018-07-03 百度在线网络技术(北京)有限公司 测试方法和装置
CN108132850B (zh) * 2017-12-22 2021-06-01 蚂蚁矿池科技有限公司 代码定位方法、装置及电子设备
CN108388510B (zh) * 2018-02-09 2021-09-24 福建升腾资讯有限公司 一种通过存储配置控制调试信息输出的方法及计算机设备
CN108304330B (zh) * 2018-02-26 2021-09-21 腾讯科技(深圳)有限公司 内容提取方法、装置和计算机设备
CN109213679A (zh) * 2018-07-25 2019-01-15 努比亚技术有限公司 一种故障反馈方法、移动终端及计算机可读存储介质
US11093241B2 (en) * 2018-10-05 2021-08-17 Red Hat, Inc. Outlier software component remediation
CN110502438B (zh) * 2019-07-31 2023-07-04 惠州市德赛西威汽车电子股份有限公司 一种Linux应用程序的调试方法
CN110866258B (zh) * 2019-10-12 2023-11-21 平安科技(深圳)有限公司 快速定位漏洞方法、电子装置及存储介质
CN114168478B (zh) * 2021-12-13 2024-05-28 东北大学 一种基于多图多标记学习的软件Bug检测方法

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1704908A (zh) * 2004-05-26 2005-12-07 华为技术有限公司 定位程序异常的方法
CN1776644A (zh) * 2005-12-09 2006-05-24 中兴通讯股份有限公司 一种基于有限状态机的对内存变量改写进行监控的方法

Family Cites Families (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5226126A (en) * 1989-02-24 1993-07-06 Nexgen Microsystems Processor having plurality of functional units for orderly retiring outstanding operations based upon its associated tags
US5533192A (en) * 1994-04-21 1996-07-02 Apple Computer, Inc. Computer program debugging system and method
US5978902A (en) * 1997-04-08 1999-11-02 Advanced Micro Devices, Inc. Debug interface including operating system access of a serial/parallel debug port
US6189140B1 (en) * 1997-04-08 2001-02-13 Advanced Micro Devices, Inc. Debug interface including logic generating handshake signals between a processor, an input/output port, and a trace logic
US6317638B1 (en) * 1997-08-22 2001-11-13 Honeywell Inc. Multi-layer state machine for a hybrid real-time control system and method of operation thereof
US6311327B1 (en) * 1998-03-02 2001-10-30 Applied Microsystems Corp. Method and apparatus for analyzing software in a language-independent manner
US7216257B2 (en) * 2004-01-21 2007-05-08 Sap Ag Remote debugging
US20050251794A1 (en) * 2004-04-16 2005-11-10 Taylor Jason A Method of debugging code and software debugging tool
US7627785B1 (en) * 2004-07-12 2009-12-01 Sun Microsystems, Inc. Capturing machine state of unstable Java program
US8127113B1 (en) * 2006-12-01 2012-02-28 Synopsys, Inc. Generating hardware accelerators and processor offloads
US9703678B2 (en) * 2008-12-23 2017-07-11 Microsoft Technology Licensing, Llc Debugging pipeline for debugging code
US20120017119A1 (en) * 2010-07-16 2012-01-19 Fujitsu Limited Solving Hybrid Constraints to Generate Test Cases for Validating a Software Module
US9141519B2 (en) * 2010-10-05 2015-09-22 Infinera Corporation Accurate identification of software tests based on changes to computer software code
KR20120072266A (ko) * 2010-12-23 2012-07-03 한국전자통신연구원 전역 네트워크 보안상황 제어 장치 및 방법
CN102073587B (zh) * 2010-12-27 2013-07-03 北京邮电大学 一种程序中不可达路径的静态检测方法
US20130239214A1 (en) * 2012-03-06 2013-09-12 Trusteer Ltd. Method for detecting and removing malware
US8959398B2 (en) * 2012-08-16 2015-02-17 Advanced Micro Devices, Inc. Multiple clock domain debug capability
US9110682B2 (en) * 2012-10-19 2015-08-18 Microsoft Technology Licensing Llc State machine control of a debugger
US20140282414A1 (en) * 2013-03-14 2014-09-18 Cadence Design Systems, Inc. Method and system for debugging of a program
KR101835250B1 (ko) * 2013-12-17 2018-03-06 인텔 코포레이션 트랜잭셔널 메모리를 사용한 비인가 메모리 수정 및 액세스의 검출

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1704908A (zh) * 2004-05-26 2005-12-07 华为技术有限公司 定位程序异常的方法
CN1776644A (zh) * 2005-12-09 2006-05-24 中兴通讯股份有限公司 一种基于有限状态机的对内存变量改写进行监控的方法

Also Published As

Publication number Publication date
US20160350202A1 (en) 2016-12-01
US9772924B2 (en) 2017-09-26
CN104731696A (zh) 2015-06-24
WO2015090143A1 (en) 2015-06-25

Similar Documents

Publication Publication Date Title
CN104731696B (zh) 定位程序代码中bug的方法及相关装置
Liu et al. Crowdsourcing construction activity analysis from jobsite video streams
EP3112965A1 (en) Robotic process automation
CN108351828A (zh) 用于设备无关的自动应用测试的技术
CN109190635A (zh) 基于分类cnn的目标追踪方法、装置及电子设备
CN110503077B (zh) 一种基于视觉的实时人体动作分析方法
CN109492686A (zh) 一种图片标注方法与系统
CN106649100A (zh) 一种自动化测试方法及系统
CN104991640B (zh) 交互界面上的实物编程系统和方法
CN104166509A (zh) 一种非接触式屏幕交互方法及系统
Jiang et al. Learning to solve 3-D bin packing problem via deep reinforcement learning and constraint programming
CN109101519B (zh) 信息采集系统和异构信息融合系统
CN109891374A (zh) 与数字代理的基于力的交互
CN110347407A (zh) 一种获取内存占用量的方法、装置、计算机设备及介质
CN103226563B (zh) 对自动客户支持系统中的客户活动进行分类的方法和系统
Kosmopoulos et al. A system for multicamera task recognition and summarization for structured environments
CN110490237A (zh) 数据处理方法、装置、存储介质及电子设备
CN108287648A (zh) 软件的反馈管理方法、装置、电子设备和计算机存储介质
CN107111441A (zh) 多级用户界面
CN110163084A (zh) 操作员动作监督方法、装置及电子设备
Zhang et al. Machine vision-based testing action recognition method for robotic testing of mobile application
CN103309434B (zh) 一种指令识别方法和电子设备
US20130093698A1 (en) Contact detecting device, record display device, non-transitory computer readable medium, and contact detecting method
CN110334576A (zh) 一种手部追踪方法及装置
CN116027743A (zh) 一种生产线的智能监控方法、装置及系统

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
EXSB Decision made by sipo to initiate substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20190730

Address after: Shenzhen Futian District City, Guangdong province 518044 Zhenxing Road, SEG Science Park 2 East Room 403

Co-patentee after: Tencent cloud computing (Beijing) limited liability company

Patentee after: Tencent Technology (Shenzhen) Co., Ltd.

Address before: Shenzhen Futian District City, Guangdong province 518000 Zhenxing Road, SEG Science Park 2 East Room 403

Patentee before: Tencent Technology (Shenzhen) Co., Ltd.