c - 使用 frama-c 进行切片

标签 c frama-c program-slicing

我正在使用frama-c来进行一些程序切片的实验。该工具很棒,并且有很多不同类型的切片(例如,按结果或按语句)。我使用的程序数据结构如下:

typedef struct ComplexData {
    int x;
    int y;
    char string_[100];
    size_t n;
} ComplexData;

这只是一个示例,用于理解frama-c如何通过函数产生的结果来分割程序。基本上,main 方法调用一个返回ComplexData 类型值的函数。 不同执行之间的比较是如何进行的?对结构体的每个值都有一个检查?比如this

最佳答案

Frama-C 的选项 -slice-return f 指示切片器保留所有有助于计算 f 返回码的语句。对于您的类型ComplexData,这意味着任何字段的内容。任何计算的语句,例如ystring_ 中的字符之一将被保留。

关于不同执行之间的比较,静态切片器实际上工作方式不同。它们在所有可能的执行中近似每个函数的行为。 (对于 Frama-C,这是使用称为 abstract interpretation 的技术完成的。)因此,无需比较两个执行。

关于c - 使用 frama-c 进行切片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41761572/

相关文章:

c - 当函数调用预处理器指令时,输出会有所不同。为什么?

c++ - C/C++ 中的动态切片

ocaml - ocamlgraph 中的编译错误

frama-c - 使用 frama-c 绘制系统依赖图

c - frama-c停止传播:“断言状态无效”

c++ - 如何声明指向返回函数指针的函数的指针

c - 霍夫曼表熵解码简化(在 C 中)

c - 这段代码是正确的还是我必须在使它等于 name2 之前分配 name

frama-c - 使用 opam 安装 Frama-C 时出错 (Ubuntu 14.04 LTS)