[英]Why is code unreachable in Frama-C Value Analysis?
使用某些基准(例如, http://www.eecs.umich.edu/mibench/automotive.tar.gz
: susan
中的susan
运行Frama-C值分析时,我们注意到许多块被认为是无效代码或无法访问。 但是,实际上,这些代码是在我们从这些块中打印出一些调试信息时执行的。 有没有人注意到这个问题? 我们该如何解决呢?
您的代码具有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
。 您应该使用良好的返回类型来更正代码。
Frama-C的价值分析结果中死代码的产生可以归结为两个方面,甚至这两个方面也只是人为的问题,从分析仪的角度来看是无法区分的。
y = 0; x = 100 / y;
之后的代码y = 0; x = 100 / y;
y = 0; x = 100 / y;
之所以无法访问,是因为该程序每次都会在该部门停止。 一些应该是运行时错误的错误并不总是会停止执行,例如,写入无效地址。 让自己感到幸运的是,他们参与了Frama-C的价值分析,而不是相反。 Frama_C_interval()
类的内置函数来设置程序输入的变化范围,缺少缺少规范或替换代码的库函数,C程序中的汇编代码,如果合适的话,缺少选项-absolute-valid-range
,...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.