一种空指针崩溃的挖掘方法及装置制造方法及图纸

技术编号:15114878 阅读:60 留言:0更新日期:2017-04-09 11:05
本发明专利技术实施例公开了一种空指针崩溃的挖掘方法,及装置,其中方法的实现包括:获取全量代码文件内返回空指针的函数;获取待挖掘的代码中使用了所述空指针的变量作为危险变量;使用所述危险变量进行前向搜索,若搜索得到使用了所述危险变量的代码行,并且所述代码行未进行判空保护,则确定所述代码行为产生空指针崩溃的代码行。首先确定返回空指针的函数,然后通过返回空指针函数被使用的情况确定危险变量,然后通过危险变量定位到产生空指针崩溃的代码行。可以准确找出会导致软件崩溃的空指针。

【技术实现步骤摘要】

本专利技术涉及计算机
,特别涉及一种空指针崩溃的挖掘方法,及装置。
技术介绍
空指针崩溃是指软件程序中如果直接使用空指针变量的一个属性方法则会引起软件崩溃(Crash)。空指针是指针的一种,指针是指值为内存地址的一种变量,空指针则是内存地址为空(NULL)的指针变量。空指针崩溃代码,是指使用空指针变量的代码行。因此,空指针崩溃代码存在引起软件崩溃的风险,为了避免这种风险,通常需要通过判空保护来避免软件崩溃。判空保护的过程是:判断指针变量的值是否等于NULL,如果指针变量值等于NULL时,就不使用该指针变量,如果不等于NULL则可以使用该指针变量。空指针崩溃挖掘是在代码中找出会导致软件崩溃的空指针的过程,目前有实现该功能的工具软件,如CPPcheck工具,其挖掘方法如下:遇到函数会返回指针变量的代码行,则判断该代码行是否有判空保护,如果没有判空保护,则给该代码行报空指针崩溃代码告警。由于CPPcheck工具遇到函数会返回指针变量的代码行且没有判空保护的代码,就直接给该代码行报空指针崩溃代码告警。但是,如果函数返回值中没有返回NULL的代码实现,即使函数的使用者没有判空保护的代码,也不会产生指针变量为NULL的可能。因此,会导致大量的无效告警。目前,一些产品在使用CPPcheck工具进行空指针崩溃风险挖掘时常会爆出几百,几千甚至上万的告警,由于其误报的存在,导致人工无法对大量的告警进行分析。因此,采用CPPcheck工具进行空指针崩溃挖掘,误报率高。
技术实现思路
本专利技术实施例提供了一种空指针崩溃的挖掘方法,及装置,用于准确找出会导致软件崩溃的空指针。一种空指针崩溃的挖掘方法,包括:获取全量代码文件内返回空指针的函数;获取待挖掘的代码中使用了所述空指针的变量作为危险变量;使用所述危险变量进行前向搜索,若搜索得到使用了所述危险变量的代码行,并且所述代码行未进行判空保护,则确定所述代码行为产生空指针崩溃的代码行。一种空指针崩溃的挖掘装置,包括:函数获取单元,用于获取全量代码文件内返回空指针的函数;变量获取单元,用于获取待挖掘的代码中使用了所述空指针的变量作为危险变量;代码搜索单元,用于使用所述危险变量进行前向搜索;危险确定单元,用于若搜索得到使用了所述危险变量的代码行,并且所述代码行未进行判空保护,则确定所述代码行为产生空指针崩溃的代码行。从以上技术方案可以看出,本专利技术实施例具有以下优点:首先确定返回空指针的函数,然后通过返回空指针函数被使用的情况确定危险变量,然后通过危险变量定位到产生空指针崩溃的代码行。可以准确找出会导致软件崩溃的空指针。附图说明为了更清楚地说明本专利技术实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本专利技术的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。图1为本专利技术实施例方法流程示意图;图2为本专利技术实施例装置结构示意图;图3为本专利技术实施例装置结构示意图;图4为本专利技术实施例装置结构示意图;图5为本专利技术实施例装置结构示意图;图6为本专利技术实施例服务器结构示意图。具体实施方式为了使本专利技术的目的、技术方案和优点更加清楚,下面将结合附图对本专利技术作进一步地详细描述,显然,所描述的实施例仅仅是本专利技术一部份实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本专利技术保护的范围。本专利技术实施例提供了一种空指针崩溃的挖掘方法,如图1所示,包括:101:获取全量代码文件内返回空指针的函数;在本实施例中,全量代码可以就是待挖掘的代码,待挖掘的代码也可以仅是全量代码的一部分代码。全量代码用于确定返回空指针的函数,但是返回空指针的函数并不一定会造成空指针崩溃,因此获取全量代码文件内返回空指针的函数作为空指针崩溃的挖掘前期准备。102:获取待挖掘的代码中使用了上述空指针的变量作为危险变量;在本实施例中,找到危险变量是为了确定使用了空指针的变量,危险变量是可能导致代码出现空指针崩溃的变量,但是并不一定会产生空指针崩溃,因此本专利技术实施例还需要进一步进行确认。103:使用上述危险变量进行前向搜索,若搜索得到使用了上述危险变量的代码行,并且上述代码行未进行判空保护,则确定上述代码行为产生空指针崩溃的代码行。在本专利技术实施例中,前向搜索的代码条数可以人为限定,也可以是对危险变量的生命周期所在的代码段进行前向搜索,前向搜索的条数本专利技术实施例不做唯一性限定。在本实施例中,首先确定返回空指针的函数,然后通过返回空指针函数被使用的情况确定危险变量,然后通过危险变量定位到产生空指针崩溃的代码行。可以准确找出会导致软件崩溃的空指针。即使使用了空指针,也并不代表一定会产生空指针崩溃,因此也不能认为是危险变量,因为有可能是并不会被执行的代码,例如:注释型代码。因此为了进一步提高挖掘空指针崩溃的代码的准确性,本实施例可以进一步地如下:在使用上述危险变量进行前向搜索之前还包括:确定上述危险变量是否为注释型代码行,若不是,则使用上述危险变量进行前向搜索。本专利技术实施例还给出了危险函数库模型的创建方案,用来提高查找危险变量的准确性,具体如下:上述获取全量代码文件内返回空指针的函数;包括:获取全量代码文件内各函数中返回值类型为空的函数名;将构造空指针的危险函数库模型,上述危险函数库模型的键值为:返回值类型为空的函数名以及返回值类型。进一步地,对于危险函数库模型而言,除了以上键值以外还可以包含一些后续用于告警的信息,以及其他用途的信息,具体如下:上述方法还包括:获取上述返回值类型为空的函数名所在代码的文件路径,以及从函数名开始到返回值为空的代码段,并记录到上述危险函数库模型。基于本专利技术实施例给出的危险函数库模型,本专利技术实施例还提供了优选的确定危险变量的实现方案,如下:上述获取待挖掘的代码中使用了上述空指针的变量作为危险变量;包括:获取上述待挖掘的代码中符合上述危险函数库模型的键值,并且使用了上述危险函数库模型中的函数赋值的变量,作为危险变量。进一步地,对于危险函数库模型而言,除了以上键值以外还可以包含一些后续用于告警的信息,以及其他用途的信息,具体如下:在确定上述代码行为产生空指针崩溃的代码行之后,上述方法还包括:获取上述危险变量到上述危险代码行之间的代码,以及,上述返回值类型为空的函数名所在代码的文件路径。在确定了会产生空指针崩溃的代码行以后,还可以进行告警,告警的方式可以是现实空指针崩溃提示,提示的信息可以有多种形式,本专利技术实施例给出了优选的实现方式,如下:在获取上述危险变量到上述危险代码行之间的代码,以及,上述返回值类型为空的函数名所在代码的文件路径之后,上述方法还包括:输出告警信本文档来自技高网...

