[Mona] デバッグノウハウ
私は記憶力が悪い。なので過去に経験したデバッグノウハウを忘れることが良くある。
なので議論/デバッグにMona開発時の事例をメモして次回に生かせたらと思っている。
というのは前ふりで、今回はWindows上のツール開発で謎のバグに悩んでいる。
具体的な症状は
- ファイル更新秒を返すFileDate#GetSecond()の戻り値が正しいものではない。ただしFileDate#SetSecondでは正しい値をセットしている。
- よく調べるとSetSecondで設定しようがしまいが値がおかしい。
- Set/GetSecondeはただのSetter/Getterなのでロジック的にそこにバグが入る余地はないし、一応確かめたがおかしくない。
- となると、疑わしいのは誰かがどこかでメモリを壊している。ということである。
- しかも動作全体に影響はない(コアダンプしない)程度にメモリを壊している予感。
ということなので、どこでメモリが壊れているか調べようと思った。
だが良く考えてみたら、自分の中にこういう場合のデバッグ方法論がないことに気づいた。
どこかで落ちたりするのであれば、わかりやすいのだがどうしよう。
とりあえずコードを削っていって、境界条件でも見つけてみようかと思う。
それでだめならメモリの先頭とお尻にヘッダ・フッタをつけてメモリアクセスのたびに、ヘッダ・フッタが壊れていないかチェックするような関数を作ろうかと。
ちなみにg++です。