1. バグ
プログラマーには独自のスラングがありますが、多くの人はそれを技術用語だと考えています。いずれにせよ、スラングとの出会いも、その深掘りも避けられません。さあ、慣れていきましょう。
最初に覚える言葉の一つがバグ、英語の bug(虫)に由来する語です。これは、プログラムが意図しないことをしたり、期待どおりでない動作をするなど、プログラム中の誤りを指します。単に挙動が奇妙な場合も含みます。
しかし、プログラマーが「挙動は奇妙だが、それが狙いどおりだ」と考えるときは、たいてい「それはバグではなくフィーチャーです」といったことを宣言します。これが多くのインターネット・ミームを生みました。
誤動作の原因は基本的に何でもあり得ます。プログラムのロジックの誤り、タイプミス、設計の誤り、さらにはコンパイラの問題まで。いずれにせよ、プログラマーは実際のバグも、プログラムにあるその他のあらゆる「不備」も修正する必要があります。
bug という語の歴史
この語の起源として最も広まっているのは次の逸話です。
1947年9月、ハーバード大学の研究者たちが初期のコンピューターの一つ Mark II をテストしていました。コンピューターは動作せず、すべての基板を調べる過程で、電気機械式リレーの接点の間に挟まっているガが見つかりました。
取り出した虫は技術日誌にテープで貼り付けられ、「バグを発見し除去した」との注記が添えられました。
この愉快な話が、「バグ」という言葉を誤りの意味で使うきっかけとなり、「デバッグ」(debug)が誤り除去の同義語として使われ始めたとされています。

2. プログラムのデバッグ
自分たちのプログラムのバグを取り除くために、開発者はデバッガ(debugger)という専用ツールを使います。これらのツールの中には機械語さえデバッグできるものもあります。
Java 開発者は自分のプログラムのデバッグ(debugging)に IDE を使います。IntelliJ IDEA、Eclipse、NetBeans などです。IntelliJ IDEA は現時点で最も強力な IDE の一つなので、本稿ではその例でデバッグの手順を見ていきます。
IntelliJ IDEA はあなたのプログラムを次の 2 つのモードで起動できます:
| プログラムの起動モード | ツールバーのアイコン | ショートカットキー |
|---|---|---|
| 通常実行 | |
Shift+F10 |
| デバッグ実行 | |
Shift+F9 |
通常モードにはすでに慣れているでしょう。プログラムは起動して実行され、終了します。一方、デバッグモードには多くの発見があります。
デバッグモード
デバッグモードでは、プログラム全体をステップ実行できます。より正確には行単位、つまり1 行ずつです。その際、各ステップ(各行の実行後)で変数の値を観察できます。さらに、その値を変更することさえできます。
デバッグの基本を身に付けるには、次の 3 つを覚えれば十分です。
- ブレークポイント
- ステップ実行
- 変数値の確認
3. ブレークポイント(Break Points)
IDE では、コード内に特別な印—ブレークポイント(break point)—を置けます。デバッグモードで起動したプログラムが、break point としてマークされた行に到達するたびに、プログラムは一時停止します。
特定の行にbreak point を置くには、IDEA でその行の左側(ガター)をクリックするだけです。例:
その結果、行はブレークポイント(break point)でマークされ、IntelliJ IDEA はその行を赤色でハイライトします。
コード左のガターをもう一度クリックすると、設定済みのbreak point は解除されます。
また、現在行にbreak point を置くには、ショートカット Ctrl+F8 を使えます。同じ行で Ctrl+F8 を再度押すと、その break point は削除されます。
4. デバッグモード(デバッグ)でのプログラム起動
プログラムにブレークポイントが 1 つでもあれば、デバッグモード(Shift+F9 または「虫のアイコン」)で起動できます。
デバッグモードで起動しても、プログラムは通常どおり実行されます。ただし、break point が付いた行に到達した瞬間に一時停止します。例:
スクリーンショットの上半分には、2 つのブレークポイントがあるプログラムのコードが表示されています。プログラムは 5 行目で停止しており(青いラインで示されています)、5 行目はまだ実行されていません。コンソールにはまだ何も出力されていません。
画面の下半分にはデバッグ用のパネルが表示されています。Debugger パネル、Console (画面出力)パネル、そしてデバッグ用の各種ボタンです。
左下のパネルにある Resume Program ボタン(または F9 キー)を押すと、一時停止を解除して実行を続けられます。
このボタン(または F9)を押すと、プログラムは次のブレークポイントに出会うまで、または終了するまで実行を続けます。ボタン押下後は次のように表示されます。
プログラムは 2 つ目のブレークポイントで停止し、コンソールには Privet と I という語が出力されています。これは、画面出力の 3 行のうち 2 行だけが実行されたことを示します。
5. ステップ実行
プログラムがデバッグモードで動作している場合、1 ステップ=1 行のステップ実行もできます。ステップ実行には F7 と F8 の 2 つのショートカットがあります。どちらも現在行を実行します。ただし、まずはbreak point を使ってプログラムを停止させる必要があります。
プログラムを行単位で実行したい場合は、main() メソッドの冒頭にbreak point を置き、デバッグモードで起動します。
プログラムが停止したら、行単位の実行を開始できます。F8 キーを 1 回押すと 1 行実行されます。
停止後に F8 を 1 回押した直後のプログラムは次のように見えます。
main メソッドの最初の行はすでに実行されており、現在行は 2 行目です。スクリーンショット下部を見ると、画面に Privet という語が出力済みであることが分かります。
6. メソッドに入るステップ実行
プログラムに独自のメソッドがあり、デバッグモードで単なるステップ実行ではなく、そのメソッドの内部にも入って実行したい場合は、「メソッドに入る」ために F8 ではなく F7 を押します。
たとえば、ステップ実行中で今が 4 行目で停止しているとします。ここで F8 を押すと、IDEA は 4 行目を実行して 5 行目に進むだけです。
一方、F7 を押すと、IDEA は main2() メソッドの中に入り、そこをステップ実行します。
とても簡単です。メソッド内部で何が起きているかがあまり重要でなければ F8、重要であれば F7 を押して、そのコードをステップ実行してください。
GO TO FULL VERSION