Сажа: Как перебрать все юниты в блоке catch? - PullRequest
0 голосов
/ 19 декабря 2018

Статический анализ делаю на файлы классов по саже.Я должен получить заявления в попытке и поймать блок отдельно.Я использую следующий код для получения succs обработчика исключений:

private static void test(SootMethod method){
    JimpleBody b = (JimpleBody) method.retrieveActiveBody();
    Chain<Trap> trapChain = b.getTraps();
    ExceptionalUnitGraph g = new ExceptionalUnitGraph(b);
    Iterator<Unit> unitIter = g.iterator();
    while (unitIter.hasNext()) {
        Unit u = unitIter.next();
        Iterator<Trap> trapIter = trapChain.iterator();
        while(trapIter.hasNext()){
            Trap trap = trapIter.next();
            if(u.equals(trap.getHandlerUnit())){
                System.out.println("excep: "+ u.toString());
                List<Unit> list = g.getExceptionalSuccsOf(u);
                for(int i = 0;i<list.size();i++){
                    System.out.println("Succs: "+list.get(i));
                }
                break;
            }
        }
    }
}

Однако результат содержит только запись блока catch, например: e = $r6, так как получить все операторы в блоке catch?

...