Jdb-stepping
JDB-ステッピング
この章では、プログラムのデバッグでステッピングの概念を使用する方法について説明します。 ステップ実行は、1行ずつステップ実行してコードを実行できるデバッガー機能です。 これを使用して、コードの各行を調べて、意図したとおりに動作していることを確認できます。
次のコマンドは、ステッピングプロセスで使用されます。
- ステップ:次の実行行へのステップ
- リスト:コードのどこにいるかを調べます
- cont:残りの実行を継続します
例
次の例では、前の章で使用した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);
}
}
ステップオーバー
また、Step Overは次の行を実行します。 ただし、次の行が関数呼び出しの場合、その関数はバックグラウンドで実行され、結果が返されます。
例を挙げましょう。 次のコードでは、矢印マークがコード内のコントロールを定義しています。
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);
}
}
踏みでる
Step Outは次の行を実行します。 次の行が関数呼び出しの場合、それはスキップされ、関数の実行はコードの残りの行から続行されます。
例を挙げましょう。 次のコードでは、矢印マークがコード内のコントローラーを定義しています。
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);
}
}