2016-03-23 98 views
2

我對WALA很陌生,試圖通過一些簡單的例子來了解它。我試圖建立了非常簡單的類調用關係圖如下WALA呼叫圖

public class Example { 
    public static void main(String[] args) { 
     int x = 1; 
     int y = 1; 
     int z = x + y; 
     Math.pow(x, y); // issue here 
    } 
} 

我WALA代碼(有所簡化)是:

import com.ibm.wala.ipa.callgraph.*; 
import com.ibm.wala.ipa.callgraph.impl.Util; 
import com.ibm.wala.ipa.cha.ClassHierarchy; 
import com.ibm.wala.util.WalaException; 
import com.ibm.wala.util.config.AnalysisScopeReader; 
... 

AnalysisScope scope = AnalysisScopeReader.makeJavaBinaryAnalysisScope(jar, null); 
ClassHierarchy cha = ClassHierarchy.make(scope); 
Iterable<Entrypoint> entryPoints = Util.makeMainEntrypoints(scope, cha); 
AnalysisOptions opts = new AnalysisOptions(scope, entryPoints); 
AnalysisCache cache = new AnalysisCache(); 
CallGraphBuilder cgBuilder = Util.makeZeroCFABuilder(opts, cache, cha, scope); 
CallGraph cg = cgBuilder.makeCallGraph(opts, null); 

它時,例如沒有任何電話工作正常到主要內部的其他方法,但只是掛起(卡住cgBuilder.makeCallGraph)。

任何意見是非常感謝。

+0

您是否在示例java文件中導入了? –

+0

我沒有,但添加了'import java.lang.Math'並重新運行,但仍然看到掛起。 – JPC

回答

4

這裏有一些選擇,這可能有助於使你的運行快一點

1)考慮您的分析選項去掉reflectionOptions。這會不會是偉大的更復雜的代碼,但是對於基本的例子,它可能會幫助 您可以通過

options.setReflectionOptions(ReflectionOptions.NONE); 

2這樣做)嘗試使用不同的建設者 例如

ZeroXCFABuilder.make(cha, options, cache, null, null, 
       ZeroXInstanceKeys.ALLOCATIONS | ZeroXInstanceKeys.CONSTANT_SPECIFIC); 

有更多選項,因此請檢查ZeroXInstanceKeys以查看您可能願意使用的選項。

3)最後,這很可能會給你一個良好的運行時間,添加排除

String exclusionFile = p.getProperty("exclusions"); 
    AnalysisScope scope = AnalysisScopeReader.makeJavaBinaryAnalysisScope(appJar, exclusionFile != null ? new File(exclusionFile) 

請注意排除文件

java\/awt\/.* 
javax\/swing\/.* 
sun\/awt\/.* 
sun\/swing\/.* 
com\/sun\/.* 
sun\/.* 

沒有空格下面的正則表達式結構,每行單個條目等。 這應該有幫助

+0

組合似乎解決了我的問題。謝謝 – JPC

+0

我會假設#3它是最重要的一個,祝你好運:) – Quantico

+0

@Quantico你對JavaScript調用圖生成有任何想法嗎? – mumu