プログラムが動かない時
指示された仕事を完璧にこなすのがコンピュータですが、完璧でな人間が作った指示を実行する以上、バグの発生は避けては通れません。
バグにも様々な原因や結果がありますが、その結果から原因を探し出し修正する作業をデバッグといいます。
ここではデバッグのコツやテクニックを解説していきます。
バグのほとんどは書き間違い
私の経験上、初心者に限らずバグの発生の原因の多くはタイプミスによるものです。
コンパイルエラーの場合も予想通りの動作をしなかった場合もまずはスペルミスを疑いましょう。
Visual Studioは語句の補完機能がついているのでミスを防げます。有効活用しましょう。
また文末の;(セミコロン)忘れもよく見ます。
コメントアウト
プログラムが長くなるとバグの原因がどこにあるかがわかりにくくなります。
そんな時のバグの発生原因の切り分けのテクニックの一つに、コメントの活用があります。
ソースコードの不具合がありそうな部分をコメントアウトしてみましょう。
コンパイルエラーだったソースをコメントアウトして実行できたら、コメントアウトした部分にバグが潜んでいる可能性が高いです。
しかし、他の部分に影響を与えるコードをコメントアウトしてしまうと、むしろエラーが増える場合もあるので注意が必要です。
途中経過の表示
もう一つ切り分け時のコツを紹介します。
printf()などで実行時の途中経過を表示しましょう。
例えば分岐時にどちらの分岐に入ったかを表示するだけで様々なことがわかります。
目的の分岐先にいかなければ、条件文か条件文に使っている変数の処理が間違っていることがわかります。
分岐の直後にエラーが起きれば、分岐先のブロックに間違いがあることがわかります。
変数の値を表示するのもよいでしょう。
ループごとに値を読んでいき、どのタイミングでエラーになるのかで切り分けできます。
トレース
手間はかかりますが、これを行えば確実性は高いです。
トレースとはプログラムの挙動を一つずつ追っていくことを言います。
メモを用意して書いたプログラムを見て、表示内容や変数の値などを処理ごとに書き留めていきます。
「こうなるはずだ」と思って書いたプログラムが実は間違っていることがわかるでしょう。