Отключение фазы оптимизации сажи - PullRequest
1 голос
/ 16 апреля 2020

У меня есть пример кода, который я хочу проанализировать, например:

public class myTest {
  public void foo() {
    int x = 1;
    int y = 2;
    int z = 10;

    x = 10;

    y = z + 1;

    System.out.println(x + y);
  }
}

Soot возвращает мне этот код Jimple:

    public void foo()
    {
       br.unb.cic.analysis.samples.SourceSinkVariableAttributionSample this;
        int $stack4, y#4;
        java.io.PrintStream $stack5;

        this := @this: br.unb.cic.analysis.samples.SourceSinkVariableAttributionSample;

        y#4 = 10 + 2;

        $stack5 = <java.lang.System: java.io.PrintStream out>;

        $stack4 = 10 + y#4;

        virtualinvoke $stack5.<java.io.PrintStream: void println(int)>($stack4);

        return;
    }

Soot оптимизирует код, в конечном итоге Стирание ссылки на x и замена ее на 10. Мне нужна эта ссылка для моего анализа, поэтому я решил, что эта конкретная оптимизация происходит в фазе Jimple Local Aggregator (jb.a), которая также вызывает запуск Unused Local Eliminator (jb.ule). (поскольку после первой оптимизации х станет неиспользованным локальным). Я хотел отключить эту фазу, поэтому попробовал следующее, но оно не сработало.

    PhaseOptions.v().setPhaseOption("jb.a", "enabled:false");

и

    Options.v().setPhaseOption("jb.a", "enabled:false");

Что я мог сделать не так?

1 Ответ

0 голосов
/ 16 апреля 2020

Ваш код выглядит хорошо, но когда он вызывается? Может быть, это слишком поздно?

...