2016-03-23 2 views
2

Я очень новичок в WALA и стараюсь проработать некоторые простые примеры, чтобы почувствовать это. Я пытаюсь построить граф вызовов для очень простого класса нижеWALA Call Graph

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

Смежные вопросы