本发明专利技术实施例公开了定位程序代码中bug的方法及相关装置。其中,一种定位程序代码中bug的方法,可包括:在程序代码段中的逻辑代码子段操作状态机的过程中,将逻辑代码子段所对应的逻辑标识变量的取值,赋给逻辑代码子段所操作的状态机的探测标记变量;获取程序代码段中的逻辑代码子段操作状态机过程中异常退出时所对应的最顶层上下文;获取在最顶层上下文所对应的堆栈环境之中被操作的状态机的探测标记变量的当前取值;利用获取的被操作的状态机的探测标记变量的当前取值,查找出程序代码段中的第一逻辑代码子段;输出程序代码段的bug定位信息。本发明专利技术实施例提供的技术方案有利于提高定位程序代码中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定位信息,其中,所述bug定位信息包括所述第一逻辑代码子段中的至少一个语句。
【技术特征摘要】
【专利技术属性】
技术研发人员:周飞虎,谢立强,
申请(专利权)人:腾讯科技深圳有限公司,
类型:发明
国别省市:广东;44
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。