JDB-ステッピング

この章では、プログラムのデバッグでステッピングの概念を使用する方法について説明します。ステッピングは、1行ずつステップ実行してコードを実行できるデバッガー機能です。これを使用して、コードの各行を調べて、意図したとおりに動作していることを確認できます。

ステッピングプロセスでは、次のコマンドが使用されます。

  • ステップ:次の実行行へのステップ
  • リスト:コード内のどこにいるかを調べます
  • 続き:残りの実行を続行します

次の例では、前の章で使用したAddクラスを使用しています。

public class Add
{
   public int addition( int x, int y)
   {
      int z = x + y;
      return z;
   }
   
   public static void main( String ar[ ] )
   {
      int a = 5, b = 6;
      Add ob = new Add();
      
      int c = ob.addition(a,b);
      System.out.println("Add: " + c);
   }
}

上記のファイルをAdd.javaとして保存します。次のコマンドを使用して、このファイルをコンパイルします。

\>javac Add.java

Addクラスのmain()メソッドにブレークポイントが設定されていると仮定します。次の手順は、Addクラスでステッピングを適用する方法を示しています。

ステップ1:ジョブを実行する

次のコマンドは、Addという名前のクラスの実行を開始します。

> run Add

このコマンドを実行すると、次の出力が表示されます。この出力では、実行がブレークポイントの位置、つまりmain()メソッドで停止していることがわかります。

mainメソッドの最初の行、つまり「int a = 5、b = 6;」で実行が停止します。またはコードの行番号:11。この情報は出力で確認できます。

ステップ2:コードをステップスルーする

次のコマンドは、実行を次の行に進めます。

main[1] step

ここで、実行は行番号12に進みます。次の出力が表示されます。

ステップ3:コードを一覧表示する

次のコマンドはコードを一覧表示します。

main[1] list

次の出力が得られます。Listコマンドは、プログラム制御が到達したコード内の行を通知するために使用されます。次のスクリーンショットの矢印マーク=>は、プログラムコントロールの現在の位置を示しています。

ステップ4:実行を続行する

次のコマンドは引き続きコードを実行します。

main[1] cont

このコマンドは、コードの残りの行を実行し続けます。出力は次のとおりです。

> Add:11
The application exited
\>

一般に、ステッピングには3つのタイプがあります。

  • ステップイン
  • ステップオーバー
  • 踏みでる

ステップイン

このコマンドを使用すると、コードの次の行に進むことができます。コードの次の行が関数呼び出しの場合、関数の最上行にあるコントロールを駆動して関数に入ります。

次のコードでは、矢印マークがコード内のコントローラーを定義しています。

public class Add
{
   public int addition( int x, int y)
   {
      int z = x + y;
      return z;
   }
   
   public static void main( String ar[ ] )
   {
      int a = 5, b = 6;
   -> Add ob = new Add();
      
      int c = ob.addition(a,b);
      System.out.println("Add: " + c);
   }
}

あなたが使用する場合 step intoコマンドを実行すると、コントローラーは次の行、つまり「int c = ob.addition(a、b);」に移動します。この行には、関数呼び出しがありますaddition(int, int) したがって、コントローラーは、以下に示すように、矢印マークが付いた加算関数の最上行に移動します。

public class Add
{
   public int addition( int x, int y)
-> {
      int z = x + y;
      return z;
   }
      
   public static void main( String ar[ ] )
   {
      int a = 5, b = 6;
      Add ob = new Add();
      
      int c = ob.addition(a,b);
      System.out.println("Add: " + c);
   }
}

ステップオーバー

ステップオーバーは次の行も実行します。ただし、次の行が関数呼び出しの場合は、その関数をバックグラウンドで実行し、結果を返します。

例を見てみましょう。次のコードでは、矢印マークがコード内のコントロールを定義しています。

public class Add
{
   public int addition( int x, int y)
   {
      int z = x + y;
      return z;
   }
   public static void main( String ar[ ] )
   {
      int a = 5, b = 6;
   -> Add ob = new Add();
   
      int c = ob.addition(a,b);
      System.out.println("Add: " + c);
   }
}

あなたが使用する場合 step overコマンドを実行すると、コントロールは次の行、つまり「int c = ob.addition(a、b);」に移動します。この行には、関数呼び出しがありますaddition(int, int) したがって、関数の実行はバックグラウンドで実行され、結果は次のように矢印マークが付いた現在の行に返されます。

public class Add
{
   public int addition( int x, int y)
   {
      int z = x + y;
      return z;
   }
   
   public static void main( String ar[ ] )
   {
      int a = 5, b = 6;
      Add ob = new Add();
      
   -> int c = ob.addition(a,b);
      System.out.println("Add: " + c);
   }
}

踏みでる

ステップアウトは次の行を実行します。次の行が関数呼び出しの場合、それはスキップされ、関数の実行はコードの残りの行から続行されます。

例を見てみましょう。次のコードでは、矢印マークがコード内のコントローラーを定義しています。

public class Add
{
   public int addition( int x, int y)
   {
      int z = x + y;
      return z;
   }
   
   public static void main( String ar[ ] )
   {
      int a = 5, b = 6;
   -> Add ob = new Add();
   
      int c = ob.addition(a,b);
      System.out.println("Add: " + c);
   }
}

あなたが使用する場合 step outコマンドを実行すると、コントローラーは次の行、つまり「int c = ob.addition(a、b);」に移動します。この行には、関数呼び出しがありますaddition(int, int) したがって、関数の実行はスキップされ、残りの実行は以下に示すように矢印マークで続行されます。

public class Add
{
   public int addition( int x, int y)
   {
      int z = x + y;
      return z;
   }
   
   public static void main( String ar[ ] )
   {
      int a = 5, b = 6;
      Add ob = new Add();
      
   -> int c = ob.addition(a,b);
      System.out.println("Add: " + c);
   }
}