エンジニアの将来って?

現在6年目の元COBOL現Javaエンジニアが、将来への考えや勉強のアウトプット、たまに腎臓について書くブログです

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

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

目次

下準備

「値の変更」の解説に使うプログラムはこちら。

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);」を実行する前に止まります。

ラムダ式で書かなかった理由はこれです。
今回のデバッグでは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: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が表示できました!
では、このままループを進めましょう。

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に変更できました!
では、この状態でプログラムの実行を進めていきましょう。

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で「値の変更」をしていきます。 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]に変わりました!
では、このまま実行しましょう。

f:id:Tairax:20171211103433p:plain

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

まとめ

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

 

勉強関連でいろいろ書いてますので、良ければご参考ください。

今までブログで書いたJavaのアウトプット記事のまとめ

私が基本情報処理試験に合格したときの勉強方法をご紹介します!

MTBF、MTTRの違いは?それらを使って表す稼働率とは?情報処理試験の午前問題で出された問題もまとめました!