通过与 EMMA 合作,我注意到它无法正确检测导致类被破坏。下面是一个突出这个问题的简单示例。
public void showProblem() {
try {
for (int i = 0; i > 10; i++) {
System.out.println(i);
}
} catch (final Throwable e) {
System.err.println(e);
}
}
仪表类
public void showProblem()
{
boolean[][] tmp3_0 = $VRc; if (tmp3_0 == null) tmp3_0; boolean[] arrayOfBoolean = $VRi()[1]; int i = 0; arrayOfBoolean[0] = true; tmpTernaryOp = tmp3_0;
try
{
do
{
Throwable e;
System.out.println(e);
e++; arrayOfBoolean[1] = true; arrayOfBoolean[2] = true; } while (e > 10); arrayOfBoolean[3] = true;
}
catch (Throwable localThrowable1)
{
System.err.println(localThrowable1); arrayOfBoolean[4] = true;
}
arrayOfBoolean[5] = true;
}
请注意,它正在尝试增加e
类型Throwable
并在while
循环中使用它。
我发现通过在for
循环中移动 try catch 逻辑可以解决这个问题。如以下代码中突出显示的那样。
public void showProblem() {
for (int i = 0; i > 10; i++) {
try {
System.out.println(i);
} catch (final Throwable e) {
System.err.println(e);
}
}
}
仪表类
public void showProblem()
{
boolean[][] tmp3_0 = $VRc; if (tmp3_0 == null) tmp3_0; boolean[] arrayOfBoolean = $VRi()[1]; int i = 0;
Throwable e;
arrayOfBoolean[0] = true; tmpTernaryOp = tmp3_0;
do {
try { System.out.println(i); arrayOfBoolean[1] = true;
} catch (Throwable localThrowable1) {
System.err.println(localThrowable1); arrayOfBoolean[2] = true;
}
i++; arrayOfBoolean[3] = true; arrayOfBoolean[4] = true; } while (i > 10);
arrayOfBoolean[5] = true;
}
有没有其他人遇到过这些问题?
设置
- 视窗 7 64
- Java 1.6.0_24 64 位
- 艾玛 v2.0,内部版本 5312
解决方案
所以事实证明,问题与 eclipse 正在构建到类中的调试信息有关。这是在使用 Android 生成的 ant 脚本执行时观察到的,javac
并且同样导致了该问题。禁用此功能使 EMMA 能够成功处理类文件。
我希望这些信息对其他人有所帮助。