デバッグの基本 つづき |
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
じゃあ、論理エラーを
見ていこう。
さっきの実行結果の最後の行。
論理エラーテストの結果を
よく見てくれ。
なんか計算おかしいだろ。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
 |
 |
 |
|
|
|
|
 |
|
|
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
えー・・・
どこかおかしかったっけ?
うーん・・・
・・・・!?
あ、ほんとだ!
「100を100で割ると100です。」
になってる。
100を100で割ったら1だよね。
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
 |
 |
 |
|
|
|
|
 |
|
|
|
|
|
 |
全然気が
つかなかった。。。 |
|
|
|
 |
実行結果(出力ウィンドウ) |
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
ちゃんと終わるけど
結果がおかしい。
つまり、これが論理エラー。
じゃあ、
なんでこうなったのか、
どうしたら正しい結果が
出るのか。
調査して修正してくれ。 |
|
|
 |
 |
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
 |
エラー
メッセージ
出てないでしょ。 |
|
もしかして
プログラムが
壊れちゃった
のかな。 |
 |
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
 |
 |
|
えー、どうしてだろう。
このコードって
100を変数 b で割って
その結果を表示してるだけ
だよね。
えーと、
bは100で初期化されて、
それ以降は変えてないし・・・。
うーん。
bの値がどっかで変わっちゃてる
のかな。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
 |
|
 |
|
デバッグテスト用コード
(KotoDebugのKDMain.java)38行目~ |
|
・・・ |
|
|
|
038 |
|
//******************* |
|
039 |
|
//論理エラーテスト |
|
040 |
|
System.out.println(""); |
|
041 |
|
System.out.println("********** 論理エラーテスト結果 **********"); |
|
042 |
|
System.out.println(""); |
|
043 |
|
|
|
044 |
|
int
b = 100; |
|
045 |
|
System.out.println("100を"
+ b + "で割ると"
+ (100/a) + "です。"); |
|
・・・ |
|
|
|
|
皆さんも何がおかしいか考えてみてください。 |
|
|
 |
|
 |
|
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
そうだ!
表示する行を
ブレークポイントで止めて
bの中身を見てみよう! |
|
|
 |
 |
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
 |
そうすれば
どこで変わったか
分かるかも! |
|
|
|
|
|
 |
エディタウィンドウ |
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
えっと・・・
計算行で止めてみたけど・・・
えっと、bの値は・・・
うん、ちゃんと100に初期化
できてる。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
 |
 |
 |
|
|
|
|
 |
|
|
|
|
|
問題なし。 |
 |
|
|
|
|
 |
エディタウィンドウ |
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
あとは
計算式の方を見てみると・・・
あれ?なんで!?
bの値が「1」になってるよ???
同じbなのになんで?なんで?
うん???
あれー!!
これ変数「b」じゃなくて
「a」じゃないの! |
|
|
 |
 |
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
 |
なんでー???
こんなことに
気がつかなかった! |
|
今回は
一番単純な
例ね。 |
 |
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
 |
 |
|
そ、エラーの原因は単純。
書き間違い。
「b」って書かなきゃ
いけないところを
間違えて
「a」って書いちゃってるの。
こんなバカバカしいのが
意外と気がつかないもんだろ。
これが論理エラーの例ね。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
 |
エディタウィンドウ |
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
間違ってた部分を直して
実行したら直ったー!!
「100を100で割ると1です。」
正解! |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
 |
 |
 |
|
|
|
|
 |
|
|
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
はーい。
これで修正全部完了。
デバッグの練習おしまいね。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
 |
 |
 |
|
|
|
|
 |
|
|
|
|
やった。 |
 |
|
 |
おしまい。 |
|
|
|
 |
|
 |
|
デバッグテスト用コード
(KotoDebugのKDMain.java)38行目~ |
|
・・・ |
|
|
|
038 |
|
//******************* |
|
039 |
|
//論理エラーテスト |
|
040 |
|
System.out.println(""); |
|
041 |
|
System.out.println("********** 論理エラーテスト結果 **********"); |
|
042 |
|
System.out.println(""); |
|
043 |
|
|
|
044 |
|
int
b = 100; |
|
045 |
|
System.out.println("100を"
+ b + "で割ると"
+ (100/b) + "です。"); |
|
・・・ |
|
|
|
|
黄色の部分を修正して実行して下さい。 |
|
|
 |
|
 |
|
 |
実行結果(出力ウィンドウ) |
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
ううーん・・・
でもやっぱり難しいー。
けど面白いー!!
パズルみたいー!
解けた! |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
 |
 |
 |
|
|
|
|
 |
|
|
|
|
|
今回の敵は
「思い込み」
だね! |
 |
|
 |
地獄だと
思うんだけど。
まあ、本番は
これからか。
ククク |
|
|
計算の例でも
面白かった。
ごめんね、
なぽちゃん。。。 |
 |
|
 |
はいはい。
・・・これが
面白いんだ。 |
|
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
デバッグの
基本的な機能とやり方は
こんな感じ。
便利な機能はまだまだ
たくさんあるからね。
これからも見ていこう。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
 |
 |
 |
|
|
|
|
 |
|
|
|
|
|
これでもかって
ぐらい、たくさん
あるよ。 |
 |
|
 |
いろいろ
あるんだ。 |
|
|
|
 |
|
 |
|
デバッグの基本のまとめ |
|
|
|
エラーの原因 |
・コードの問題 |
・コード以外の問題 |
・複合的な問題 |
|
|
IDEの機能を使う |
・エラー表示 |
・ブレークポイント |
・変数のウォッチ |
・ステップ実行 |
|
|
|
|
 |
|
 |
|
|