デバッグとは
- ログをよく読む
- ログをよく読む
- ログをよく読む
- ログをググる、調べる
- 修正する
デバッグと調べると、デバッガのことやロガーのことばかり出てきますが、それは手法に過ぎません。
デバッグでは、とにかくログの意味を理解していないことがほとんどです。そのままでは、何が問題かわからないまま時間を浪費してしまいます。
ログは英語なので記号に見えるかもしれませんが通常は文章です。正しく読み込めば、何が(Who)いつ(When)どのように(How)何故(Why)何を(What)を起こしているのかが理解できるように作られています。
ログさえ正しく理解してしまえば、自然に調査するべき対象や分析するべき対象、どのように質問すれば良いかがわかります。
無理やり当てはめるとすれば
- What NameError
- who indexメソッドが
- When 2021-11-11 12:18:14に
- Where home_contoller.rbの11行目で
- How & Why undefined local variable or method hogehogeが理由で
という感じだと思います。
鉄板フロー
- 再現する
- ログを出力する
- ログをよく読む
- ログをググる、調べる
- 修正して再現しないようにする
新人は、1→5の順で出来ていません。
大体どうしたら良いのかわかりませんと言われると、
- 再現出来た?
- ログは見た?
- ログになんて書いてあった?
- ログをググった?
- バグっている箇所はどこ?
と聞きます。何故コードを見ていないのにわかるんですかと聞かれますが、この順に聞いているだけです。
再現させ、デバッグし、直すというのがフローになります。ログで十分デバッグできることが多いと思います。
調査方法
- 通常のログをよく読んで調査(Railsなら起動画面で確認できる(実態はlog/development.log), 通常はファイルになっているので、tail -f コマンド等を使う)
- ロガーでログを出力して調査(Railsなら logger.debug(), Cならprintf, goならlog.Print)
- インタラクティブシェルを使って再現する(Railsならrails c, MySQLならmysqlコマンドのシェル)
- デバッガを使う(Railsならbyebug等のgem, Cならgdb等, IDEがデバッガを備えていたりします)
これら4つと覚えておくと良いと思います。