diadia

興味があることをやってみる。自分のメモを残しておきます。

デバッグについて

デバッグの方法論

デバッグ方法のやりかたをまとめておくというより、統合開発環境デバッグモードを使ってフェーズごとに効率よく作業する方法を整理したい。

フェーズ

  • 開発時
  • テスト
  • プロダクトがエラーを吐き出したとき
  • なんかよく分からんけどアプリが落ちるとき

開発時

コードを実行する  
 ↓                
エラーが出る  
 ↓                
出たところを見る  
 ↓                
エラー原因を特定する 
 ↓                
原因を排除する   -> 再び'コードを実行する'へ

このフローだとエラーが出た際に正確にエラー原因を理解してエラーに対応したコードを書かなければ何度もコードを実行して時間がかかってしまう。 この場合には、コードを実行する際にデバッグモードで実行する。エラーが出る手前でbreakpointを設置し、エラーが出るスコープ内で、修正したコードをコンソールで実行する。こうすることで修正したコードは確実にエラーが出ないので修正したのにも関わらずエラーが出て時間をロスしてしまうことを回避する事ができる。

テストフェーズ

テストフェーズでは自動テストコードを走らせることが良いと思うが、それがない場合にはデバッグモードを実行しコードの品質を確認する。

  • 意図した条件分岐を通るか
  • 条件分岐先にある関数が適切に動くか

意図した条件分岐を通るか

ここをチェックしたい場合、以前まではデータベースのデータを調整してそのデータを流してその条件分岐を通るかどうか試していた。この場合データの構造がシンプルな場合にはDBのデータをいじれば済むが、それがコストがかかる場合がある。このケースでは、適切なデータを呼び出し、そのデータに条件分岐が通るべき修正を加え、コードを走らせる。そしてブレクポイントを適当に複数セットし、条件分岐が機能しているか確認すると良いだろう。

条件分岐先にある関数が適切に動くか

これに関しても単体テストを実行すればそれで済む話なのだけれども、職場環境によってはない場合がある。この場合には通らせたい条件分岐はTrueに変更、その他はFalseにすれば関数を実行することができる。関数実行時に適切なデータがほしければ、上で書いたようにコード中で修正すればその問題もないだろう。

プロダクトがエラーを吐き出したとき

web系に関しての対処法ではあるが、chromeのdevelopperツールのコンソールログを確認する。こちらでエラーが出ていなければサーバー側で問題があると考えられるのでツールのネットワークを開く。APIの結果で500が出ているものを見つけ、当該APIに対応するロジックの部分をデバッグモードで実行する。エラーメッセージもよく確認し、コンソールで通るコードを作成、修正でよい。

なんかよく分からんけどプロダクトのアプリが落ちるとき

具体的な対策が今は見つけられていない。IDEをつかうというよりはログを詳細にとりおかしいところを見つけることで対応している。