ゲーマーときどきエンジニア

基本ゲーム記事を書いて、ときどき考えを発信するエンジニアのブログです!

【Java】eclipseのデバッグ機能の「値の変更」をできるだけわかりやすく解説します

こんにちは。たいら(@tairaengineer2)です。
今回の記事はJavaで開発する人ならだれでもお世話になるeclipseでのデバッグの機能の1つである「値の変更」です。
デバッグ機能の「値の変更」を使って、String型の変数やString型配列の変更するやり方を、3年Javaエンジニアをしたたいらができるだけわかりやすく解説します。

ArrayListの「値の変更」の解説は↓記事をご参照ください。

www.tairax.com

HashMapの「値の変更」の解説は↓記事をご参照ください。

www.tairax.com

スポンサーリンク

 

前提条件:eclipseの環境

この記事では、eclipseのバージョンは

バージョン Eclipse4.7 Oxygen

を使っています。
インストールの仕方は、下の記事をご参考ください。

www.tairax.com

下準備

String型の変数やString型配列の「値の変更」の解説に使うプログラムは下のプログラムです。
String型配列をfor文で回して、表示させるという単純なプログラムです。

Java

package debug;
/**
 * デバッグで「値を変更する」を練習するクラス
 *
 */
public class DebugTest {
    public static void main(String[] args) {
        String[] debugList = {"aaa","bbb"};

        System.out.println("---値を変更する前---");
        for (String debug : debugList) {
            System.out.println(debug);
        }

        System.out.println("---値を変更した後---");
        for (String debug : debugList) {
            System.out.println(debug);
        }

    }
}

ラムダ式で書いていないのは理由があるので、後述します。
これを何も指定せず実行すると下記のようになります。

値を変更しない時の実行結果

---値を変更する前---
aaa
bbb
---値を変更した後---
aaa
bbb

ではデバッグしていきます。
そもそも「値の変更」とはデバッグモードで指定した変数の値を変更してテストをやりやすくするための機能です。
では実際にやってみます。
まず、String型の変数、次にString型配列で「値の変更」をしていきます。

String型の変数で「値の変更」

では、変数でデバッグしていきましょう。
準備として18行目にブレークポイントを設定します。
ブレークポイントとは、通常の「実行」ではなく「デバッグ」で実行した場合、ブレークポイントで指定した行を実行する前で止まってくれるポイントです。

f:id:Tairax:20171207123037p:plain

今回で言うと18行目の「System.out.println(debug);」を実行する前に止まります。

ブレークポイントの設定の仕方については、以下の記事をご参考ください。

www.tairax.com

ラムダ式で書かなかった理由はこれです。
今回のデバッグではString型変数をfor文でループしているときに変更したかったので、拡張for文で書きました。 eclipseの上部にある「実行」タブに「デバッグ」があるのでそこをクリック。

f:id:Tairax:20171207123443p:plain

するとブレークポイントの指定した通りに止まってくれます。

f:id:Tairax:20171207124039p:plain

もちろん中断中なので、画面に出力していません。

f:id:Tairax:20171207124150p:plain

ブレークポイントで中断しているとデバッグ画面になり、画面右上に「変数」タブ、「ブレークポイント」タブ、「式」タブがあります。

f:id:Tairax:20171211104311p:plain

そこで「変数」タブを選択。

f:id:Tairax:20171207124257p:plain

「変数」タブでは、今の変数の状態を表示してくれます。
変数debugはString型の"aaa"ですね。
debugの値を変更するために、debugを選択している状態で右クリック。

f:id:Tairax:20180724223620p:plain

すると、「値の変更」という項目があるのでそこをクリック。

f:id:Tairax:20171207125044p:plain

こんな画面が現れます。
ここで変数debugの値を変更していきます。
たとえばcccに変更します。

f:id:Tairax:20171207125229p:plain

この状態で「OK」ボタンを押すと。

f:id:Tairax:20171207125409p:plain

aaaからcccに変更できました!
では、この状態でプログラムの実行を進めていきましょう。
1行ずつ進める場合はF6ボタンを押すか、または

f:id:Tairax:20180415181828p:plain

この赤枠で囲っている矢印のボタンを押します。
これはステップオーバーと言って、1行ずつ処理を進めてくれるものです。

f:id:Tairax:20171207130054p:plain

変更後の値であるcccが表示できました!
では、F6ボタンまたはステップオーバーを押してループを進めましょう。

f:id:Tairax:20171207124039p:plain

するとさっきと同じ場所で止まります。

f:id:Tairax:20171208124800p:plain

でも、変数debugの中身は違います。
ループが進んだからですね。
「変数」タブで、また「値の変更」をしていきましょう。

f:id:Tairax:20171208125042p:plain

今回はbbbからdddに変更しましょう。

f:id:Tairax:20171208125207p:plain

「OK」ボタンを押します。

f:id:Tairax:20171208125331p:plain

bbbからdddに変更できました!
では、この状態でF8ボタンかまたは

f:id:Tairax:20180424073226p:plain

赤枠で囲っている再開ボタンを押します。
この再開ボタンは、次のブレークポイントまで一気に処理が進みます。
なのでこのプログラムでは次のブレークポイントが無いので、プログラムの最後まで処理が進みます。
では、再開ボタンを押してみます!

f:id:Tairax:20171208125526p:plain

実行終了しまして、無事に値を変更して出力することが出来ました!

 

スポンサーリンク

 

String型配列で「値の変更」

では、配列でデバッグしていきましょう。
ブレークポイントですが、配列のときは変数の場合と設定する行が違います。

f:id:Tairax:20171208164242p:plain

16行目に設定します。
前回はループの中で変数を逐一変更していましたが、今回は一気に変えます。
では「デバッグ」をします。

f:id:Tairax:20171208172356p:plain

指定通り16行目で中断しています。

f:id:Tairax:20171208174713p:plain

16行目を実行する前なので、「---値を変更した後---」を出力していません。
この状態で「変数」タブを確認します。

f:id:Tairax:20171208175003p:plain

値を変更する前なので、debugListの中身は[aaa, bbb]となっています。
今回はdebugListで「値の変更」をしていきます。

f:id:Tairax:20180724224706p:plain

debugListを選択している状態で右クリックして、「値の変更」という項目があるのでそこをクリック。

f:id:Tairax:20171208180103p:plain

おー、変数を変更したときとは違う画面が出てきました。
これは型の違いです。String型はプリミティブ型、String型の配列は参照型だからです。
debugListの値を変更するために

new String[]{"ccc","ddd"}

と入力しましょう。

f:id:Tairax:20171211101907p:plain

この状態で「OK」ボタンを押すと。

f:id:Tairax:20171211102611p:plain

debugListが一気に[ccc, ddd]に変わりました!
では、このまま一気に実行しましょう。
F8ボタンかまたは再開ボタンを押します。

f:id:Tairax:20171211103433p:plain

変更した通りに表示されました!
これString型配列の「値の変更」ができますね。

 

スポンサーリンク

 

まとめ

以上がString型の変数やString型配列でのデバッグの「値の変更」の解説になります。
皆さんのご参考になれば幸いです。
ではでは~(* ̄▽ ̄)ノ

 

他にもJavaの勉強記事を書いてますので、良ければご参考ください。

【Java】標準入力から判定して、じゃんけんゲームをするプログラム

【Java8】mapToObjメソッドを使ってFizzBuzz問題【ラムダ式】

 

今までブログで書いたJavaの解説記事のまとめは、こちらをご参考ください。

【Java】ブログで書いた文法記事のまとめ