获取与 Db.Pdg.find_decl_var_node 的局部变量声明对应的节点

To get the node corresponding the declaration of a local variable with Db.Pdg.find_decl_var_node

*我写这个脚本是为了获取对应于局部变量声明的节点,在我的例子中 "val" 它在一个小程序 C 中,但我得到错误 Unexpected错误 (Not_found)。我认为我没有为我的方法提供正确的参数,尤其是 localisation 类型 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;

你说valmain中的局部变量,所以你不应该在全局范围内寻找它。相反,你应该这样做:

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