Intellijでデバッグ中に戻る前に戻り値を確認できますか?


126

と:

Object method(){
    ...
    return /* some complex expression */
}

デバッグ中に返される値を確認する方法はありますか?どういうわけか、リターンの直後にヒットするブレークポイントを設定しますが、実行前に呼び出しコードに進みますか?戻り値が何であるかを知り、すべてのローカル変数の値を確認できるようにしたいと思います。

私が今行う方法は、一時変数を作成することですObject ret = /* something complex */; return ret;。しかし、それは面倒であり、余分な不要なコード行も追加します。

注:これは、Visual Studioでのデバッグ中に戻る前に戻り値を確認できますか、intellij と同じ質問です。

回答:


31

これを行うにはいくつかの方法があるようです。最初の方法では、メソッドシグネチャにブレークポイントを設定します。この場合、Object method(){にブレークポイントを設定します。これにより、メソッドの入口と出口を監視できます。上記の「ウォッチメソッドの戻り値」と組み合わせて使用​​する必要があると思いますが、計算に時間がかかりすぎるため、これを完全にテストすることはできませんでした。注意してください、これはデバッガーのパフォーマンスを劇的に低下させ、デバッグに時間がかかります。

また、以下を手動で行うこともできます。

  1. 戻り行にブレークポイントを設定します。
  2. 戻り行がヒットしたら、戻り行をクリックし、具体的には、表示したい操作にカーソルを置いて、Run-> Evaluate Expression(またはAlt-F8)に移動すると、その時点で式が実行され、それが返しているものを返します。

:ブレークポイントを作成する場合、ブレークポイントでブレークする場合、式を実行してログに記録するように指示できるなど、IDEAにブレークポイントを使用して実行できることはたくさんあります。ブレークポイントを右クリックしてプロパティをクリックすると、何ができるかを確認できます。

更新:これを最初の方法と組み合わせて試してください。「ウォッチメソッドの戻り値」を使用しないでください。デバッグセッションが遅くなったりフリーズしたりするようです。代わりに、以下を実行します

  1. 表示する戻り式を右クリックして、[ウォッチに追加]をクリックします。
  2. 次に、上記のようにメソッドブレークポイントを追加します。
  3. プログラムをデバッグすると、メソッドシグネチャでメソッドが壊れます。
  4. 継続し、それが再び破る必要があるためF9キーヒットAFTER return式が計算されていますし、あなたのリターン式は時計塔である必要があります。

メソッドブレークポイントの方が遅いため、時間がかかる可能性があることに注意してください。パフォーマンスに大きな影響があることに気付いた場合は、returnステートメントのブレークポイントを設定して(メソッドブレークポイントなしで)、メソッドブレークポイントを追加するだけです。AFTER return文ブレークポイントがヒットし、その後継続。

お役に立てれば、


1
実際、ブレークポイントとウォッチを(新しいX())に追加したら、そのウォッチでAlt + F8を実行するだけで、返されたオブジェクトを「分析」できます。これは本当に便利です。
Kedar Mhaswade、2014年

これを正しく理解している場合、ここで提案する解決策は、式に副作用がない場合にのみ機能します。一般的に、変数/ウォッチウィンドウに複雑な式を入れることはお勧めしません。
マシュマガル

少なくとも2016.3以降、もっと良い方法があります。詳細については、Birchlabsからの回答を参照してください。これが受け入れられた答えになるはずです。
Mikezx6r

150

IntelliJ IDEA 2016.3の場合:デバッグパネルの歯車ボタンの中に隠れています。チェックされていることShow Method Return Values確認します

IntelliJ IDEA 2016.3「メソッドの戻り値を表示」

デバッガーを使用して、戻り値を確認したい関数どこかでブレークします。

機能に入る

関数から出る(またはエスケープするまでステップオーバーする):

踏みでる

戻り値が変数に表示されることを確認します。

戻り値を観察する


3
@スタン私は答えを更新して、効果的な例を提供しました。
Birchlabs 2016年

40

あるウォッチメソッドの戻り値のボタンが利用可能で、デバッガパネル

メソッドの戻り値を監視:このボタンをクリックして、最後に実行されたメソッドの戻り値を監視します。

ウォッチメソッドの戻り値

IDEA 12の設定:

アイデア12


2
[変数]タブまたは[ウォッチ]タブに何も表示されないようです。それが重要であれば、私はGroovyを使用しています。また、メソッド自体のコンテキストからではなく、呼び出し元のコードのコンテキストから実行された最後のメソッドの戻り値が表示されるように見えます。これの重要な違いは、メソッド自体のコンテキストから確認できる場合は、メソッドのローカル変数の値も確認できることです。これにより、メソッドが誤った値を返した場合に問題が発生したかどうかを確認できます。
カイル

3
[変数]ペインに戻り値が表示されます(完全修飾メソッド名を使用)。これは受け入れられるべき答えでした。@CrazyCoder +1私から:-)
Omri Spector

4
@CrazyCoder:この機能はIDEA 13にも存在しますか?見つからない。
kevinarpe 2014

1
Intellij 15を使用していますが、これも表示されません。スクリーンショットを投稿できますか?
Sanjiv Jivan 2015年

3
2017年1月(アイデア2016.3.2):設定アイコン(2番目の画像の黄色のメニュー項目の真上にある歯車)をクリックする必要があります。メニューには、「メソッドの戻り値の表示」を含むメニューが表示されます。何も再起動する必要はありません。次のメソッドからの復帰後、そのObjectClassName.methodName()がこのすぐ下の変数ビューに表示されます。
18446744073709551615 2017年

1

これは先ほど尋ねられましたが、この状況に対処したい場合は別の方法を使用します。

デバッグするときは、式(この場合は「return」の直後の式)にマークを付け、CTRL + ALT + F8(Quick Evaluate Expression)を押します。IntelliJは、返される値を示す小さなウィンドウをポップアップします。


2
Intelグラフィックチップを使用している場合、このキーボードショートカットはセカンダリモニターをシャットダウンします
コリ

1
Linuxユーザー:Ctrl + Alt + F8-ユーザーを2番目のGUIターミナルに送ります。Ubuntuでは、Ctrl + Alt + F2を押して戻りました。
Dmitriy Pavlukhin
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.