【发布时间】:2021-10-05 15:02:38
【问题描述】:
是否可以使用 Frama-C 跟踪变量并切片它接触的所有代码?例如考虑以下程序:
#include <stdio.h>
#define SIZE 512
int storage[SIZE];
void insert(int index, int val) {
storage[index] = val;
}
int main(int argc, char *argv[]) {
int x = 10;
int y = 20;
int z = 30;
z = 0; /* some change to unrelated var */
insert(x, y);
return 0;
}
我对变量 x 的预期切片是:
#include <stdio.h>
#define SIZE 512
int storage[SIZE];
void insert(int index, int val) {
storage[index] = val;
}
int main(int argc, char *argv[]) {
int x = 10;
int y = 20;
insert(x, y);
return 0;
}
我怎样才能做到这一点?到目前为止,我已经尝试关注frama-c slice_issue.c -no-frama-c-stdlib -kernel-msg-key -slice-value x -then-on 'Slicing export' -print。它生成以下切片:
/* Generated by Frama-C */
int main(void)
{
int __retres;
int x = 10;
__retres = 0;
return __retres;
}
如果我在 slice 命令中提供-slice-calls insert,我可以获得预期的输出。但是有没有什么方法可以在不明确指定切片命令中的函数名的情况下获得相同的效果?
提前致谢。任何提示或指向文档将不胜感激。
【问题讨论】:
标签: frama-c