IDE(eclipse)のデバッグ実行、ステップ実行(Java)

##はじめに
この記事は現在Javaを勉強する方に向けた私自身の理解している内容の記録です。

統合開発環境でJavaのコードをデバッグ実行し、ステップ実行で動作確認することが多いので、その一連の流れを記載しようと思います。

## Eclipseをインストール
Javaの統合開発環境で今時点で無料で使えるeclipseをインストールしましょう。下記リンクでダウンロードできます。

https://mergedoc.osdn.jp/

今時点での最新版のeclipse 2020を選択。

<img width="1295" alt="スクリーンショット 2020-05-15 10.17.48.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/447784/43013a02-7a74-33fb-299e-883acc715940.png">

すると下記画像の画面が出てきます。今回は私の環境に合わせてインストールしていきます。Macで64bitCPUであり、Javaの環境が必要なので、下記赤枠を選択します。

<img width="790" alt="スクリーンショット 2020-05-15 10.27.14.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/447784/a0eafef0-1ac0-d523-ef80-8c304df8512a.png">

ダウンロードページに遷移され、自動でダウンロードが始まります。ダウンロードができたらファイルを開き、アプリケーションに移しましょう。

<img width="305" alt="スクリーンショット_2020-05-15_10_36_25.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/447784/4d86596c-ed88-0b4f-35cb-8cb7e5d37327.png">

##デバッグ実行用のクラス作成

これでMacにインストールできました。早速起動しましょう。すると画像のような画面が表示されるので、Javaプロジェクトの作成を選択します。

<img width="1022" alt="スクリーンショット_2020-05-15_10_54_32.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/447784/5534fd44-52c1-169f-2417-b5f40015c83e.png">

作成を選択すると、画像の画面が出てきます。今回はJavaファイルを動かしてデバッグ実行したいので、プロジェクト名だけ入力して完了します。

<img width="810" alt="スクリーンショット_2020-05-15_10_58_45.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/447784/9142ea12-00b7-8def-1975-9101414d0e65.png">

完了したらプロジェクトが作成されるので、プロジェクト内にクラスを作りましょう。右クリックで新規、クラスを選択して作成画面が表示されます。

<img width="578" alt="スクリーンショット_2020-05-15_11_06_15.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/447784/93e071b3-ac79-a845-84a5-573ed059972f.png">

作成画面が表示されたら、名前をMainにし、public static void main(String args[]) にチェックを入れて完了にします。

<img width="586" alt="スクリーンショット_2020-05-15_11_10_19.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/447784/255ccfc8-92b7-bbb6-b20e-0ad7b570e6d2.png">

これでクラスが作成できたので、下記のコードをeclipseのエディタに入力します。

```java
public class Main{
    int instans = 60;
    static int global = 95;

    static void debug(){
        System.out.println("デバッグ実行");
    }

    void print(){
        System.out.println("print()");
    }

    public static void main(String args[]){
        Main.debug();
        System.out.println("main start");

        int x = 50;

        String str = "文字型";

        Main m = new Main();

        x = 100;

        str = "文字型変換";

        m.print();

        System.out.println("main end");
    }
}
```

このコードをデバッグ実行し、どのように動いているのかを確認していきます。

## ブレークポイント
ここからデバッグ実行に入りますが、デバッグ実行を行うには、プログラムを止める場所を先に指定する必要があります。それをブレークポイントと言います。実際にeclipseでブレークポイントの設定をしましょう。

```
System.out.println("main start");
```

今回は上記の箇所にブレークポイントを設定します。eclipseエディタの上記コードの行数の左側を右クリックし、メニューを表示してブレークポイントの切り替えを選択します。

<img width="357" alt="スクリーンショット_2020-05-15_11_33_58.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/447784/38297281-dea2-cd0e-cf5f-e949eff3810e.png">

この設定でデバッグ実行ができるので、eclipseの左上の虫マークを選択します。ここでデバッグ実行が始まります。

<img width="1256" alt="スクリーンショット_2020-05-15_11_43_40.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/447784/311268f8-c3f7-327f-de20-e8dffa427dfd.png">

これでデバッグ機能が立ち上がります。そして先ほど設定したブレークポイントで処理が止まっています。
そのため、ブレークポイント前に動作する「デバッグ実行」の出力は出ており、下のf「main end」は出力されていません。
よって、2つの処理の間に置いているブレークポイントで処理が止まっているのがわかります。

<img width="1258" alt="スクリーンショット_2020-05-15_11_47_15.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/447784/e998f931-4789-3615-1b7d-3bc42626a865.png">

## ステップ実行
ここまでは処理を止めるところまでですが、処理を1行ずつ進めるステップ実行を行なってみましょう。上記の続きでステップオーバーボタンをクリックします。

<img width="1263" alt="スクリーンショット_2020-05-15_11_55_58.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/447784/b27ecc13-b20e-3186-f4e7-8a61bd7712ac.png">

クリック後は止まっている処理が1行実行され、選択状態が次の行に映ります。ブレークポイントを

```
System.out.println("main start");
```

にしていて、ステップ実行で1行実行されたので、出力欄にmain startが表示されています。

<img width="1258" alt="スクリーンショット_2020-05-15_13_02_56.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/447784/75348118-cfc3-2ba0-2799-701b718076a4.png">

１行ずつ動いているステップ実行のイメージができたと思うので、さらにステップオーバーボタンを2回押して進めてみましょう。
エディタの右側に変数のリストがありますが、内容が更新されています。

<img width="942" alt="スクリーンショット_2020-05-15_13_13_19.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/447784/c977988f-95eb-c693-af66-ff791d82d8f6.png">

2回ステップ実行を行なったことで、変数の定義と初期化を行なっています。

```java
int x = 50;
String str = "文字型";
```

この2つの処理が通ることにより、変数の今時点で保持している値が表示できます。さらにステップオーバーボタンを3回クリックして進めてみましょう。

<img width="941" alt="スクリーンショット_2020-05-15_13_17_39.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/447784/cf116ed5-d0a2-56e5-99f6-3b05f8b5ffad.png">

3回ステップ実行を行い、変数xとstrの値が更新される処理があります。

```java
x = 100;
str = "文字型変換";
```

そのため変数リストの今時点での値が更新されています。

ちなみに間の処理で変数mを定義しており、生成したインスタンスを代入しています。

```java
Main m = new Main();
```

Mainクラスはインスタンス変数instansがあるので、こちらも定義されているのを確認できます。
変数リストの変数名mの右矢印をクリックしましょう。

<img width="946" alt="スクリーンショット_2020-05-15_13_25_18.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/447784/f1c8faf2-241e-7263-32bb-93404a2211ab.png">

このようにインスタンス変数も確認できます。
ちなみにstatic変数が表示されないのは、static変数が独立した要素であり、変数mが持っているのではないので表示はされません。

## 終わりに
この記事ではIDEでのデバッグ実行を行い、その中で重要なステップ実行で1行ずつ動作確認する手順を記載しました。

実行中でプログラムが見ている時点での値の状態がわかるので、動作確認をするときに、任意のタイミングで自分の意図した値が入っているかを確認することができるので、デバッグ実行を取り入れてみてはいかがでしょうか。