2015-04-23 54 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其中可能包含的所有 –