2015-04-23 72 views
0

相应的局部变量的声明*我为了得到这是一点对应的局部变量的声明节点,在我的情况“VAL”写这个剧本程序C但我得到错误意外的错误(Not_found)。我想,我没有给正确的论点我的方法特别本地化它的类型是Cil_types.localisation如果有人可以帮助我... *要获取节点与Db.Pdg.find_decl_var_node

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 "%[email protected]" (!Db.Pdg.pretty_node false) node; 
+0

我做这一行了一个错误,让VAR = Globals.Vars.find_from_astinfo“VAL” Z在它的定位,而不是ž,但它依然不工作... –

回答

4

你说val是一个局部变量main,所以你不应该在全球范围内寻找它。相反,你应该做的:

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

谢谢。您!有用!但是,如果“val”是主体之外的全局变量。我怎么能得到它?也为下面这个例子,为什么它,如果我用一个值初始化VAL不行!= 0,或者如果我初始化b相0? –

+0

你可以得到的变量,''Cil_types.VGlobal'',但不是因为PDG的PDG节点是一个功能,因此对于全局声明没有节点。 – Anne

+0

好的!在这种情况下,而不是“让KF = Globals.Functions.find_def_by_name‘主’中”,我应该写什么有PDG其中可能包含的所有 –