ITエンジニアのプレイングマネージャー化応援サイト

NetBeansのデバッガを使う

ここでは、新人技術者向けにNetBeansのデバッガ使い方を説明します。

 

バクを取るためにはソースコードをトレースする必要があります。

トレースをするためには、おおむね3つの方法があります。

1.紙とペンを使って静的に解析する

2.変数の内容をSystem.outしながら進める。

3.デバッガを使う。

しかし、1の方法は時間がかかる上に不正確です。2の方法も正確ですが時間がかかる事には違いがありません。

そこで、ここでは効率的にバグを発見するためにデバッガを使う方法をご紹介します。


例えば、以下のようなプログラムがあったとします。

かつて10歳だったimaiが20年たって30歳になり、それから1年が過ぎ、苗字も変わったというプログラムです。(こじつけです)

<ソースコード>

ところがこのプログラムを実行したところ、以下のような出力がされました。

<アウトプット例>

My name was imai and I was 10
Now, My name is yamazaki and I’m 1021

そこで原因究明のためにデバッグするというストーリーです。

まず、デバッグをするにはいったんプログラムを停止させる場所であるブレイクポイントを設定します。

ブレイクポイントを設定していないと、プログラムが最後まで実行されてしまいます。

今回は、4行目にブレイクポイントを設定します。

ブレイクポイントは行番号の上をクリックすることで設定できます。

行番号をクリックしてマークと該当行がピンクになればブレイクポイントの設定はOKです。

次に、「Ctrl+Shift+F5」キーを押すことでファイルをデバッグすることができます。

ブレークポイントを設定した行が緑になりました。

今からこの行を実行するという意味です。

 

 

 

 

 

 

F8」キーを押すとそのたびに緑の行が一行ずつ下に動いていきます。

これが、ステップ・オーバーという操作で、恐らく最も多用します。 

下部に変数のタブがあります。(表示されていない場合は、ウィンドウ>デバッグ>変数 を選択します)

 

 

 

ここでは、変数の値を見ることができます。

また、変数の値を直接変更して実行結果を変えることもできますので、試してみてください。

最後までステップ・オーバーで進めてみましょう。

プログラムの終わりに到達するとデバッグモードは終了します。

任意の場所で終了させるには、デバッグ>デバッガ・セッションを終了 を選択します。

 

今回は、単純にJavaの演算子が左結合なため、次々と文字列として結合されてしまっていたのでした。

(age + elapsedYears)と()を使って足し算の優先順位を上げれば解決する問題でした。

このように変数の値を一行ずつ追うことのできるデバッガはバグを見つけるうえで重宝します。

 

次に、ステップ・インとステップ・アウトを試してみましょう。

まずは、ステップ・インです。ショートカットキーは「F7」です。

これはどのように使うのでしょうか?

先ほどのソースを同じようにデバッグしてみましょう。

同じようにデバッグ実行をするのですが、今度はF8ではなく、F7を使います。

そうすると、8行目のSystem.out.println()のところで別のJavaファイルに行ってしまいました。

このようにメソッドの内容に入り込むのがステップ・インです。

このままF7を押し続けるとどこまでもメソッドの中に入り込み続けます。

多分、恐らくですが、JavaのAPIの中にバグはないと思います。

そこで、メソッドから脱出するには、ステップ・アウトを使います。

ショートカットキーは「Ctrl+F7」です。

どうでしょうか?

元に戻れましたでしょうか?

このステップ・インはどのようなときに使うのでしょうか?

これは、自作のメソッドに入り込んでバグを探すのに使います。

先ほどのソースを以下のように書き換えてみます。

1つ年を取るという操作をメソッドとして外部に切り出したわけです。

16行目以降にgetOlder()というメソッドを作り、10行目でそれを呼んでいます。

同じように一行ずつステップ・インで実行するとメソッドの中に入り込みます。

このように自作メソッドの中に入り込んで動きを見たい時にステップ・インを使います。

 

次に例外が発生したときのデバッガの挙動も確認しておきます。

先ほどのソースをすこし修正して、17行目のgetOlderメソッドの中で0による除算をしてみます。(非検査例外)

ステップ・オーバーで一行ずつ処理を進めるとどうなるでしょうか?

 

今回は、getOlderメソッドを呼び出したところでThead.javaに飛ばされてしまいました。

このようにどこにエラーがあるかを特定するためにもデバッガを使うことができます。

 

JSPも同様にデバッグが可能です。

以下のソースコードでまったく同じようにしてみてください。

ブラウザとソースコードの両方を見比べないといけないのが煩雑ではありますが。

これを見るとブラウザがHTML(とJSP)をどのように解析して表示しているのかが分かり興味深いですね。

なお、JSP/サーブレットの場合は、デバッガ・セッションを終了(Shift+F5)を選んで終了させないとデバッグが終わりません。

(この場合にはThread.javaクラスに強制的に飛ばされて終了します。)

デバッグが終わらないのは、最初の起動時に生成された1個のインスタンスですべてのリクエストを処理するためです。

次のリクエストを待っている状態なわけです。

 

もちろんサーブレットもデバッグすることができます。

doGetメソッドがあればファイルをデバッグ(Ctrl+Shift+F5)が使えます。

しかし、フォームからの入力値を受け取る場合には、以下のようにリクエスト・パラメータを追加するなどの工夫が必要です。

そうしないとNullPointerExceptionが発生してそこで処理が終わってしまいます。

あるいは、プロジェクトをデバッグ(Ctrl+F5)を選択するのが本来かもしれません。

これは、プロジェクト全体をデバッグするという意味です。

そうすれば、最初から操作の順を追ってデバッグすることができます。

ただし、index.htmlやindex.jpsなどのウェルカムページが作成してあることが前提になります。

 

 

今回はデバッガを使うのが初めての方向けに解説しましたので、最初から一行ずつステップ実行をしていただきました。

しかし、本来はバグがありそうな怪しいところにブレークポイントを設定して使うのがデバッガの使い方です。

また、デバッグを始めてから怪しいところが出てきたときには、「カーソルまで実行」を使えば、一気にそこまで動作を飛ばすことができます。

動的なブレークポイントのようなものです。

 

 

まとめとして、デバッグ関連のボタンとショートカットキーを一覧にしておきますので参考にしてください。

 

 

左から順番に

①デバッガ・セッションを終了(Shift+F5)
②一時停止
③続行(F5)
④ステップ・オーバー(F8)
⑤式をステップ・オーバー(Shift+F8)
⑥ステップ・イン(F7)
⑦ステップ・アウト(Ctrl+F7)
⑧カーソルまで実行(F4)

です。

 

以上。

NetBeansについてに戻る。

 

新入社員研修ポータル

IT企業の人財育成に関することなら全てお任せ下さい TEL 0120-559-463 受付時間 10:00 - 17:00 (土・日・祝日除く)

ZOOMを使った遠隔研修メニュー(PDFが開きます)

ZOOMを使った遠隔研修

新人エンジニアのためのJavaタイピングゲーム

新人プログラマのためのプログラミング動画

YouTubeチャンネル

お問い合わせはこちらから

お名前 (必須)

メールアドレス (必須)

題名(件名)

メッセージ本文

確認画面は表示されません。上記内容にて送信しますので、よろしければチェックを入れてください。

新入社員研修ポータル

PAGETOP
Copyright © Say Consulting Group, Inc. All Rights Reserved.