#15 Javaで学ぶデバッグの基本

Javaのデバッグは、開発環境(IDE)に統合された強力なデバッガー機能を使うのが一般的です。この記事では、Javaにおけるデバッグの基本的な方法を解説します。

System.out.println()でその場の状態を確認する

System.out.println("ageの中身: " + age);

もっとも手軽な方法ですが、変数が増えるほどコードが散らかってしまいます。`System.out.printf("age=%d, name=%s%n", age, name);`のように書式を指定できる`printf`を使うと、複数の変数の状態を1行で見やすく出力できます。

スタックトレースを読む

Javaで例外が発生すると、「スタックトレース」という、どのメソッドを経由してエラーが起きたかを示す情報が表示されます。一番上に書かれた行が、実際にエラーが発生した場所です。

Exception in thread "main" java.lang.NullPointerException at Main.greet(Main.java:5) at Main.main(Main.java:2)

上から下に向かって「どのメソッドがどのメソッドを呼び出したか」という呼び出し順が並んでいます。最初は一番上の行だけに注目すれば十分です。慣れてきたら、下の行をたどることで「そもそもなぜそのメソッドが呼ばれたのか」という経緯も追えるようになります。

IDEのデバッガー機能

IntelliJ IDEAやEclipseといったJava向けの開発環境には、強力なデバッガー機能が統合されています。ブレークポイントを設定して処理を一時停止させ、その時点の変数の中身を確認しながら、1行ずつ処理を進められます。

ブレークポイントで止めた後は、「ステップオーバー(1行ずつ進める)」「ステップイン(呼び出し先のメソッドの中に入る)」「ステップアウト(今のメソッドを抜けて呼び出し元に戻る)」という3つの操作を状況に応じて使い分けます。さらに「ウォッチ式」という機能を使うと、任意の式(例: `list.size() > 0`)を登録しておき、その値が変化するたびに確認できるので便利です。

assertで前提条件を確認する

assert age >= 0 : "ageは0以上である必要があります";

`assert`は「ここでは絶対にこの条件が成り立っているはずだ」という前提をコード中に明示できる仕組みです。開発中に想定外の値が紛れ込んでいないかを早期に検出するのに役立ちますが、実行時に`-ea`オプションを付けないと無効化される点には注意が必要です。

Javaならではの注意点

Javaの開発では、`System.out.println`によるデバッグよりも、IDEのデバッガー機能を使うことが強く推奨されます。特に複雑なクラス同士のやり取りを追う際は、デバッガーを使ったほうが圧倒的に効率的です。本格的なアプリケーションでは`System.out.println`の代わりに、ログの重要度(INFO・WARN・ERRORなど)を指定できるログ出力ライブラリ(SLF4Jなど)を使うのが一般的で、デバッグ用の出力を後から一括でオフにできる利点もあります。

まとめ

Javaのデバッグはスタックトレースの読解と、IDEのデバッガー機能の活用が基本です。ブレークポイントやウォッチ式、`assert`も組み合わせながら、積極的にデバッガーの使い方に慣れていきましょう。


本ページはプロモーションを含みます。

参考書籍(PR)

Javaをもっと学びたい方には「スッキリわかるJava入門 第4版」がおすすめです。


PR

コードを書かずに自動化したい方へ

「学んだけど自分の作業に組み込む時間がない」という方向けに、ダブルクリックで動く Windows専用の自動化ツールをオーダーメイドで作成しています。気になる方は こちらをご覧ください。

コメント

このブログの人気の投稿

#25 Rustで学ぶAI API(ChatGPT等)の呼び出し方の基本

#8 C++で学ぶ文字列操作の基本

#16 TypeScriptで学ぶ辞書型(マップ)の基本