一种多核实时系统应用数据竞争错误的调试方法技术方案

技术编号:12743107 阅读:126 留言:0更新日期:2016-01-21 10:27
本发明专利技术是一种多核实时系统应用数据竞争错误的调试方法,属于多核应用程序调试技术领域。本发明专利技术基于多核操作系统编写发生数据竞争的应用程序测试集,设计插桩谓词,手工对测试程序进行插桩,运行插桩后的测试集,统计调试输出对插桩位置的可疑度排序,根据统计调试结果快速定位测试集代码可能发生并发错误数据竞争的位置。所设计的谓词记录应用程序中的全局变量在被同一任务连续两次访问过程中其值改变次数,在访问全局变量前,判断此时全局变量的值与记录的值是否一致;在访问全局变量后,更新全局变量值的记录。本发明专利技术可以方便快速的对共享数据进行插桩,降低开发自动化插桩工具的成本和时间,节约了通过循环执行断点调试方法所耗费的时间。

【技术实现步骤摘要】

本专利技术涉及针对多核操作系统应用程序的并发错误数据竞争通过统计调试的方 法进行定位,属于多核应用程序调试
,方便开发人员快速定位并发错误。
技术介绍
多核操作系统应用程序因为非确定性的线程交替,容易产生数据竞争,死锁,原子 性侵犯等并发相关的错误,并且由于调度不确定性在调试过程中导致问题极其难以定位。 对于开发者来说,即使知道产生错误的输入,重现错误执行也是很困难的。数据竞争是至少 两个线程没有按顺序限制访问同一内存位置,其中至少一个访问是写操作。数据竞争本身 不一定是错误,但是它导致严重的难以发现,崩溃,并发相关的软件缺陷。 -方面,针对不同处理器已有硬件设备通过仿真来辅助开发人员在开发阶段顺利 调试,但是其价格昂贵,同时对开发者技术水平也有很高要求。另一方面,也有通过静态或 者动态算法来检测代码中的并发错误来辅助开发人员排除故障,但是静态方法利用程序的 依赖关系和类型约束等信息来分析程序的可能故障点,为更深层次的自动化检测提供必要 条件;而动态二进制插粧技术来检测代码中的并发错误的方法不需要修改或重新编译应 用程序的源代码,并且支持动态生成代码来检测程序,但是会有较高的开销,拖慢程序的执 行,这部分的开销对于程序执行而言是不可忽略的。 目前针对多核操作系统应用程序,不适用已有的自动化插粧工具,而且针对特定 操作系统开发维护一套自动化插粧工具耗费时力人力较高,且动态插粧技术存在开销大的 问题。
技术实现思路
本专利技术为了克服现有技术的不足,提供一种多核实时系统应用数据竞争错误的调 试方法,通过统计调试的方法对收集的信息进行处理对插粧位置进行可疑度排序,快速通 过排序结果定位应用程序中的实际发生故障的位置,且降低了动态二进制插粧方法对程序 执行的开销。 本专利技术提供的,实现步骤如下: 步骤1,在特定多核操作系统基础上编写应用程序测试集,发生并发错误数据竞争 的 benchmark ; 步骤2,设计插粧谓词,对测试集中的程序进行手工插粧; 所述的插粧谓词,用于记录访问全局变量的值改变次数; 步骤3,运行插粧后的测试集,在程序运行过程中收集插粧的谓词记录信息,并记 录程序的每次执行结果; 所述的谓词记录信息,包括谓词值、插粧行号和插粧所在函数; 步骤4,将插粧后的测试集至少执行X次,收集谓词记录信息和程序执行结果,作 为统计调试算法的输入,执行统计调试算法,输出对程序插粧位置可能发生并发错误数据 竞争的可疑度排序;X为正整数; 步骤5,根据可疑度排序结果快速定位测试集程序中可能发生并发错误数据竞争 的位置。 所述步骤2中,对测试集中的程序进行手工插粧,实现过程包括: (1)对多核操作系统应用程序的每一个任务中全局变量的访问位置都进行插粧; (2)利用编写的插粧谓词函数在测试集程序中手动插粧; 所述的插粧函数包括三个接口函数:函数initSiteO在初次访问时初始化谓词 记录信息结构体;函数cmpSiteO用于更新数据结构体中谓词值,在访问全局变量之前,比 较该全局变量的本次值与记录值是否一致,若不一致,将谓词值加1,否则保持谓词值不变; 函数UpSiteO在访问全局变量之后更新全局变量的记录值。 所述步骤4中的统计调试算法的实现过程为: 步骤4. 1,输入谓词记录信息和程序执行结果; 步骤4. 2,统计成功测试总数Tp,失败测试总数Tf,测试用例总数Tp+T f,覆盖插粧位 置s的成功测试数Tp (s),覆盖插粧位置s的失败测试数Tf (s),覆盖插粧位置s的测试总数 Tp (s)+Tf (s),未覆盖插粧位置s的成功执行次数,未覆盖插粧位置s的失败执行次数,未覆 盖插粧位置s的执行次数。 执行步骤4. 3或步骤4. 4来获得插粧位置的可疑度排序; 步骤4. 3,利用概率统计的方法计算每个谓词位置存在可疑度的概率; 步骤4. 4,利用基于谓词覆盖统计的原理,分析插粧周围代码的出错概率。 所述的步骤4. 3根据不同的统计模型计算公式来得到插粧位置的可疑度: 对各插粧位置的可疑度进行排序。 所述的步骤4. 4中对每个谓词P,根据设如下公式计算谓词P的怀疑度: 其中,Ft(P)和St(P)分别表示P在失败和成功执行中取值为真的次数,F ci(P)和 Sci(P)分别表示P在失败和成功执行中出现的次数。 本专利技术具有如下优点和积极效果: (1)调试人员在调试定位并发错误的过程中可以方便快速的对共享数据进行插 粧,只需传入共享数据的地址,大小,行号,所在函数等容易获得的信息,调用插粧API接口 可以自动维护记录插粧信息。降低开发自动化插粧工具的成本和时间。 (2)根据插粧覆盖记录的信息和程序执行结果成功或失败作为统计调试算法的输 入,计算得到各个插粧位置的可疑度排序结果来定位错误,降低了对调试人员技术水平的 要求,同时也节约了通过循环执行断点调试方法所耗费的时间。【附图说明】 图1是本专利技术谓词插粧API接口示意图; 图2是本专利技术进行谓词插粧的流程示意图; 图3是本专利技术中统计调试算法程序的工作流程示意图。【具体实施方式】 下面将结合附图和实施示例对本专利技术作进一步的详细说明。通过足够详细的描述 这些示例,使得本领域技术人员能够理解和实践本专利技术。在不脱离本专利技术的主旨和范围的 情况下,可以对实施做出逻辑的、实现的和其他的改变。因此,以下详细说明不应该被理解 为限制意义,本专利技术的范围仅仅由权利要求来限定。 多核操作系统应用程序的调试工作,调试人员通常通过程序的循环多次执行,设 定断点的方法进行,但此方法对调试人员的技术水平提出了较高要求,且在实际工作中调 试过程会耗费较多时间。故而可以通过在开发程序过程中按照谓词插粧的要求在代码中插 粧,当程序出现问题时,多次执行程序完成插粧覆盖信息的记录并且记录程序执行成功或 者失败,将这些结果作为统计调试算法的输入,统计调试算法输出对插粧位置的可疑度排 序结果,调试人员根据排序结果来快速定位代码中可能存在故障的位置,减少调试人员的 工作。 本专利技术提供的多核实时系统应用数据竞争错误的调试方法,针对某特定多核操作 系统,基本步骤包括:编写应用程序测试集;设计插粧谓词;手工在测试集上插粧谓词;运 行插粧后的测试集收集执行结果,执行结果作为统计调试算法的输入,统计调试算法输出 可疑度排序结果;根据排序结果定位测试集中发生并发错误的位置。下面详细说明步骤 1~步骤5。 步骤1,在特定多核操作系统基础上编写应用程序测试集,发生并发错误数据竞争 的 benchmark。 Benchmark表示基准测试程序。 步骤2,设计插粧谓词,对测试集中的程序进行手工插粧。 根据发生并发错误数据竞争的特征,设计记录在被同一任务连续两次访问过程中 访问的全局变量的值改变次数的谓词。每次运行程序,收集谓词记录信息,包括:谓词值,插 粧行号,以及插粧所在函数。 本步骤中,对测试集中的程序进行手工插粧,收集测试程序访问全局变量的信息, 实现过程包括步骤2. 1~2. 3。 步骤2. 1,对多核操作系统应用程序的每一个任务中全局变量的访问位置都进行 插粧; 步骤2. 2,利用编写的插粧函数在测试集程序中手动插粧; 如图1所示,为所设计的谓词记录信息结构体和插粧函数示意图。插粧函数包括 三个接口函数本文档来自技高网...
一种多核实时系统应用数据竞争错误的调试方法

