10

逆コンパイルされたコードで条件付きブレークポイントを設定しようとしていますが、Eclipse でエラーが発生し続けます。

条件付きブレークポイントにコンパイル エラーがあります

理由: 評価には、式または整形式のステートメントのブロックが含まれている必要があります

私のケースは非常に単純で、文字列値と比較しようとするだけです。次のすべてを試しましたが、すべてでエラーが発生します。

myObj.toString() == "abc123"
myObj.toString().equals("abc123")
if(myObj.toString() == "abc123"){ return true; }
true == true

また、行末にセミコロンがあるかどうかのすべての組み合わせ、スペースと改行のすべての組み合わせ、状態を囲む {} の有無のすべての組み合わせも試しました。基本的に、これが機能しない理由はわかりません...

デバッグしようとしているコードは、JD-Eclipse で逆コンパイルされた jar 内にあります。このコードでは、通常のブレークポイントが正常に機能します。

ここで何が起こっているのか知っている人はいますか?

4

6 に答える 6

4

このEclipseFAQページには、適切なCBP定義の構文と、それらが機能しない最も一般的な理由が含まれています。あなたの場合、次のことが当てはまると思います。

これは、クラスファイルにローカル変数テーブルが含まれていないクラスにブレークポイントを設定している場合に発生する可能性があります。たとえば、Class.forName(String)に条件付きブレークポイントを設定するとします。rt.jarのソース添付ファイルがある場合、コンテンツアシストを使用すると、変数名classNameで引数を参照できます。ただし、デバッグ実行時には、クラスファイルにローカル変数テーブルが含まれている場合にのみ変数名がわかります。コンパイル時に使用されるオプションによっては、この情報がクラスファイルから削除されている場合があります。

JDは、jarの逆コンパイル中に変数名を作成した可能性があるため、条件式で「myObj」を使用すると、コンパイル時エラーが発生します。

于 2012-04-20T15:27:26.530 に答える
2

条件付きブレークポイントは、一般的に機能するよりも少ないかもしれません。たとえば、次のように考えてください。

https://bugs.eclipse.org/bugs/show_bug.cgi?id=278146

于 2012-04-27T16:04:10.143 に答える
1

日食のバグかもしれません。Eclipse が行うことは、ブレークポイントを設定したファイルのソースに新しいメソッドなどを織り込んでコンパイルすることです。このプロセスで何か問題が発生すると、条件付きブレークポイントが不思議なことに失敗します。

以下で使用したアプローチに従って、デバッグでEclipseを実行して問題を追跡することができます:-

https://bugs.eclipse.org/bugs/show_bug.cgi?id=341232#c21

于 2013-01-02T08:55:02.107 に答える
1

「true == true」条件の場合は、return ステートメントを追加するだけです。

return true == true;

残りの問題については、ローカル変数テーブルが欠落していることを説明する必要があります。そのためにマザネイチャに+1。

于 2015-11-23T23:34:52.143 に答える
1

「true == true」条件の場合は、return ステートメントを追加するだけです。

return true == true;

残りの問題については、ローカル変数テーブルが欠落していることを説明する必要があります。そのためにマザネイチャに+1。

メソッドの引数をその名前で参照しようとしている場合は、名前を「arg0」、「arg1」などに変更してみてください。

たとえば、次のようにできます。

arg0 == null

変数名を推測するのは簡単です。無条件ブレークポイントを配置して、変数ビューで変数のリストを確認するだけです。

于 2015-11-23T23:43:17.407 に答える