開発中のプログラムのコーディングが ひとつの やまをこえました。のべ むいか間の作業のうち、コーディングに みっか強、デバッグに ふつか強かかりました。以前つくったものより高機能に なったにも かかわらず、コードの構造は逆にシンプルになっています。
毎度毎度のことですが、コードの要所要所でデータのスナップショットを出力するようにデバッグ ルーチンを しこんでおき、デバッグ時には出力されたログをみてデータが所定の変化をしているか追跡します。この実行とログの追跡を、簡単なデータから はじめ、すこしずつ複雑なデータをあたえて くりかえします。
デバッグ当初に てをやいたバグはメモリの破壊でした。変なデータが突然あらわれて、「うわ、これはポインタのバグだ」と覚悟しました。ポインタのバグは さがしだして修正するのが大変です。複雑なポインタ操作は してないはずなんだけどなぁ。
原因は、配列の終端をこえて かきこんだことでした。ありがちなバグです。配列を1要素分だけ ながく確保しておくべきところを、そうしていませんでした。
配列のバグのほかは、デバッグは順調に すすみました。途中でデータを分割して非同期的に処理をすすめ、それぞれの結果をあとで合成する処理も一発で正常動作。再帰下降処理も一発。ほかも ちいさな修正があっただけ。自分でも おどろくほどコードが すなおに うごいてくれます。デバッグが順調すぎて こわい。C++には言語として ばあたり的に拡張されてきたような側面も ありますが、やっぱりオブジェクト指向は強力です。
※ この記事の本文からは漢字の訓を排除しています。
毎度毎度のことですが、コードの要所要所でデータのスナップショットを出力するようにデバッグ ルーチンを しこんでおき、デバッグ時には出力されたログをみてデータが所定の変化をしているか追跡します。この実行とログの追跡を、簡単なデータから はじめ、すこしずつ複雑なデータをあたえて くりかえします。
デバッグ当初に てをやいたバグはメモリの破壊でした。変なデータが突然あらわれて、「うわ、これはポインタのバグだ」と覚悟しました。ポインタのバグは さがしだして修正するのが大変です。複雑なポインタ操作は してないはずなんだけどなぁ。
原因は、配列の終端をこえて かきこんだことでした。ありがちなバグです。配列を1要素分だけ ながく確保しておくべきところを、そうしていませんでした。
配列のバグのほかは、デバッグは順調に すすみました。途中でデータを分割して非同期的に処理をすすめ、それぞれの結果をあとで合成する処理も一発で正常動作。再帰下降処理も一発。ほかも ちいさな修正があっただけ。自分でも おどろくほどコードが すなおに うごいてくれます。デバッグが順調すぎて こわい。C++には言語として ばあたり的に拡張されてきたような側面も ありますが、やっぱりオブジェクト指向は強力です。
※ この記事の本文からは漢字の訓を排除しています。