У меня есть пример кода, который я хочу проанализировать, например:
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");
Что я мог сделать не так?