【技术保护点】
一种多核实时系统应用数据竞争错误的调试方法,其特征在于,针对多核操作系统应用程序的并发错误数据竞争通过统计调试的方法进行定位,具体实现步骤如下:步骤1,在特定多核操作系统基础上编写应用程序测试集,发生并发错误数据竞争的测试集benchmark;步骤2,设计插桩谓词,对测试集中的程序进行手工插桩;所述的插桩谓词,用于记录访问全局变量的值改变次数;步骤3,运行插桩后的程序测试集,在程序运行过程中收集插桩的谓词记录信息,并记录程序的每次执行结果;所述的谓词记录信息,包括谓词值、插桩行号和插桩所在函数;步骤4,将插桩后的程序测试集至少执行X次,收集谓词记录信息和程序执行结果,作为统计调试算法的输入,执行统计调试算法,输出对程序插桩位置可能发生并发错误数据竞争的可疑度排序;X为正整数;步骤5,根据可疑度排序结果快速定位测试集程序中可能发生并发错误数据竞争的位置。

【技术特征摘要】

【专利技术属性】
技术研发人员:姜博郭兰高小鹏龙翔叶宏
申请(专利权)人:北京航空航天大学中国航空工业集团公司第六三一研究所
类型:发明
国别省市:北京;11

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

1