補講 デバッグ

 プログラムの中にある間違いをバグと言います。元々バグは「虫」という意味です。プログラムの間違いを悪い虫にたとえているわけです。エラーという言葉も同様の意味で使われます。
 バグを修正することをデバッグと言います。バグが虫なので、「バグを取る」という表現がよく使われます。プログラミングを学び始めて「プログラム作るのって楽しいなあ」と思っていた人がある日突然頭を抱えてしまう。バグが取れないからです。簡単に修正できるものであればいいのですが、隅々まで読み直しても原因がさっぱり分からない、マニュアルを読んでも分からない、というものはやっかいです。
 ここでは、デバッグのやり方についてヒント程度ではありますが書いておこうと思います。

 1.HSP Debug window

 プログラムを実行してエラーが起こると、エラーメッセージ、問題があると思われる行番号、そしてHSP Debug windowというウィンドウが表示されます。
 このウィンドウには、プログラム中で使われている変数名と代入されている値が表示されます。変数名をクリックして、「値=〜」とある箇所が入っている値です。このままでは配列変数は表示されません。「配列変数を表示」のチェックボックスをチェックすると表示されます。ただし、表示されるのは1次元配列までです。2次元以上は表示されません。

 2.エラーメッセージ

 エラーメッセージの意味はHSPのヘルプに書いてあります。ここでは、補足的な事柄を書きます。(補足したい事があるもののみ。)

 3.エラーメッセージが出ないバグ

 上のようにエラーメッセージが出るものはまだいいのです。指定された行を見て、おかしな書き方をしていないか確認すればいいです。問題なのは、エラーにはならないが、自分が想定したのとは全然違う動作をしてしまうというものです。
 また、エラーメッセージは表示されるが、修正すべき箇所が指定行とは別の場所にある場合もあります。その場合も、エラーメッセージをヒントに修正箇所を自分で探す必要があります。

(1)現象と条件をはっきりさせる
 どんな時に、どうなるのか。たいていの場合、何度かプログラムを走らせればはっきりすると思います。
 速すぎてよく分からない場合は、メインループ中のawaitの値を大きくして、スピードを落として確認します。おかしくなる瞬間が見たい場合は、そこの処理中にstop命令を入れます。

(2)プログラムを読み直す
 現象と条件を確認したら、原因があると思われる箇所を読み直します。たいていは今追加した処理に原因があります。テストプレイをしているうちに、昨日書いた処理のバグを見つけることもあります。その場合は昨日書いた処理を読み直します。  今日追加した処理のために昨日書いた処理がうまく動かなくなることもあります。その場合は両方読み直します。
 変数のつづりは間違っていないでしょうか? 例えば次のプログラムを見て下さい。
    ; mのn乗を計算する
    m=2
    n=5
    answer=1
    repeat n
        answer=answar*m
    loop
    mes answer
    stop
 answerのつづりが間違っていますが、エラーメッセージは表示されません。命令語のつづりが間違っていればコンパイルした時にチェックされますが、変数名はそうではありません。他の言語では、プログラムの先頭で変数名を宣言しておけば、宣言していない変数を使えばチェックされるものもあります。HSPの場合answarもまた1つの変数であるものとして認識されます。answarにはデフォルトで0が入っているので、答も0になってしまいます。

 どこもつづりが間違っていない場合も、自分が想定した動きとは違う書き方をしているはずですのでよく読みなおします。

(3)マニュアルをよく読む
 HSPのヘルプ、拡張プラグインの説明書をよく読んで命令の使い方を誤解していないか確認します。

(4)インターネットで検索する
 ヘルプやReadmeを読んでも、命令の使い方がよく分からないことがあります。そういう場合、詳しく説明しているサイトがないか、インターネットで検索するといいです。

(5)変数を表示する
 プログラム実行中の変数の値を見ることは非常に有効な手段です。

(6)人に聞く
 上のような試行錯誤をしてもさっぱり分からない場合、HSP関連のサイトの質問用掲示板で聞くと、誰かが教えてくれるかもしれません。


[目次へ][前へ][次へ] inserted by FC2 system