効率的なデバッグ手順の考察
デバッグ作業は迷うと大変
自分なりに少しずつ体系立ててみたい
(原因が明らかな場合は手順とか不要だけど)
いきなりデータを見ないのがミソ
手順概要
- As-Is To-Be の把握
- 原因の特定
- 仮説を立てる
- 仮説を検証のプランを立てる
- 実際のデータを見る
手順詳細
As-Is To-Be
- エラーの事象をきちんと把握する
- エラーメッセージ/データの状態/発見時刻/発生時刻/初回or何度目か
原因の特定
- どこでエラーが発生する可能性があるかを机上で考える
- 体系立てて網羅的に
- WebAPP/DB/Batch/Server/Network
- 最近、修正した点 / 既存バグなど
- 体系立てて網羅的に
仮説を立てる
- 「きっと ここが間違っていてるからエラーになっているんだろう」みたいな
仮説を検証のプランを立てる
- 「仮説が正しければ、ログの最後にエラーが出ているはずなので 確認する」みたいな
実際のデータを見る
- ざっとみる(検証方法を念頭において 見るんだけど、先入観は怖いので注意)
- ログファイルをチェック / DBのデータをチェック
- データのチェックをするなら、 find mtime で直近のデータに限定してチェックすると効率が良い
ここで、仮説が崩れたら、エラーの事象を確認して仮説をたてなおす
つまり、↑に戻る
よくやる実作業としては、結局 こんな感じになることが多い
- 異常/正常な1データを探す
- このエラーが出てるってことは、このデータがおかしいはず。とあたりをつけて探してく
- データから中間ファイルなどを探って探す
- 原因となるコード(特定行)にたどり着く