为什么在Frama-C值分析中无法访问代码?

时间:2013-11-24 04:42:43

标签: frama-c value-analysis

使用某些基准测试运行Frama-C值分析时,例如susan中的http://www.eecs.umich.edu/mibench/automotive.tar.gz,我们注意到很多块被认为是死代码或无法访问。但是,实际上,这些代码是在我们从这些块中打印出一些调试信息时执行的。有人注意到这个问题吗?我们怎样解决这个问题?

2 个答案:

答案 0 :(得分:4)

你的代码有一个特殊性,它不在Pascal的列表中,它解释了死代码的某些部分。相当多的函数被声明为

 f(int x, int y);

完全没有返回类型。 C标准表明此类函数应返回int,而Frama-C遵循此约定。在解析这些函数时,它表明它们从未在某些路径上返回任何内容

Body of function f falls-through. Adding a return statement.

在return语句的顶部,Frama-C还添加了一个/*@ assert \false;注释,以指示不返回任何内容的函数的执行路径应该是死代码。在您的代码中,此注释始终为false:这些函数应返回void,而不是int。您应该使用良好的返回类型更正您的代码。

答案 1 :(得分:2)

Frama-C价值分析结果中死代码的出现归结为两个方面,即使这两个方面只是人类意图的问题,与分析仪的观点无法区分。

  1. 每次达到特定声明时确实发生的真正错误。例如,y = 0; x = 100 / y;之后的代码无法访问,因为程序每次都在分区停止。一些应该是运行时错误的错误并不总是停止执行,例如写入无效地址。认为自己很幸运,他们在Frama-C的价值分析中做到了,而不是相反。
  2. 缺乏分析上下文的配置,包括没有提供信息性的main()函数,该函数使用Frama_C_interval()这样的内置函数设置程序输入的变化范围,缺少既没有规范的库函数也没有提供替换代码,C程序中的汇编代码,当适当的时候缺少选项-absolute-valid-range,......