我正在使用 frama-c Aluminium-20160502 版本,我想找出大型程序中的依赖关系。在命令行中使用选项 -deps 时,我发现缺少一些依赖项。特别是当多个条件合并为一个 if 时,只要一个条件为假,依赖性分析就会停止。在此示例中:
#include<stdio.h>
#include<stdbool.h>
/*Global variable definitions*/
bool A = true;
bool B = false;
bool C = true;
bool X;
bool Y;
bool res;
void main(){
if (A && B && C) {
res = X;
}else res = Y;
}
当我尝试时:frama-c -deps program.c
frama 显示以下依赖项:
[来自] ====== 依赖项计算 ======
对于终止的执行,这些依赖项在终止时保持:
[来自] 函数 main: res FROM A; 乙; 是
[来自] ====== 依赖关系结束 ======
所以它没有达到条件C,因为B已经是假的。
我想知道是否有办法告诉 frama 计算所有依赖项,即使条件不满足。我尝试使用选项 -slevel 但没有结果。我知道有一种方法可以使用区间 Frama_C_interval(0,1) 但是当我使用它时,使用此函数的变量不会显示在依赖项中。我想让 X 和 Y 依赖于 A、B、C 和 res 依赖于 A、B、C、X、Y
有任何想法吗?