2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

プログラミングで最重要なのに誰も教えてくれないデバッグのやり方

Last updated at Posted at 2021-12-04

デバッグとは

  1. ログをよく読む
  2. ログをよく読む
  3. ログをよく読む
  4. ログをググる、調べる
  5. 修正する

デバッグと調べると、デバッガのことやロガーのことばかり出てきますが、それは手法に過ぎません。
デバッグでは、とにかくログの意味を理解していないことがほとんどです。そのままでは、何が問題かわからないまま時間を浪費してしまいます。
ログは英語なので記号に見えるかもしれませんが通常は文章です。正しく読み込めば、何が(Who)いつ(When)どのように(How)何故(Why)何を(What)を起こしているのかが理解できるように作られています。
ログさえ正しく理解してしまえば、自然に調査するべき対象や分析するべき対象、どのように質問すれば良いかがわかります。

こちらの例だと
スクリーンショット 2021-12-04 20.52.17.png

無理やり当てはめるとすれば

  1. What NameError
  2. who indexメソッドが
  3. When 2021-11-11 12:18:14に
  4. Where home_contoller.rbの11行目で
  5. How & Why undefined local variable or method hogehogeが理由で
    という感じだと思います。

鉄板フロー

  1. 再現する
  2. ログを出力する
  3. ログをよく読む
  4. ログをググる、調べる
  5. 修正して再現しないようにする

新人は、1→5の順で出来ていません。
大体どうしたら良いのかわかりませんと言われると、

  1. 再現出来た?
  2. ログは見た?
  3. ログになんて書いてあった?
  4. ログをググった?
  5. バグっている箇所はどこ?

と聞きます。何故コードを見ていないのにわかるんですかと聞かれますが、この順に聞いているだけです。
再現させ、デバッグし、直すというのがフローになります。ログで十分デバッグできることが多いと思います。

調査方法

  1. 通常のログをよく読んで調査(Railsなら起動画面で確認できる(実態はlog/development.log), 通常はファイルになっているので、tail -f コマンド等を使う)
  2. ロガーでログを出力して調査(Railsなら logger.debug(), Cならprintf, goならlog.Print)
  3. インタラクティブシェルを使って再現する(Railsならrails c, MySQLならmysqlコマンドのシェル)
  4. デバッガを使う(Railsならbyebug等のgem, Cならgdb等, IDEがデバッガを備えていたりします)

これら4つと覚えておくと良いと思います。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?