[英]Frama-c Assertion
最近我一直在使用frama-c
,我遇到了一个有点令人困惑的问题。
我用frama-c
编写了一个非常简单的程序,它是这样的:
void main(void)
{
int a = 3;
int b = 4;
/*@ assert a == b;*/
}
我希望frama-c
说断言无效,这在GUI
中用红色子弹显示,但frama-c
说断言根据值无效(在假设下),用橙红色子弹显示。
我的问题是为什么frama-c
说断言在假设下无效?
可能的假设是什么?
我问这个是因为我的程序非常简单,我在我的程序中找不到任何与断言相关的假设或依赖关系,我猜frama-c
应该只是说断言无效。
如果您使用 Frama-C 安装配置了graphviz
(即在手动或通过opam
配置 Frama-C 时可用),您可以双击“属性”面板中的属性,然后会打开一个窗口,其中包含以下内容属性的依赖图:
在其中,我们可以看到一个属性使用的所有假设,因此我们看到提到的“下假设”是断言可达性的假设。 Eva( value
插件)计算可达状态的过度近似,因此它不能证明给定状态是可达的,只能证明它是不可达的。
目前,唯一可以确定可达性状态的插件是PathCrawler 。 然而,在实践中,这很少成为问题。
查看假设下证明的属性的依赖关系的另一种方法是在命令行上使用Report
插件:
$ 框架-c -val cc -then -report
[report] Computing properties status...
--------------------------------------------------------------------------------
--- Properties of Function 'main'
--------------------------------------------------------------------------------
[ Alarm ] Assertion (file c.c, line 5)
By Value, with pending:
- Unreachable program point (file c.c, line 5)
--------------------------------------------------------------------------------
--- Status Report Summary
--------------------------------------------------------------------------------
1 Alarm emitted
1 Total
--------------------------------------------------------------------------------
待定信息列出了完成证明所需的所有属性。 对于 Value/Eva 插件发出的法规,发出的唯一依赖将始终是可达性的。
(这实际上是一种误导:第n个属性的状态实际上取决于k < n的属性k的状态。这会生成一个太大的依赖关系图,因此不会跟踪这些依赖关系。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.