Blacky Blog

外資系IT企業でエンジニアをしています。 ここでは自分が読んだ本、勉強していることなど None Tech の情報を発信しています。

プログラミング

[初心者向け] Java 独学: 5. コンパイルとデバッグ: 例外処理: その 1

投稿日:6月 7, 2019 更新日:

みなさん、こんにちわ。

このシリーズは、Java を独学で学んでいただける方法で、初心者でも開発者としてのベースの知識ができます。実際に手を動かせるよう環境設定の方法も載せています。Java のサイトや本を読んで学んだだけの方でも、挫折せず、自分で手を動かせるような構成にしていますのでおすすめの方法です。

フリューゲル

[初心者向け] Java 独学: 5. コンパイルとデバッグ: 例外処理: その 1

前回は、エラーの種類について紹介しました。エラーが発生したときに原因調査するためによく使われる方法としてデバッグという方法があります。デバッグは2つの特徴があります。

1. エラーの詳細がわかる

まず、エラーが発生した原因を詳細に調査ができます。例えば、エラーが発生したときに画面に何も出てこなかったらなんでエラーになったのかわかりませんよね。その時は、デバッグするとエラーの詳細がわかります。

2. 動かしながら確認できる

もう一つは、デバッグするとプログラムを動かしながら確認することができます。コードの10行目でエラーが発生している場合、それより前の行の変数がどういう値が入っているのか、1行1行確認しながら調査できます。

早速やってみましょう。

import java.util.Scanner;

public class Lesson5_Debug
{
    public static void main(String[] arg)
    {
        Scanner sc = new Scanner(System.in);
        System.out.println("Please enter number.");
        String in = sc.nextLine();
        sc.close();
        int enternumber = Integer.parseInt(in);
        System.out.println("10 / number = "+Integer.toString(10/enternumber));
        return;
    }
}

上記は10を入力した数字で割っている結果を出力しています。0 を入力するとエラーが発生しました。結論から言うと 10/0 だからです。算数の問題ですね。ただ、一旦エラーの原因がよくわからないからと仮定してデバッグしてみます。

デバッグの準備

まず最初にデバッグの準備をします。デバッグのアイコンをクリックします。

次に、アイコンをクリックします。

launch.json に入力します。

“console”: “integratedTerminal”

以上で準備は完了です。

フリューゲル

デバッグ開始

では早速デバッグします。まずやることは、どこでエラーになっているかわかっているので、そこにブレイクを付けます。12行目の左側をクリックすると赤くなりますね。

main メソッドの上にある [Debug] をクリックします。

入力を促されるのでそのまま 0 を入力します。

すると12行目が黄色くなりました。これは12行目で処理が止まっていることを示しています。

ローカル変数の値を見る

この状態で左側の画面を見てください。これは、main メソッド内にある変数の中身に何が設定されているかわかります。例えば、”in” 変数は、9 行目で入力した “0” 文字列が入っているのがわかります。さらに、”enternumber” は、11行目で “in” 変数をint 型に変換した結果、数字の 0 が入っているのがわかります。

これらはコード上でマウスオーバーしても見れます。以下は、”in” 変数に上にマウスすると変数の中身がポップアップされた例です。

自分で色々試してみる

続いて、ウォッチを紹介します。これはかなり重要で使える機能です。

Watch というエリアに行を挿入して “enternumber” と入れてください。

すると、” enternumber ” の変数の中身が見えたのがわかります。これは、自動的に一致する変数をとってきてくれます。すごい。

次に、以下のように入力します。

すると、 enternumber 変数の値 + 10 の結果がどうなるかわかります。すごすぎる。

意地悪なこともできます。 enternumber 変数という数字と aa という文字列を割ります。ありえないですよね。

するとちゃんとどんなエラーになるかがわかります。すごい。すごい。

では、話を戻します。今回のエラーは12行目で起きていましたね。

12 行目を見ると、 10/enternumber の結果をString 型にして出力しています。

では、 10/enternumber を実行するとどうなるか、ウォッチしてみましょう。

はい、エラーがでましたね。10/0 は計算できないのでエラーになったことがわかります。

これで原因はわかりました。入力が 0 入れたことが原因です。なので、 入力された値をチェックなどいくつか対処策が思いつきますね。

まとめ

このようにデバッグは、プログラミングだけでは気づかないことがよくわかったと思います。コードを書いたら一度デバッグして色々試してみましょう。

フリューゲル

-プログラミング
-, , ,

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

[初心者向け] Java 独学: 5. コンパイルとデバッグ: 例外処理: その 2

みなさん、こんにちは。 このシリーズは、Java を独学で学んでいただける方法で、初心者でも開発者としてのベースの知識ができます。実際に手を動かせるよう環境設定の方法も載せています。Java のサイト …

[初心者向け] Java 独学: 4. オブジェクト指向: クラス

みなさん、こんにちは。 このシリーズは、Java を独学で学んでいただける方法で、初心者でも開発者としてのベースの知識ができます。実際に手を動かせるよう環境設定の方法も載せています。Java のサイト …

[初心者向け] Java 独学: はじめに

皆さんこんにちは、Blackyです。 これらからシリーズでプログラミング言語の Java を学んでいただける記事を書いていきます。Java って難しいイメージないですか? これを読めば、Java を独 …

[初心者向け] Java 独学: 2. データ型、変数、式を理解する: データ型を変換する

みなさん、こんにちは。 このシリーズは、Java を独学で学んでいただける方法で、初心者でも開発者としてのベースの知識ができます。実際に手を動かせるよう環境設定の方法も載せています。Java のサイト …

[初心者向け] Java 独学: 4. オブジェクト指向: インスタンス化して使用する

みなさん、こんにちは。 このシリーズは、Java を独学で学んでいただける方法で、初心者でも開発者としてのベースの知識ができます。実際に手を動かせるよう環境設定の方法も載せています。Java のサイト …