28、多线程C/C++程序缺陷检测的静态分析方法

多线程C/C++程序缺陷检测的静态分析方法

1. 引言

现代弹性系统对所使用的软件组件质量要求很高。软件质量不佳往往是由开发者的错误导致的缺陷引起的。相当一部分软件缺陷与违反编程语言规则、错误使用标准库和系统函数有关。C/C++程序中最常见的缺陷类型包括空指针解引用、控制流错误、内存损坏、资源泄漏、使用未初始化变量等。这些类型的缺陷不仅会出现在顺序程序中,也会出现在多线程C/C++程序里。此外,多线程程序还可能存在同步错误,如数据竞争(并发数据修改错误)、死锁和活锁。

为了自动检测软件缺陷,可以使用静态分析方法。静态分析方法能够保留用于检测多种缺陷类型的信息。目前,已经有针对顺序C/C++程序的高效静态分析算法,但多线程程序的静态分析是一个更具挑战性的问题,现有的静态分析算法和工具尚未达到工业应用水平。

本文提出了一种用于多线程C/C++程序缺陷检测的新方法。该方法的核心思想是将用于顺序程序的静态分析算法与新开发的并行执行分析算法相结合。并行执行分析算法用于确定语句块的部分执行顺序,以及程序线程与同步对象和共享变量之间的交互。所有分析算法协同工作,并共享彼此的结果,旨在获得高可靠性和足够精度的分析结果。

我们主要讨论使用POSIX线程(Pthreads)中指定的线程和同步对象的多线程程序。在本文中,我们将分析范围限制在包含互斥锁和信号量的同步对象子集上,这足以展示分析算法的所有规则,其他同步对象的分析可以以此类推。该方法已在缺陷检测工具Aegis MT中实现,该工具支持完整的C/C++语言以及部分用于操作线程、信号量和互斥锁的Pthreads函数。我们通过在一组人工和实际的多线程C/C++程序上进行评估,验证了该方法的有效性。

2. 基于
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值