LoginSignup
4
5

More than 5 years have passed since last update.

デバッグについての個人的まとめ

Last updated at Posted at 2017-02-20

この記事を書いた理由

プログラムをデバッグするうえでの考え方や思い当たる原因を書いていきます。
考えの基となる材料や基本が無いと、何も思いつかないし、考えられません。

基本となる考え方

全体の流れ

問題(現象)発生→事実を集める(観察 or 分析)→仮説を立てる(推論)→調査→原因特定→対策

問題発生→仮説を立てる(推論・直感)→事実を集める(調査 or 観察 or 分析)→対策提案

問題の切り分け

問題発生→遡ってプログラムを調べる→箇所の特定(処理過程のどこで問題が起こったか)→仮説を立てる・事実を集める→原因の特定

プログラムが上から下と処理されていく過程で、どこで問題が起こったのかを特定することが最優先です。
闇雲に調査をしても時間が経つばかりなので、段階的に原因と思われる箇所を排除していきます。そのため、調査箇所でここで問題は起こっていないということを調べていき、原因を徐々に絞っていきます。起点はlogで、遡っていく形を取ります。

データ→プログラム1→プログラム1を呼び出すプログラム2

考える順序

問題解決についての個人的まとめ

ウェブアプリケーションの流れ

どこで問題が起きたのかを意識して調査しましょう。

WEBAPPの流れ.PNG

バッチの流れ

どこで問題が起きたのかを意識して調査しましょう。

バッチの流れ.PNG

ログの追い方

バッチアプリケーションだったら・・・、というかまずはログを見ます。

まずはlogを追う。

logにエラーメッセージが出ている

エラーメッセージでgrepし、発生ソースを特定

ソースの前後で怪しいところがないかを1行ずつ確認

落ちているところ/怪しいところを確認

落ちているところを手動で実行してみる。

結果を考察する

SQLの検証の仕方

コードに埋め込まれたSQLが怪しいな、と思ったら以下のような検証をしてみましょう。

コードに書かれているSQLを整形し、実際に流れるかを試す

JOIN部分を1つずつ消し、どこのテーブルのデータが無いかを調べる

WebアプリケーションのCRUDのたどり方

Webアプリケーションの内部ではCRUD操作が行われていることがありますがその部分で目的のデータが
取れない場合についてのたどり方です。

DAOコードに埋め込んだSQLを流して、取れるか調べる

取れなければ、DAOコードの返り値を見る

他にも関連するプログラムが呼ばれているかをさかのぼって、探す

調査観点一覧

フローチャートのように調査順序を記載してないので、追記していく予定です

データ

観点
対象のデータは正しいか
別のデータではどうか
実行スキーマは正しいか
参照先テーブルは正しいか(DAO・シノニム)
DAOの条件は正しいか
登録先・削除・更新先のテーブルは正しいか
レコードをいじったらどうなるか(削除フラグなど)
PL/SQLの引数の数、引数の値は正しいか
GUIソフトでPL/SQLを実行出来るか
SQLPLUSでPL/SQLを実行出来るか
SQLの実行結果は正しいか
実行権限、select,insertなど権限は正しく設定されているか
Insert、Update先のカラムはnot nullか

ソース

観点
処理ごとにデバッグ文を記載してみて、どこで落ちるか
怪しいとこをコメントアウトしたら処理が通るか
資材は更新されているか(eclipse)
ビルド・コンパイルされているか
デプロイされているか
SVNは最新か
クラスファイルの生成日時は最新か
手動実行できるか
スケジューラーソフトから起動できるか
APサーバーのログに手がかりがないか
その他のログに手がかりがないか
古いソースを使っていないか
処理に沿って動いているか(ソースを追う)
Eclipseで1行ずつデバッグ
他のソースで置き換えて実行できるか(定数とか)
他のソースと比べてみてどうか
実装漏れは無いか(反映されてない画面項目の変数がもれなく処理に追加されているかなど)
処理順序を変更すると変わるか
4
5
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
4
5