【发布时间】:2016-03-03 15:33:08
【问题描述】:
给定一个 C 文件,我想根据某些标准计算后向切片并将切片与原始代码进行比较。因为我不想从头开始实现切片程序,所以我已经尝试习惯了 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。
有没有办法抑制这种行为,以使切片和(预处理的)原始文件更容易比较(就可计算差异而言)?
【问题讨论】:
标签: c frama-c program-slicing