我正在使用 frama-c 来对程序切片进行一些实验。该工具很棒,并且有很多不同类型的切片(例如,结果或语句)。我使用的程序数据结构如下:
typedef struct ComplexData {
int x;
int y;
char string_[100];
size_t n;
} ComplexData;
这只是一个例子,以便了解 frama-c 如何通过函数产生的结果对程序进行切片。基本上, main 方法调用一个函数,该函数返回 ComplexData 类型的值。 如何执行不同执行之间的比较?检查结构的每个值是什么?类似于this?
答案 0 :(得分:2)
Frama-C的选项-slice-return f
指示切片器保留所有有助于计算f
返回码的语句。对于您的类型ComplexData
,这意味着任何字段的内容。任何计算的声明,例如<{1}},或y
中的一个字符,将被保留。
关于不同执行之间的比较,静态切片器的实际工作方式不同。在所有可能的执行中,他们近似每个函数的行为。 (在Frama-C的情况下,这是使用称为abstract interpretation的技术完成的。)因此,不需要比较两次执行。