使用Db.Pdg.find_decl_var_node获取与本地变量声明相对应的节点

时间:2015-04-23 10:41:29

标签: frama-c

*我写了这个脚本是为了让节点对应一个局部变量的声明,在我的情况下是“val”,它在一个小程序C中,但我得到错误意外错误(Not_found)。我认为我没有给我的方法提供正确的论据,特别是本地化,这是类型Cil_types.localisation如果有人可以帮助我...... *

let main () =  
  let memo_debug = Kernel.Debug.get () in
  Kernel.Debug.set 1;
  File.pretty_ast ();
  Kernel.Debug.set memo_debug ;
  let kf =  Globals.Functions.find_def_by_name "main" in
  let pdg = !Db.Pdg.get kf in
  let localisation=Cil_types.VGlobal in
  let var=Globals.Vars.find_from_astinfo "val" z  in
  let node= !Db.Pdg.find_decl_var_node pdg var in  
  Format.printf "%a@." (!Db.Pdg.pretty_node false) node;

1 个答案:

答案 0 :(得分:4)

您说valmain中的局部变量,因此您不应该在全局范围内查找它。相反,你应该这样做:

let scope = Cil_types.VLocal kf in
let var=Globals.Vars.find_from_astinfo "val" scope in