[英]Testing intermediate variables in a large file using Frama-c
我正在嘗試使用Frama-c
檢查我擁有的C函數的某些屬性。 該函數非常大,我需要檢查一些中間變量。 (我下面這個和本手冊)
我的程序具有以下結構:
根據程序的路徑,我需要檢查的變量在程序中的多個位置被分配了值。
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; }
說明 :我需要檢查與var 1,var 2和var 4相關的某些屬性。我嘗試了2種方法。
問題在於Frama-C僅檢查第一個斷言。
一開始使用注釋。
/*@ requires \\valid(var 1); ensures var 1 > some_value; */
在這種情況下,Frama-C返回錯誤。
問題 :如何檢查屬性是否存在中間問題? 有示例程序嗎?
*我沒有包含我的原始功能,因為它很長。
正如Virgile所提到的,您的問題不是很清楚,但是我認為您正在嘗試驗證var1和var2的某些屬性。 本書提供了一些不錯的示例,我認為以下內容可以為您提供幫助。
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三元組的概念,其中您通過斷言某個屬性對某個屬性的要求(前提)來檢查(聲明)某個屬性,並在執行相應的語句后檢查該屬性是否成立。
希望這可以幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.