職業訓練でJavaを学ぶ!15日目(2/2)「Javaプログラミング実習」
職業訓練で、Javaを使ったWebシステム開発・Androidアプリ開発を学ぶことになりました。復習かねて情報発信をします!
これから職業訓練に通うことを検討している方の参考になれば嬉しいです。
↓↓職業訓練に通うことになった経緯はこちら
https://note.mu/yukoro/n/ned8d43b0110d
本日の授業内容
・プログラムのテスト
・デバッグ ←この記事
デバッグ
デバッグはプログラムがきちんと動作しているかをチェックして、動作しない場合の原因となるバグを修正する作業です。
バグは多くの場合、文法ミスやスペルミスではありません。
例)バグ
158円と198円の商品購入代金(356円)を消費税込で計算。
384円になるはずだが、383円と表示されてしまった。
原因)
全ての商品の税抜き合計額を出してから、税込み額を出すべきところを
商品ごとの税込み額を出して、その合計金額を算出していた
■デバッガ
プログラミングに用いる開発ツールの一つで、プログラムを1行づつ実行して、内部で使用する変数の状態や制御の流れをじっくり確認することでバグがないかを発見することができます。
あくまでも間違いの発見を助けてくれるツールであり、間違えを自動で修正してくれるものではありません。
試しに簡単なプログラムを書いてデバッグを実行してみましょう。
まずは簡単な足し算を行うプログラムを作ってみました。
public static void main(String[] args) {
int a = 5;
int b = 10;
int c = a + b;
System.out.println(c);
}
↓出力結果
-----------
15
-----------
このプログラムに「ブレークポイント」をつけます。
ブレークポイントをつけたい行の数字の部分をダブルクリックすると、行番号の左側に小さな青い○印がつきました。(再度ダブルクリックで削除)
このブレークポイントでデバッグの実行範囲を決めることができます。ブレークポイントを作成しないとデバッグが正常に動作しないようです。
次にデバッグを実行してみます。
Eclipseでは下記のような虫のマークのメニューでデバッグを実行することができます。デバッグしたい対象ファイルを選択した状態で、このデバッグボタンをクリック > Javaアプリケーション と進みます。
するとパースペクティブ切り替えの確認画面が出てきますので「切り替え」を選択します。
するとEclipseの画面がデバッグに適したパースペクティブに切り替わります。カーソル位置がブレイクポイントの始まりの行になっています。
デバッグ用のパースペクティブに切り替わると、Eclipseメニューの構成も変わります。以下のようなメニューが追加されています。
<黄色い下線のメニュー>
左:次のブレークポイントまで進む
左から2番目:再生中の一時停止ボタン
左から3番目:デバッグの終了
左から5番目:ステップ実行(1行づつ実行)/ステップ・イン
左から6番目:ステップ実行(1行づつ実行)/ステップ・オーバー
※ステップ・イン/ステップ・オーバーの違いは後ほど触れます。
それではブレークポイントの最初の行にカーソルがある状態で、ステップ実行をクリック(今回はどちらでも良い)してみます。
すると実行結果が「変数ビュー」に表示されました。aという変数の中に5という値が格納されているという結果が表示されています。
8行目までステップ実行を繰り返してみます。
10行目にカーソルがきた段階で、再生ボタン(次のブレークポイントまで進む)をクリックしてデバッグを終えます。これでデバッグ完了です。
このようにデバッグは1行づつプログラムを実行して、じっくりプログラムにバグがないかの確認をすることができます。
■ステップ実行の違い
デバッグ用のパースペクティブに切り替えて出てきたメニューの中に、ステップ・オーバー/ステップ・インというものがありましたが、その違いについて説明します。
ステップ・イン(左)
– メソッドの呼び出しがあるステートメントではメソッドの中に入っていく
ステップ・オーバー(右)
– メソッドの呼び出しがあるステートメントではメソッドを実行するがメソッド内には入らない
実際にやってみたいと思います。
先ほどのプログラムにgetNum()メソッド利用して、デバッグを行なってみます。
//300を返すgetNumメソッド
private static int getNum() {
int x = 100;
int y = 200;
int z = x + y;
return z;
}
public static void main(String[] args) {
int a = 5;
int b = 10;
//getNumメソッドの利用
a = getNum();
int c = a + b;
System.out.println(c);
}
例)ステップイン
ステップインボタンを押していくと、途中でgetNum()メソッドの中に入り込んでプログラムを実行します。
例)ステップオーバー
ステップオーバーボタンを押していくと、getNum()メソッドの行を通過して、int c = a + b; の行に進みました。
■デバッグの終了
デバッグ作業が終了したら、デバッグ終了ボタンを押して必ずデバッグモードを終えるようにしましょう。デバッグ用のメニューがグレーになっている状態がデバッグを終えているということです。
・デバッグ中
・デバッグ終了
また、デバッグが完了したらEclipseの画面を通常のパースペクティブに戻します。Eclipse右上から二番目のJavaを選択します。
デバッグについては以上です。
最後までお読みいただきありがとうございました!
この記事が気に入ったらサポートをしてみませんか?