【技术保护点】
一种空指针崩溃的挖掘方法,其特征在于,包括:获取全量代码文件内返回空指针的函数;获取待挖掘的代码中使用了所述空指针的变量作为危险变量;使用所述危险变量进行前向搜索,若搜索得到使用了所述危险变量的代码行,并且所述代码行未进行判空保护,则确定所述代码行为产生空指针崩溃的代码行。

【技术特征摘要】
1.一种空指针崩溃的挖掘方法,其特征在于,包括:
获取全量代码文件内返回空指针的函数;
获取待挖掘的代码中使用了所述空指针的变量作为危险变量;
使用所述危险变量进行前向搜索,若搜索得到使用了所述危险变量的代
码行,并且所述代码行未进行判空保护,则确定所述代码行为产生空指针崩
溃的代码行。
2.根据权利要求1所述方法,其特征在于,在使用所述危险变量进行前
向搜索之前还包括:
确定所述危险变量是否为注释型代码行,若不是,则使用所述危险变量
进行前向搜索。
3.根据权利要求1所述方法,其特征在于,所述获取全量代码文件内返
回空指针的函数;包括:
获取全量代码文件内各函数中返回值类型为空的函数名;
将构造空指针的危险函数库模型,所述危险函数库模型的键值为:返回
值类型为空的函数名以及返回值类型。
4.根据权利要求3所述方法,其特征在于,所述方法还包括:
获取所述返回值类型为空的函数名所在代码的文件路径,以及从函数名
开始到返回值为空的代码段,并记录到所述危险函数库模型。
5.根据权利要求1至4任意一项所述方法,其特征在于,所述获取待挖
掘的代码中使用了所述空指针的变量作为危险变量;包括:
获取所述待挖掘的代码中符合所述危险函数库模型的键值,并且使用了
所述危险函数库模型中的函数赋值的变量,作为危险变量。
6.根据权利要求5所述方法,其特征在于,在确定所述代码行为产生空
指针崩溃的代码行之后,所述方法还包括:
获取所述危险变量到所述危险代码行之间的代码,以及,所述返回值类
型为空的函数名所在代码的文件路径。
7.根据权利要求6所述方法,其特征在于,在获取所述危险变量到所述
危险代码行之间的代码,以及,所述返回值类型为空的函数名所在代码的文
件路径之后,所述方法还包括:
输出告警信息,并输出所述危险变量到所述危险代码行之间的代码,以
及,所述返回值类型为空的函数名所在代码的文件路径。
8....

【专利技术属性】
技术研发人员:董杰
申请(专利权)人:腾讯科技成都有限公司
类型:发明
国别省市:四川;51

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1