如何使用此函数 Db.Slicing.Select.select_stmt 和 frama-C
How to use this function Db.Slicing.Select.select_stmt with frama-C
标题中的函数具有以下签名:
val select_stmt :
(set -> spare:bool -> Cil_types.stmt -> Cil_types.kernel_function -> set)
Pervasives.ref
我想使用这个函数,但我的问题是关于类型为 type set = SlicingTypes.Fct_user_crit.t Cil_datatype.Varinfo.Map.t
的参数 set
。我不知道如何初始化这个参数,然后我想打印结果。
就在 select_stmt
上方,您有值 empty_selects
,其文档表明它代表一个空选择。在那之后,切片的 API 有点神秘,但如果我没记错的话,你应该能够通过以下几行(未测试)获得切片:
let prj =
Db.Slicing.(
let sp = !Project.mk_project "my slicing project" in
let selection = Select.(!select_stmt empty_selects s kf) in
let () = Request.add_selection sp selection in
Project.extract "my frama-c project" sp)
in
File.pretty_ast ~prj ()
基本上,您必须创建一个切片项目,您可以在其中设置一定数量的选项,尤其是您想要的切片标准。当您对切片项目的状态感到满意时,您可以从中提取一个新的 Frama-C 项目,并正常打印这个新项目(当然您也可以对其进行其他分析)。
标题中的函数具有以下签名:
val select_stmt :
(set -> spare:bool -> Cil_types.stmt -> Cil_types.kernel_function -> set)
Pervasives.ref
我想使用这个函数,但我的问题是关于类型为 type set = SlicingTypes.Fct_user_crit.t Cil_datatype.Varinfo.Map.t
的参数 set
。我不知道如何初始化这个参数,然后我想打印结果。
就在 select_stmt
上方,您有值 empty_selects
,其文档表明它代表一个空选择。在那之后,切片的 API 有点神秘,但如果我没记错的话,你应该能够通过以下几行(未测试)获得切片:
let prj =
Db.Slicing.(
let sp = !Project.mk_project "my slicing project" in
let selection = Select.(!select_stmt empty_selects s kf) in
let () = Request.add_selection sp selection in
Project.extract "my frama-c project" sp)
in
File.pretty_ast ~prj ()
基本上,您必须创建一个切片项目,您可以在其中设置一定数量的选项,尤其是您想要的切片标准。当您对切片项目的状态感到满意时,您可以从中提取一个新的 Frama-C 项目,并正常打印这个新项目(当然您也可以对其进行其他分析)。