防止Frama-C的切片插件更改输入代码

时间:2016-03-03 15:33:09

标签: c frama-c program-slicing

给定一个C文件,我想为某些条件计算后向切片,并将切片与原始代码进行比较。因为我不想从cratch实现切片程序,所以我已经尝试习惯了Frama-C,它似乎有助于完成这项任务。

然而,我的问题是,Frama-C的切片插件会更改预处理的输入代码,因此更难以识别切片中哪些原始行也会出现。

示例:

输入文件test1.c

double func1(double param) {
    return 2+param;
}

int main() {
    int a=3;
    double c=4.0;
    double d=10.0;
    if(a<c)
        c=(double)a/4.0;
    double res = func1(c);
    return 0;
}

预处理文件(由frama-c test1.c -print -ocode test1_norm.c产生):

/* Generated by Frama-C */
double func1(double param)
{
  double __retres;
  __retres = (double)2 + param;
  return __retres;
}

int main(void)
{
  int __retres;
  int a;
  double c;
  double d;
  double res;
  a = 3;
  c = 4.0;
  d = 10.0;
  if ((double)a < c) c = (double)a / 4.0;
  res = func1(c);
  __retres = 0;
  return __retres;
}

切片(由frama-c -slice-calls func1 test1.c -then-on 'Slicing export' -print产生):

/* Generated by Frama-C */
double func1_slice_1(double param)
{
  double __retres;
  __retres = (double)2 + param;
  return __retres;
}

void main(void)
{
  int a;
  double c;
  double res;
  a = 3;
  c = 4.0;
  c = (double)a / 4.0;
  res = func1_slice_1(c);
  return;
}

请注意,main的签名有所不同,func1的名称已更改为func1_slice_1

有没有办法抑制这种行为,以使切片和(预处理的)原始图像更易于比较(就可计算差异而言)?

0 个答案:

没有答案