バグ潰し

ソフトウェアの開発にまつわる話では新しい機能をふたつ追加すると完成ずみの機能がひとつ問題を起こすというのが決まりごと。起動してすぐコマンドを実行するとWindowsの例外が発生して動作が不安定になるというとんでもない事態が発生。再起動を繰り返しながら症状を確認したところプログラムを作って実行する分には大丈夫、またコマンドのうちLISTだけは大丈夫。さらには、プログラムやLISTでひとたびまともに動かせば、あとはどんなコマンドでも大丈夫。ここまで調べるのに丸1日かかった。

どうもリストに関係する処理で誤りがありそう。再度デバッグ用の関数を入れてリストの状態を調べたが異常なし。あきらめて寝ようとしたときふと行ポインタを初期化していないことが原因じゃないかと考えた。コマンドだから行ポインタは使わないが、末端の関数はステートメントと共通だから戻り値として次に実行するべき行の行ポインタを返す。次に実行するべき行は、行ポインタに行ポインタの指す値(行の長さ)を加えている。行ポインタをリストの先頭へ設定しておかないと、あらぬアドレスを参照してしまう。

行ポインタを初期化すると見事に解決。ただし、開発過程のファイルを調べたり、いったん削除したデバッグ用の関数を戻したりしているうちにバージョンの管理が混乱。せっかく整理した名前がまた不統一になっているし、もしかしたら新しいバグが発生しているかもしれない。

広告
カテゴリー: TinyBASIC パーマリンク

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中