Eclipseでデバッグ中に戻る前に戻り値を見つけることはできますか?
-
03-07-2019 - |
質問
行が実行された後、命令ポインタが呼び出し元の関数に戻る前に、メソッドの戻り値を確認することは可能ですか?
変更できないコードをデバッグしています<読み取り>:サードパーティのライブラリを再コンパイルしたくない、そして時々ソースがないコードにジャンプしたり、リターン式には副作用があり、表示タブで式を実行することができなくなります。
多くの場合、戻り値は複合ステートメントで使用されるため、 Variables ビューには値が表示されません(したがって、制御が呼び出し関数に戻る前に結果を確認する必要があります)。
更新:ステートメントに副作用があるため、式ビューアを使用できません。
解決
この機能は、 Eclipseバグ40912 の下でEclipseバージョン4.7 M2に追加されました。 a>。
使用するには:
-
return
ステートメントをステップオーバーします(&quot; Step Over&quot;または&quot; Step Return&quot;を使用) - 変数ビューの最初の行に、&quot; [statement xxx]が返されたときのreturnステートメントの結果が表示されます:&quot;
他のヒント
このための非常に良いショートカットが見つかりました。 値を返す式を選択して
を押しますCtrl + Shift + D
これにより、returnステートメントの値が表示されます。これは、デバッグ目的だけで変更できない、または変更したくない場合に非常に役立ちます。
これがお役に立てば幸いです。
注:サードパーティのライブラリでこれをテストしていませんが、私のコードでは正常に機能しています。 これをWeb開発者向けのEclipse Java EE IDEでテストしました。バージョン:Juno Service Release 1
これは実際にはEclipseの長年のバグで、IDEの最初の日からさかのぼります: https://bugs.eclipse.org/bugs/show_bug.cgi?id=40912
だからこそ、私は常にメソッドについて次のパターンに固執しています:
MyReturnedType foo() {
MyReturnedType result = null;
// do your stuff, modify the result or not
return result;
}
私のルール:
- 1つのreturnステートメントのみ、メソッドの最後にのみ(最終的に許可されます)
- 常に、デフォルトから開始して、戻り値を保持するローカルの呼び出された結果があります。
当然、最も些細なゲッターは免除されます。
この質問に対する答えも知りたいと思っています。
過去、そのようなサードパーティのライブラリを扱うとき、私がしたことは、親クラスに委任するラッパークラスまたは子クラスを作成し、ラッパー/子クラスでデバッグを行うことでした。ただし、余分な作業が必要です。
&quot;メソッドから戻ると、上部のメソッドの変数ビューに、以前に終了した呼び出しの戻り値が表示されます&quot; [1]
タフな方。 Eclipse以外での私の経験では、戻り値を確認する必要がある場合は、関数のローカル変数に割り当ててreturnステートメントが単純な return varname;
になるようにするのが最善です return(some * expression || other);
ではありません。ただし、コードを変更したり、再コンパイルしたりすることはできない(またはしたくない)と言うので、これはあまり役に立ちません。そのため、良い答えがありません。おそらく要件を再検討する必要があります。
returnステートメントに応じて、返される式を強調表示し、右クリックメニューから「式の評価」のようなものが表示されるはずです。 (私の前では日食はありませんが、それはそのようなものです)。返される内容が表示されます。
これは少し手間がかかりますが、簡単な方法ではないようです:
AspectJを使用して、興味のあるメソッドの戻り値を保持するアスペクトをJARに装備できます。Eclipseのドキュメントによると、AspectJプログラムは他のプログラムと同様にデバッグ
ライブラリを再コンパイルせずにクラスを編成するには、次の2つのオプションがあります。
-
バイナリJARの処理が許容される場合、コンパイル後のウィービング;
-
ロード時間ウィービング。VMでウィービングエージェントをアクティブにする必要があります。
Eclipseのドキュメント(上記のリンク)および AspectJ開発も参照してください。環境ガイド。