使用 Frama-c 测试大文件中的中间变量
Testing intermediate variables in a large file using Frama-c
我正在尝试使用 Frama-c
检查我拥有的 C 函数的某些属性。该函数非常大,并且有一些我需要检查的中间变量。 (我正在遵循 this and this 手册)
我的程序结构如下:
- 整个程序中有 15 个 return 语句。
我需要检查的变量是在程序的几个地方赋值的,具体取决于程序的路径。
my_function(){
intermediate var 1=xx;
//@assert var 1>some_value;
intermediate var 2=yy;
return var 4;
intermediate var 1=xx;
//@assert var 1>some_value;
return var 4;
intermediate var 2=xx;
intermediate var 1=yy;
//@assert var 1>some_value;
return var 4;
}
说明:我需要检查与变量 1、变量 2 和变量 4 相关的某些属性。我尝试了两种方法。
- 每当 var 1 如上设置时使用断言。
问题在于 Frama-C 只检查第一个断言。
一开始使用注释。
/*@ requires \valid(var 1);
ensures var 1 > some_value;
*/
在这种情况下,Frama-C return是一个错误。
问题:如何检查中间问题的属性?有示例程序吗?
*我没有包含我的原始函数,因为它很长。
正如 Virgile 所提到的,您的问题不是很清楚,但我假设您正在尝试验证 var1 和 var2 的某些属性。
book 提供了一些很好的示例,我认为以下内容应该对您有所帮助。
int abs(int val){
int res;
if(val < 0){
//@ assert val < 0 ;
res = - val;
//@ assert \at(val, Pre) >= 0 ==> res == val && \at(val, Pre) < 0 ==> res == -val;
} else {
//@ assert !(val < 0) ;
res = val;
//@ assert \at(val, Pre) >= 0 ==> res == val && \at(val, Pre) < 0 ==> res == -val;
}
return res;
}
作者在这个场景中使用了 Hoare 三元组的概念,在这种情况下,您通过断言其对 属性 的要求(前提条件)来检查(断言)某个 属性 并检查是否a 属性 在相应语句执行后成立。
希望这对您有所帮助。
我正在尝试使用 Frama-c
检查我拥有的 C 函数的某些属性。该函数非常大,并且有一些我需要检查的中间变量。 (我正在遵循 this and this 手册)
我的程序结构如下:
- 整个程序中有 15 个 return 语句。
我需要检查的变量是在程序的几个地方赋值的,具体取决于程序的路径。
my_function(){ intermediate var 1=xx; //@assert var 1>some_value; intermediate var 2=yy; return var 4; intermediate var 1=xx; //@assert var 1>some_value; return var 4; intermediate var 2=xx; intermediate var 1=yy; //@assert var 1>some_value; return var 4; }
说明:我需要检查与变量 1、变量 2 和变量 4 相关的某些属性。我尝试了两种方法。
- 每当 var 1 如上设置时使用断言。
问题在于 Frama-C 只检查第一个断言。
一开始使用注释。
/*@ requires \valid(var 1); ensures var 1 > some_value; */
在这种情况下,Frama-C return是一个错误。
问题:如何检查中间问题的属性?有示例程序吗?
*我没有包含我的原始函数,因为它很长。
正如 Virgile 所提到的,您的问题不是很清楚,但我假设您正在尝试验证 var1 和 var2 的某些属性。 book 提供了一些很好的示例,我认为以下内容应该对您有所帮助。
int abs(int val){
int res;
if(val < 0){
//@ assert val < 0 ;
res = - val;
//@ assert \at(val, Pre) >= 0 ==> res == val && \at(val, Pre) < 0 ==> res == -val;
} else {
//@ assert !(val < 0) ;
res = val;
//@ assert \at(val, Pre) >= 0 ==> res == val && \at(val, Pre) < 0 ==> res == -val;
}
return res;
}
作者在这个场景中使用了 Hoare 三元组的概念,在这种情况下,您通过断言其对 属性 的要求(前提条件)来检查(断言)某个 属性 并检查是否a 属性 在相应语句执行后成立。
希望这对您有所帮助。