IntelliJIDEAの高度なデバッグスキルとマルチスレッドデバッグスキル

1.条件付きブレークポイント
2.「前のステップ」に戻る
3.マルチスレッドデバッグ
4.リモートデバッグ
5.式の一時的な実行/変数の実行値の変更

条件付きブレークポイント

条件付きブレークポイントは、特定の条件(通常は式)が満たされたときにデバッグブレークポイントが有効になります。これはループでのデバッグに非常に役立ちます。たとえば、ループ本体でデバッグしたい場合:特定の変数が特定の条件がある場合、詳細な実行プロセスと変更を表示するには、ブレークポイントのデバッグが必要です。
前述のように、IDEAのデバッグ関数は非常に強力であり、条件付きブレークポイントの使用も非常に簡単です。次の図のConditionの内容は、名前がeamon:23の場合、プログラムの実行がブレークポイントで停止することを示しています。ブレークポイントの赤い原点を右クリックすると、ボックスがポップアップ表示されます。
ここに画像の説明を挿入

前のステップに戻る

ここに画像の説明を挿入
またはここに画像の説明を挿入
次の図ドロップフレーム見つけることもできます。IDEAでは、いわゆるロールバックはドロップフレームと呼ばれます。ドロップフレームを選択すると、プログラムは現在のメソッドが呼び出された場所にジャンプして戻ります。もちろん、変更した値は復元されません。ただし、メソッドが再度呼び出されると、特定の変数がいつ変更されたかを確認できます。少なくとも、プログラムを再度実行する必要はありません。
注:好奇心は人間の進歩のはしごです。この機能が「前に戻る」のようなものではなく「ドロップフレーム」と呼ばれる理由を知りたい場合は、JVMブックにアクセスしてください。JVMはスレッドの実行をスタックフレームに保存します。状態、ドロップフレームは、現在実行中のスタックフレームを破棄することを意味します。これにより、現在の「ポインタ」の位置は自然に前のフレームの位置に移動します。

マルチスレッドデバッグ

アイデアでデバッグする場合、コードには複数のスレッドがあります。スレッド内のコードを追跡したいのですが、コードは次のとおりです。

        for (int i = 0; i < 5; i++) {
            final int index = i;
            executorService.execute(new Runnable() {
                @Override
                public void run() {
                    System.out.println(index);
                }
            });
        }

上記のコードでは、次のように3つのブレークポイントがヒットしました。
ここに画像の説明を挿入

デバッグはレベルに分割されていることがわかりますここに画像の説明を挿入
。all 、threadのデフォルトはallで、このスレッドのブレークポイントまでしかデバッグされません。threadに変更すると、Threadをスワップしてデバッグできます。

注:スレッドデバッグを開始する場合は、すべてのブレークポイントがスレッドタイプである必要があることに注意してください。そうでない場合でも、入力できません。たとえば
ここに画像の説明を挿入
、ブレークポイント1にすべてのブレークポイント2とブレークポイント3を使用しました。スレッドタイプの場合、ブレークポイント3にはまったく入力できないことがわかります。入力すると、次のプロンプトが表示され、ここに画像の説明を挿入
プロセスを切り替えることができます

ここに画像の説明を挿入

リモートデバッグ

ソースコードが利用可能である限り、マシンはプロジェクトを開始する必要はありません。サーバー上のコードは、マシン上で直接デバッグできます。開く姿勢は次のとおりです。

4.1プロジェクトの開始時に、最初にリモートデバッグを許可します

 java -server -Xms512m -Xmx512m -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=9081 -Djava.ext.dirs=. ${main_class}

何が機能するか

-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=9081

注:技術的に言えば、リモートデバッグは、ローカルマシンとリモート間のスコケット通信を確立することであるため、ポートが競合しないようにし、マシンがリモートポートへのアクセスを許可する必要があります。さらに、このパラメーターは-の前に配置する必要があります。 jarまたは$ {main_class}

アイデアにリモートデバッグを設定するここに画像の説明を挿入
と、デバッグできます。ここに画像の説明を挿入
マシンにプロジェクトのソースコードがあり、必要な場所でブレークポイントに到達してから、リモートURLにアクセスしようとすると、ブレークポイントが停止することが前提です。

式を一時的に実行する/変数の実行値を変更する

デバッグするときは、一時的にいくつかの式を実行することができます以下の図を参照してください。。これらの2つのアイコンのいずれかをクリックしここに画像の説明を挿入
+記号をクリックしたら、新しく登場し、入力ボックスに式を入力することができ、そのような5 I +などここに画像の説明を挿入
して、戻る結果をすぐに確認できます。ここに画像の説明を挿入
もちろん、デバッグ中に変数の値を動的に変更する場合は、変数を右クリックして[値の設定]を選択するのは簡単です。世界の他の地域はすべてを知っています。
ここに画像の説明を挿入

総括する

上記のデバッグスキルを上手に活用すれば、コードを手に取ったときにより快適に感じるでしょう。

おすすめ

転載: blog.csdn.net/qq_40093255/article/details/115177712