框架断言
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
应该只是说断言无效.
如果您 graphviz
配置了 Frama-C 安装(即在配置 Frama-C 时可用,手动或通过 opam
),您可以双击 属性 在属性面板中,并且 window 应该打开 属性 的以下依赖关系图:
在里面,我们可以看到一个属性使用的所有假设,所以我们看到提到的"under hypotheses"是断言的可达性。 Eva(value
插件)计算的是可达状态的过度逼近,所以它不能证明给定的状态是可达的,只能证明它是不可达.
目前,唯一可以明确证明可达性状态的插件是PathCrawler。但是,在实践中这很少成为问题。
查看在假设下证明的 属性 的依赖关系的另一种方法是在命令行上使用 Report
插件:
$ frama-c -val c.c -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
--------------------------------------------------------------------------------
pending信息列出了完成证明所需的所有属性。对于由 Value/Eva 插件发出的法规,发出的唯一依赖始终是可达性依赖。
(这实际上是一种误导:第 n 个 属性 的状态实际上取决于属性 k[=24= 的状态] 与 k < n。这会生成一个太大的依赖关系图,因此不会跟踪这些依赖关系。)
最近我一直在使用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
应该只是说断言无效.
如果您 graphviz
配置了 Frama-C 安装(即在配置 Frama-C 时可用,手动或通过 opam
),您可以双击 属性 在属性面板中,并且 window 应该打开 属性 的以下依赖关系图:
在里面,我们可以看到一个属性使用的所有假设,所以我们看到提到的"under hypotheses"是断言的可达性。 Eva(value
插件)计算的是可达状态的过度逼近,所以它不能证明给定的状态是可达的,只能证明它是不可达.
目前,唯一可以明确证明可达性状态的插件是PathCrawler。但是,在实践中这很少成为问题。
查看在假设下证明的 属性 的依赖关系的另一种方法是在命令行上使用 Report
插件:
$ frama-c -val c.c -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
--------------------------------------------------------------------------------
pending信息列出了完成证明所需的所有属性。对于由 Value/Eva 插件发出的法规,发出的唯一依赖始终是可达性依赖。
(这实际上是一种误导:第 n 个 属性 的状态实际上取决于属性 k[=24= 的状态] 与 k < n。这会生成一个太大的依赖关系图,因此不会跟踪这些依赖关系。)