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
内で this を使用していることに注意してください。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 はクラス ファイルを正常に処理できるようになりました。
この情報が他の人に役立つことを願っています。