web-dev-qa-db-ja.com

Eclipseでデバッグ中に戻る前に戻り値を見つけることはできますか?

行が実行された後、命令ポインタが呼び出し元の関数に戻る前に、メソッドの戻り値を確認することはできますか?

変更できないコードをデバッグしています(読み取り:サードパーティのライブラリを再コンパイルしたくない)、時にはコードにジャンプしますソースがない、またはreturn式に副作用があるため、Displayタブで式を実行することができません。

多くの場合、複合ステートメントで戻り値が使用されるため、Variablesビューには値が表示されません(したがって、制御が戻る前に結果を確認したい)呼び出し関数に)。

PDATE:ステートメントに副作用があるため、式ビューアを使用できません。

98
RodeoClown

この機能は Eclipse bug 40912 でEclipseバージョン4.7 M2に追加されました。

使用するには:

  • returnステートメントをステップオーバーします(「Step Over」または「Step Return」を使用)
  • これで、変数ビューの最初の行にreturnステートメントの結果が表示され、「[statement xxx]が返されました:」

Eclipse Project Oxygen(4.7)M2-New and Noteworthy を参照してください。

35
Daniel Meyer

これに対する本当に良いショートカットを見つけました。値を返す式を選択して押します

Ctrl + Shift + D

これにより、returnステートメントの値が表示されます。これは、デバッグ目的だけで変更できない、または変更したくない場合に非常に役立ちます。

お役に立てれば。

注:サードパーティのライブラリでこれをテストしていませんが、私のコードでは正常に機能しています。これをテストしましたEclipse Java EE IDE Web開発者向け。バージョン:Juno Service Release 1

34
Satish

そのため、私は常にメソッドについて次のパターンに固執しています:

MyReturnedType foo() {
     MyReturnedType   result = null;

     // do your stuff, modify the result or not

     return result;
}

私のルール:

  1. メソッドの最後にのみ、1つのreturnステートメント(最終的に許可されます)
  2. デフォルトから開始して、戻り値を保持するローカルに呼び出される結果が常にあります。

当然、最も些細なゲッターは免除されます。

5
zvikico

これは実際にはEclipseの長年のバグであり、IDEの最初の日からさかのぼります。 https://bugs.Eclipse.org/bugs/show_bug.cgi?id=40912

5
Arjan Tijms

この質問に対する答えも知りたいと思っています。

過去に、そのようなサードパーティライブラリを扱うとき、私がしたことは、親クラスに委任するラッパークラスまたは子クラスを作成し、ラッパー/子クラスでデバッグを行うことでした。ただし、余分な作業が必要です。

2
DJ.

「メソッドから戻ると、上部のメソッドの変数ビューに、以前に終了した呼び出しの戻り値が表示されます」[1]

[1] https://coffeeorientedprogramming.wordpress.com/2016/09/23/Eclipse-see-return-value-during-debugging/

1
ejaenv

これは少し難解ですが、簡単な方法はないようです。

AspectJを使用して、興味のあるメソッドの戻り値を保持するアスペクトをJARに装備できます。Eclipseのドキュメントによると、AspectJプログラムは他のプログラムと同様に debugged にできます。

ライブラリを再コンパイルせずにクラスを作成するには、2つのオプションがあります。

  • バイナリJARの処理が許容できる場合は、コンパイル後のウィービング。

  • ロード時間ウィービング。VMでウィービングエージェントをアクティブ化する必要があります。

Eclipseのドキュメント(上記のリンク)と AspectJ開発環境ガイド も参照してください。

0
Olivier

難しいもの。 Eclipse以外での私の経験では、戻り値を確認する必要がある場合は、関数のローカル変数に割り当てて、returnステートメントがreturn(some * expression || other);ではなく単純なreturn varname;になるようにするのが最善です。 。ただし、コードを変更したり、再コンパイルしたりすることはできない(またはしたくない)と言うので、それはあなたにとって恐ろしくは役に立ちません。したがって、良い答えはありません。おそらく、要件を再検討する必要があります。

0

Returnステートメントに応じて、返される式を強調表示し、右クリックメニューから「式の評価」のようなものがあるはずです(今は私の前にEclipseがありませんが、それはそのようなものです) )。返される内容が表示されます。

0
stephmara