広告
  サイト内検索:
<Let's create a game!> Introduction of programming for absolute beginners English
 

SESSION 11 その44
バグを直す

IDEの
メインプロジェクトを
「KotoQuiz」に
戻してね。
じゃあ、
ゲーム作りに戻って
バグを直していこう。


今回のバグは
エラーメッセージが表示されて
いないから、論理エラーって
ことだな。

どこか作り方がおかしい
可能性が高いね。
 
うーん、
どこの部分が
間違ってるんだろう。
  そっか
戻しとかなきゃ。
 


  問題を整理する

現状を整理してみよう。

今回の症状は
「3問目で終わって、
4問目が遊べないで
ゲームが終わる」

ということ。

つまり、怪しいところは
「なぜ3問目で終わるのか?」
ってことだ。
そっか!

「3問目の終了判定」
を調べれば、原因が
分かるかもしれないんだね!
整理する事は
凄い重要!

聞いてる?
推理小説
みたい!
 

問題を整理する


問題点の整理

3問目までは正常に遊べる
3問目でゲームが終わる
4問目が遊べない



エラーの原因を考える


3問目で「終わる」のがおかしい



エラー原因の推測


3問目の時点の終了判定の処理に問題がある?



     

なぽちゃん。

じゃあ、解答処理の
終了判定のところに
ブレークポイントを
立てて実行するね。

ここで
いいかな?
 
おっ、いいんじゃね。

そこに立てれば
ループフラグを
立てるかどうかで
終了するか分かる
よな。
 
デバッグ:解答処理内容の確認
エディタウィンドウ



じゃあ、実行するね。

えーと、まずキー入力があって、
1問目に答えて・・・
解答処理に行って・・・


これでブレークポイントで
止まったでしょ。

今はループの1回目だから
1問目の終わりだね。
 
 
ウォッチしてみると・・・

nowQuizNumは上の行で
問題を1つ進めた後だから
「1」でいいな。

うん、1回目に間違いない。
 
デバッグ:問題数の値の確認
エディタウィンドウ


じゃあ、ステップ実行で
ここから1行進めてみるね。


関数の行じゃないから
ステップオーバーでも
ステップインでも同じだよね?
ああ、大丈夫だよ。

えっと・・・
ifのブロックには
入らないで次の行
に行ったな。
入りません
でした。
おっけ。
 
デバッグ:問題数の値の確認2
エディタウィンドウ


うーんと、
3回目のループか・・・

3問目まで進めるには
どうしたらいいかな。


1行づつステップ実行
するの?
1行づつ
進めるのだと
大変だね。
他にもやり方
あるけどね。

2回ぐらいだから
これでいいだろ。
「継続」ボタンを押せばいい。
このボタンを押すと、その場所
から実行が再開される。

今回の場合、キー入力があるから
そこまで一気に進むよ。


あとはさっきと同じ。
キー入力して、確認して・・・

それを2回やれば
合計3回目のループになるね。


再開して、
キー入力で止まったら
また問題に答えて・・・
繰り返して・・・。

えっと、
これで3回目のループ・・・


nowQuizNumも「3」だから
問題も3問目。
うん、ちゃんとなってる。

進めたらどうなるんだろう。
どうなる
かなー。

ドキドキ
するー。
 
じゃあ、
ステップ実行してみよう。
 
デバッグ:問題数の値の確認3
エディタウィンドウ


よーし、
ステップ実行で1行進めるよ。


・・・・・・ん?
あれ?あれれれ??

なんでー!
終了判定のブロックに
入っちゃたよー!


これじゃ、
3問目で終わっちゃうよ!
どうして
入っちゃったのか
終了判定の
条件式の変数

ウォッチしてみよう。
どうしてー
???
いえーい
 
デバッグ:問題数の値の確認4
エディタウィンドウ



そうだ、条件式見なきゃ。

えっと、nowQuizNumは
「3」だったから、3問目でOKだよね。
あとは・・・
一応、定数も見とこ・・・


あれ?定数 QUIZ_MAXの数が
「3」になってるよ・・・・

・・・これって問題の数だよね?

あー!!分かった!
この定数が間違ってるんだ!
そうだった!
 
デバッグ:問題数の値の確認5(定数の確認)
エディタウィンドウ
 
何度も
注意した
のにね。。。
そういうこと。

問題の最大数は
4問にしたから4にしないと。


問題を追加したら
ここの数も増やさないと
だめだって言ったでしょ。


分かれば、
これも単純な間違いね。


嬉しいー!

ありがとー
やったー!
QUIZ_MAXを4にして
実行したら直った!

4問目ちゃんと出たよ!
 
これで
デバッグ完了だな。
  はあー
ごくろうさん。
俺。
 
 

クイズゲーム完成 モード処理関数化
(KotoQuizのKQMain.java)12行目~
 
・・・      
012   public class KQMain {  
013      
014       //********************************************  
015       // 定数  
016       //********************************************  
017       //入力・表示処理モード  
018       private static final int EXEC_MODE_QUIZ = 1;//問題処理モード  
019       private static final int EXEC_MODE_CHECK = 2;//解答処理モード  
020       private static final int QUIZ_MAX = 4;//問題数  
・・・    
黄色の部分を修正して実行して下さい。
 
実行結果(出力ウィンドウ):論理エラーの修正
実行結果(出力ウィンドウ)

  デバッグのポイント

当たり前だけど
意外とできない
もんなんだよね。
今回のデバッグ方法のポイント。

今まで正常に動いていたものが
変更したらおかしくなった場合、
変更箇所に原因の元がある。

改変前と後の違いを
よく考えてみよう。


変更箇所に「関係する処理」
注目して「問題の整理」をしてね。
 
今回の場合
問題数を増やして
おかしくなったから・・・。

問題数の関係の処理
怪しかったってことね。
  うーん、
なるほど。 
 
 

デバッグのポイント


改変前のコードと後のコードの違いを考える
変更箇所に関係する処理に注目する
問題を整理する




これで今回の
デバッグは終わり。


バグは、時には解明するまで
何日もかかる事もある。

どこに原因があるのか
的確な「切り分け」が
必要になってくるんだ。

徐々に詳しくなっていこうな。
はい。

いろいろ分かりました!
いろいろ勉強
していこう。
はいっ。

     

さあ、ゲームが
直ったところで!


4問目のクイズの答えは
なんでしょーか!
間違ってたら
お尻ペンペン
しちゃうぞ!
「お前の問題」
なんて
分かるかよ。。。

 
 

広告
home もくじ 前のページを読む 次のページを読む
  サイト内検索:
広告
お勧めの姉妹サイト
leafdays - リーフデイズ 超初心者のための園芸入門 - 楽しい趣味のガーデニング -
広告