如何过滤Frama-C中“报告”插件生成的.csv?

时间:2019-06-10 23:40:04

标签: frama-c

当前我正在执行:

frama-c -wp -wp-rte -report-rules test_rules.json -wp-split -wp-fct max -wp-status-maybe -wp-status-invalid -wp-timeout 10 -wp-prover alt-ergo -wp-par 12 -warn-signed-overflow -warn-unsigned-overflow -warn-special-float non-finite test.c -then -report-csv test.csv

我阅读了文档,但是没有找到很好的解释此JSON文件如何工作的解释。我在GitHub上找到了一些代码。但是对于Frama-C新手来说,这仍然不小。

我想拥有一个CSV,其状态仅与Valid不同的行并且仅在te​​st.c文件中(不具有依赖项)。可以通过JSON配置完成此操作,还是必须编写自定义解析器?

1 个答案:

答案 0 :(得分:1)

我认为那里存在一些误解:-report-rules选项旨在与-report-json结合使用。它对-report-csv无效,它将始终输出整个属性列表。实际上,-report-csv的重点是将结果文件导入到另一个工具中,以便执行您感兴趣的任何操作。例如,您可以简单地在自己喜欢的电子表格编辑器中打开该文件并对其进行构建-在过滤器中。但是,还有许多编程选项。在以here编写的脚本为基础的情况下,下面是将解释器与库一起使用的示例

>>> import pandas
>>> df = pandas.read_csv("test.csv",sep="\t")
>>> print('There are ' + str(len(df)) + ' properties.')
There are 77 properties.
>>> df = df[df['function']=='merge']
>>> print('There are ' + str(len(df)) + ' properties.')
There are 39 properties.
>>> df = df[df['status']=='Unknown']
>> print('There are ' + str(len(df)) + ' properties.')
There are 3 properties.
>>> print('There are ' + str(len(df)) + ' properties.')
>>> df.to_csv(path_or_buf='res.txt',sep='\t')

这为我提供了与文件Unknown中的函数merge相关的3个res.csv属性(我没有立即可用的多文件示例,但是您当然只有在第一个查询中使用file字段)。请记住,“ csv”文件实际上是用表格分隔的,而不是用逗号分隔的(因为逗号通常出现在ACSL公式中,后者不太实用)。