我正在使用frama-c鋁-20160502版本,我想在大型程序中找到依賴關係。在命令行中使用選項-deps時,我發現缺少一些依賴關係。特別是當幾個條件加入一個條件時,只要一個條件爲假,依賴性分析就會停止。在這個例子中的位置:甚至對「死枝」做Frama-c顯示依賴關係
#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
郵資顯示以下依存關係:
[從] ======相關內容COMPUTED ======
這些依賴關係在終止用於執行終止成立:
[從]功能主要: RES FROM A; B; ÿ
[從] ====== DEPENDENCIES ======
OF END因此它不會達到的條件C,因爲已經B是假的。
我不知道是否有辦法告訴frama計算所有依賴項,即使條件未滿足。我嘗試使用-slevel選項,但沒有結果。我知道有一種方法可以使用間隔Frama_C_interval(0,1),但是當我使用它時,使用此函數的變量不會顯示在依賴項中。我想得到X和Y依賴於A,B,C和水平取決於A,B,C,X,Y
任何想法?
請注意,您稱之爲「死分支」的語法結構對程序執行沒有語義影響(例如'&& true')。因爲Frama-C的依賴分析是基於語義的,所以你可能不得不「欺騙」他們考慮外部分支(例如'volatile','Frama_C_interval'等),或者嘗試設計一個語法分析(例如用一個訪客)可以計算你的語法依賴的概念。 – anol