アウトプットができる技術者に

it's a time to take a new step !

効率的なデバッグ手順の考察

デバッグ作業は迷うと大変
自分なりに少しずつ体系立ててみたい
(原因が明らかな場合は手順とか不要だけど)

いきなりデータを見ないのがミソ

よく陥る罠

  • なんとなくで作業する
  • DBにselect掛けまくる / grepしまくる
  • 頭がこんがらがる
  • 無為に時間を過ごす

手順概要

  • As-Is To-Be の把握
  • 原因の特定
  • 仮説を立てる
  • 仮説を検証のプランを立てる
  • 実際のデータを見る

手順詳細

As-Is To-Be

  • エラーの事象をきちんと把握する
    • エラーメッセージ/データの状態/発見時刻/発生時刻/初回or何度目か
  • 本来、あるべき姿を把握する
    • 正常なデータ/正常な事象
    • 仕様書があれば目を通す (バグではなく正常な仕様かもしれない)

原因の特定

  • どこでエラーが発生する可能性があるかを机上で考える
    • 体系立てて網羅的に
      • WebAPP/DB/Batch/Server/Network
      • 最近、修正した点 / 既存バグなど

仮説を立てる

  • 「きっと ここが間違っていてるからエラーになっているんだろう」みたいな

仮説を検証のプランを立てる

  • 「仮説が正しければ、ログの最後にエラーが出ているはずなので 確認する」みたいな


実際のデータを見る

  • ざっとみる(検証方法を念頭において 見るんだけど、先入観は怖いので注意)
    • ログファイルをチェック / DBのデータをチェック
    • データのチェックをするなら、 find mtime で直近のデータに限定してチェックすると効率が良い

ここで、仮説が崩れたら、エラーの事象を確認して仮説をたてなおす
つまり、↑に戻る


よくやる実作業としては、結局 こんな感じになることが多い

  • 異常/正常な1データを探す
    • このエラーが出てるってことは、このデータがおかしいはず。とあたりをつけて探してく
  • データから中間ファイルなどを探って探す
  • 原因となるコード(特定行)にたどり着く