动态切片技术:定位并发程序中的错误根源
在并发程序的开发过程中,定位并发错误的根源是一项极具挑战性的任务。本文将介绍一种基于动态切片的故障定位技术,该技术通过双切片方法来识别不同类型并发错误的根源。
1. 执行索引与结构对应
在程序执行过程中,不同的执行路径可能会导致语句的执行顺序和嵌套结构有所不同。例如,执行 E 在 while 循环的第一次迭代中递归调用 A(),而在另一种执行中,递归调用发生在第二次迭代。通过执行索引(SEIE)可以清晰地表达语句的嵌套结构。如 SEIE(21) = [RA],表明两个执行中第一个执行的语句 2 是对应的。而 SEIE(161) 在两次执行中的索引不同,这意味着两个 161 在不同的迭代中嵌套,它们在结构上并不对应。
2. 双切片技术概述
双切片技术是一种动态分析技术,用于识别并发错误的根源。该技术基于两次运行(一次成功,一次失败,由两个确定性调度控制),产生一系列因果相关的执行点,从代表失败根源的程序点到检测到失败的程序点。其主要步骤包括跟踪比较和双切片。
3. 跟踪比较
3.1 有损和无损跟踪
跟踪可以分为有损和无损两种类型:
- 无损跟踪 :记录每个执行步骤的动态信息,所需空间与执行长度成正比。
- 有损跟踪 :通过累积获取,例如使用程序计数器捕获控制流,或者以指令频率和路径频率等元组的形式记录。其主要优点是空间需求与静态程序大小呈线性关系。
然而,有损跟踪比较存在局限性。例如,当一次运行执行语句 s i 次,另一次运行执行 s (
超级会员免费看
订阅专栏 解锁全文
71

被折叠的 条评论
为什么被折叠?



