CodeGym /コース /JAVA 25 SELF /IDEA でのデバッグ

IDEA でのデバッグ

JAVA 25 SELF
レベル 14 , レッスン 6
使用可能

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

その結果、行はブレークポイント(break point)でマークされ、IntelliJ IDEA はその行を赤色でハイライトします。

Break Points 2

コード左のガターをもう一度クリックすると、設定済みのbreak point は解除されます。

また、現在行にbreak point を置くには、ショートカット Ctrl+F8 を使えます。同じ行で Ctrl+F8 を再度押すと、その break point は削除されます。


4. デバッグモード(デバッグ)でのプログラム起動

プログラムにブレークポイントが 1 つでもあれば、デバッグモード(Shift+F9 または「虫のアイコン」)で起動できます。

デバッグモードで起動しても、プログラムは通常どおり実行されます。ただし、break point が付いた行に到達した瞬間に一時停止します。例:

Running program in debug mode

スクリーンショットの上半分には、2 つのブレークポイントがあるプログラムのコードが表示されています。プログラムは 5 行目で停止しており(青いラインで示されています)、5 行目はまだ実行されていません。コンソールにはまだ何も出力されていません。

画面の下半分にはデバッグ用のパネルが表示されています。Debugger パネル、Console (画面出力)パネル、そしてデバッグ用の各種ボタンです。

左下のパネルにある Resume Program ボタン(または F9 キー)を押すと、一時停止を解除して実行を続けられます。

Running program in debug mode 3

このボタン(または F9)を押すと、プログラムは次のブレークポイントに出会うまで、または終了するまで実行を続けます。ボタン押下後は次のように表示されます。

Running program in debug mode 4

プログラムは 2 つ目のブレークポイントで停止し、コンソールには PrivetI という語が出力されています。これは、画面出力の 3 行のうち 2 行だけが実行されたことを示します。


5. ステップ実行

プログラムがデバッグモードで動作している場合、1 ステップ1 行のステップ実行もできます。ステップ実行には F7F8 の 2 つのショートカットがあります。どちらも現在行を実行します。ただし、まずはbreak point を使ってプログラムを停止させる必要があります。

プログラムを行単位で実行したい場合は、main() メソッドの冒頭にbreak point を置き、デバッグモードで起動します。

プログラムが停止したら、行単位の実行を開始できます。F8 キーを 1 回押すと 1 行実行されます。

停止後に F8 を 1 回押した直後のプログラムは次のように見えます。

Running program in debug mode. Step-by-step execution

main メソッドの最初の行はすでに実行されており、現在行は 2 行目です。スクリーンショット下部を見ると、画面に Privet という語が出力済みであることが分かります。


6. メソッドに入るステップ実行

プログラムに独自のメソッドがあり、デバッグモードで単なるステップ実行ではなく、そのメソッドの内部にも入って実行したい場合は、「メソッドに入る」ために F8 ではなく F7 を押します。

たとえば、ステップ実行中で今が 4 行目で停止しているとします。ここで F8 を押すと、IDEA は 4 行目を実行して 5 行目に進むだけです。

Step-by-step execution with stepping into methods

一方、F7 を押すと、IDEA は main2() メソッドの中に入り、そこをステップ実行します。

Step-by-step execution with stepping into methods 2

とても簡単です。メソッド内部で何が起きているかがあまり重要でなければ F8、重要であれば F7 を押して、そのコードをステップ実行してください。

コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION