[Mona] デバッグノウハウ

私は記憶力が悪い。なので過去に経験したデバッグノウハウを忘れることが良くある。
なので議論/デバッグMona開発時の事例をメモして次回に生かせたらと思っている。


というのは前ふりで、今回はWindows上のツール開発で謎のバグに悩んでいる。
具体的な症状は

  1. ファイル更新秒を返すFileDate#GetSecond()の戻り値が正しいものではない。ただしFileDate#SetSecondでは正しい値をセットしている。
  2. よく調べるとSetSecondで設定しようがしまいが値がおかしい。
  3. Set/GetSecondeはただのSetter/Getterなのでロジック的にそこにバグが入る余地はないし、一応確かめたがおかしくない。
  4. となると、疑わしいのは誰かがどこかでメモリを壊している。ということである。
  5. しかも動作全体に影響はない(コアダンプしない)程度にメモリを壊している予感。


ということなので、どこでメモリが壊れているか調べようと思った。
だが良く考えてみたら、自分の中にこういう場合のデバッグ方法論がないことに気づいた。
どこかで落ちたりするのであれば、わかりやすいのだがどうしよう。


とりあえずコードを削っていって、境界条件でも見つけてみようかと思う。
それでだめならメモリの先頭とお尻にヘッダ・フッタをつけてメモリアクセスのたびに、ヘッダ・フッタが壊れていないかチェックするような関数を作ろうかと。
ちなみにg++です。