【发布时间】:2016-03-24 17:06:01
【问题描述】:
我正在开发一个 Frama-C-Plugin,它应该在每个语句之后打印变量的值。 在 Frama-C-Gui 的值选项卡中,我可以看到整个程序的分析值,以及在不同的函数调用之后(使用函数的参数)。
我现在想在每个函数调用之后获取值(不是“all”行,而是“main”行。
这是我用于截图的程序:
void swap (int *a, int *b){
int tmp = *a;
*a = *b;
*b = tmp;
return;
}
int main (void){
int a=1;
int b=2;
swap (&a, &b);
a = 3;
b = 4;
swap (&a, &b);
}
这可能吗? 如何访问这些值?
PS:我问了一个相关问题,它已经打印了“全部”部分(以及语句之前的值),请参阅此链接: Frama-C Plugin development: Getting result of value-analysis
有没有类似的解决方案?
【问题讨论】:
-
我相信我可能已经在您的其他问题中回答了这个问题。如果是这样,可能值得关闭这个(尽管我建议将屏幕截图添加到另一个问题中,并添加诸如“......就像 GUI 所做的那样,就像在这个面板中一样”之类的评论,因为拥有它通常很高兴一些图片作为例子)。
-
顺便说一句,理想情况下,通过查看源代码(在本例中为
src/plugins/value/gui_eval.ml),应该可以推断出至少部分代码(例如,在本例中为Db.Value.get_stmt_state_callstack,用于第 231 和 235 行),但我同意这样做通常太麻烦。尽管如此,还是值得记住这一点,因为它可以提供一些关于在 API 中搜索哪些函数的提示。
标签: ocaml frama-c value-analysis