簡體   English   中英

使用Frama-c測試大型文件中的中間變量

[英]Testing intermediate variables in a large file using Frama-c

我正在嘗試使用Frama-c檢查我擁有的C函數的某些屬性。 該函數非常大,我需要檢查一些中間變量。 (我下面這個手冊)

我的程序具有以下結構:

  1. 在整個程序中有15條返回語句。
  2. 根據程序的路徑,我需要檢查的變量在程序中的多個位置被分配了值。

     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種方法。

  1. 如上設置var 1時,請使用assert。

問題在於Frama-C僅檢查第一個斷言。

  1. 一開始使用注釋。

     /*@ 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM