是否可以在frama-c值分析器中注入值?

时间:2012-06-12 16:42:33

标签: static-analysis frama-c

我正在尝试使用frama-c值分析器来评估C-Code,它实际上是线程化的。 我想忽略可能发生的任何线程问题,而只是检查单个线程的可能值。到目前为止,这通过设置线程开始的入口点来工作。

现在我的问题:在一个线程中我读取了由另一个线程写的值,因为frama-c没有(并且不应该?)考虑线程(当前)它假设我的变量在某个宽范围内,但是我知道范围实际上要小得多。 是否可以告诉值分析器这个变量的值范围?

示例:

volatile int x = 0;

void f() {
    while(x==0)
        sleep(100);
    ...
}

这里frama-c检测到x是易失性的,因此具有范围[--..--],但是我知道其他线程会写入x,我想告诉分析器x只能是0或1。 这可能与frama-c有关,特别是在gui?

提前致谢 基督教

2 个答案:

答案 0 :(得分:3)

目前无法自动执行此操作。值分析认为volatile变量始终包含其基础类型中包含的所有值。然而,存在一个专有插件,它将对volatile变量的访问转换为对用户提供的函数的调用。在您的情况下,您的代码将基本上转换为:

int x = 0;

void f() {
while(1) {
    x = f_volatile_x();
    if (x == 0)
    sleep(100);
...
}

通过正确指定f_volatile_x,您可以确保它仅返回介于0和1之间的值。

答案 1 :(得分:2)

如果在你正在研究的主题中没有修改变量'x',你也可以在'main'函数的开头用它初始化它:

x = Frama_C_interval (0, 1);

这是Frama-C在...../share/frama-c/builtin.c中定义的函数,因此您在使用它时必须将此文件添加到输入中。