Frama-C中的条件切片

时间:2013-07-15 11:34:01

标签: slice frama-c

我的最后一个问题(Understanding Frama-C slicer results)是一个精确的例子,但正如我所说,我的目标是知道是否可以用Frama-C做一些条件切片(向前和向后)。有可能吗?

更确切地说,我无法获得该程序的精确切片:

/*@ requires a >= b;

  @ assigns \nothing;

  @ ensures \result == a;
*/
int example4_instr1(int a, int b){
    int max = a;
    if(a < b)
        max = b;
    return max;
}

通过使用好的参数/选项,是否有可能在这种情况下得到我想要的/在一般情况下?

1 个答案:

答案 0 :(得分:2)

正如Pascal在他的answer to your previous question中提到的,Frama-C的向后和向前切片是基于称为价值分析的分析结果。这种分析是非关系型的;这意味着它只保留有关变量数值范围的信息,但不包括例如两个变量之间的差异。因此,它无法跟踪您的不平等a >= b。这解释了为什么似乎遵循了测试if (a < b)的两个分支。

如果没有来自用户的更多信息(但是,在此示例中,您可以编写的任何内容都无助于值分析)或其他分析,则向后切片必须考虑if可能是也可能不是拍摄。不幸的是,这导致了一个程序,没有任何东西被切掉。