【问题标题】:Slicing for multiple asserts对多个断言进行切片
【发布时间】:2016-04-14 09:11:16
【问题描述】:

是否可以使用Frama-C 的切片插件对多个断言进行切片?

例如给出以下代码:

#include "assert.h"

int main() {
    double a=3;
    double b=4;
    b=a+b;
    double c=123;

//@ assert(b>=0);

    double d=a/b;
    c=a;

//@ assert(c==0);

    if (a<b)
        a=c;

    return 0;
}

我想获得两个断言的切片。

【问题讨论】:

    标签: frama-c program-slicing


    【解决方案1】:

    选项-slice-assert main 将选择函数main 的所有断言作为切片标准。实际上,您不能直接选择仅针对其中一个进行切片。对于第一个,您必须诉诸 //@ slice pragma expr b;,对于第二个,您必须诉诸 //@ slice pragma expr c;

    更一般地说,切片标准是累积的:您提供的标准越多,保留的代码就越多。

    【讨论】:

    • 感谢您的回答!这很有帮助。是否也有可能对全局范围的所有断言而不是特定函数进行切片?
    • @Paddre 从技术上讲,在全局范围内没有断言之类的东西:它们与语句相关联。你的意思是程序中所有函数的所有断言吗?如果是,您可以使用快捷方式@all 而不是将所有函数命名为-slice-assert 的逗号分隔列表参数
    • 后者成功了。谢谢 :-)
    猜你喜欢
    • 1970-01-01
    • 2018-06-06
    • 2013-06-21
    • 2021-02-06
    • 2018-02-22
    • 1970-01-01
    • 2016-02-20
    • 2019-10-13
    • 2016-05-12
    相关资源
    最近更新 更多