| デバッグ |
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
デバッグ
プログラムのバグ(間違い)を直す事。
セッションではIDEの便利な機能を使って、
プログラムの間違いを探して直していきます。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
 |
|
 |
|
|
デバッグの基本
| ・エラーの種類 |
| ・エラーの原因 |
| ・エラーの調査 |
| ・IDEの基本のデバッグ機能の使い方 |
| ・バグの探し方 |
|
|
|
 |
|
 |
|
|
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
エラーの種類
主なエラーには、実行時エラーと
論理エラーの2種類がある。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
| |
 |
|
 |
|
|
エラーの種類
|
実行時エラー |
プログラムを実行した時に起こるエラー。
Javaランタイムからエラーメッセージが
出力され、プログラムは基本的に停止する。 |
|
論理エラー |
プログラムが想定した結果を出さないエラー。
Javaランタイムによるエラーメッセージは表示されず、プログラムは正常に実行される。
プログラムのアルゴリズムやロジックが
間違ってる場合に起こる。
原因が分かりにくい場合が多い。 |
|
|
|
 |
|
 |
|
|
|
|
別項目になっています。こちらからご覧下さい。
|
|
|
別項目になっています。こちらからご覧下さい。
|
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
エラーの原因
原因は大きく分けると3種類。
・コードの問題
・コード以外の問題
・複合的な問題
主な原因はコードの問題。
以下、順番にエラーの解決方法を見ていく。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
| |
|
|
|
|
|
|
|
|
| |
 |
|
 |
|
|
エラーの原因
| ・ |
コードの問題(実行時エラー、論理エラー、または両方) |
| ・ |
コード以外の問題(パソコンの故障など) |
| ・ |
複合的な問題
(コードの複数箇所のエラー、コードとコード以外の複合エラーなど) |
|
|
|
 |
|
 |
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
1、エラーの原因がコードの問題の場合
実行時エラーの場合
Javaランタイムがエラーメッセージを出して、
おおよその原因を教えてくれるので、ある程度解決しやすい。
論理エラーの場合
考え方や作り方が間違っていたり勘違いが原因なので
原因を探すのが難しい場合が多い。
忘れている場合や思い込み。
そもそも、そのやり方を知らない場合もある。
例:計算問題で、掛け算のやり方で間違えてた場合。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
| |
| SESSION
7 で、ことがやった計算の間違え |
 |
|
 |
|
|
|
計算問題 |
| |
| 計算の答えはいくつ? |
|
(2048 × (1024 + 1024)) - 8658 + 896 × 1024 = ??? |
| |
|
| 詳しくはSESSION 7参照 |
| |
| |
| 「掛け算は、足し算引き算よりも先に計算しなければいけない」 |
| |
| ことは、この事を忘れていたため、正しい計算ができなかった。 |
| |
掛け算のやり方を忘れてたら、何が間違いの原因か分からない。
論理エラーは、論理的な間違い以外にも、思い込みや
勘違いの場合もあるので原因究明に時間がかかる場合が多い。 |
|
|
|
 |
|
 |
|
|
|
 |
|
 |
|
|
|
コードの問題の例(実行時エラー) |
Javaの規定に違反したために起こったエラー
(書式が違う、言語仕様と違っていることをした、など) |
Javaの規定の限界を超えたために起こったエラー
(循環関数などでJavaの呼出限界を超えた場合、など) |
関数やAPI(ライブラリ)の使い方の間違いによるエラー
(引数の順番を間違えた、など) |
| 変数の使い方の間違いによるエラー |
設定の間違いによるエラー
(IDEの設定ファイルやJavaの起動時の引数などの設定ミス) |
|
|
| コードの問題の例(論理エラー) |
考え方の間違い
(ロジックやアルゴリズム。処理を実行する順番がおかしいなど) |
| 知識不足 |
| 勘違い |
| 忘れている |
|
| |
論理エラーによって、実行時エラーが引き起こさている場合など
複合している場合もある。 |
|
|
|
 |
|
 |
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
2、エラーの原因がコード以外の場合
機械が壊れていたり、OSの不具合が原因だったり。
OSやJavaをアップデートした時も注意すること。
つまり、コードを見てるだけじゃ解決しない場合がある。
いろいろ調査する必要がある。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
| |
 |
|
 |
|
|
| コード以外の問題の例 |
| Javaの不具合によるエラー |
| OSの不具合によるエラー |
| 他のソフト(ライブラリなどを含む)の不具合によるエラー |
プログラムの実行環境によるエラー
(ライブラリのバージョンの違いや不足など) |
ハードウェアのエラー
(ハードディスクやメモリー、ネットワークカード、物理的な故障や
ドライバーの追加・変更によるものなど) |
| 上記の組み合わせによるエラー |
|
|
JavaやOSのアップデートやライブラリーの追加・変更、
新たな機器の接続やドライバーの追加・変更など・・・
今まで出ていなかったエラーが
開発環境の変更後に出た場合、注意する必要がある。 |
|
|
|
 |
|
 |
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
3、エラーの原因がエラーの複合の場合
同時に複数のエラーが起きている場合や
別のエラーが原因で、さらに引き起こされているエラー。
実行時エラーのエラーメッセージとは全く別のところが
原因になることもあるので注意。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
| |
 |
|
 |
|
|
| 複合的な問題の例 |
| 2箇所以上のコードのエラーの複合エラー |
|
コードのエラーとライブラリのバージョンの違いによるエラー |
| OSと開発環境のバージョンの違いによるエラー |
|
|
|
|
 |
|
 |
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
エラーの原因の切り分け
どこにエラーの原因があるのか一つ一つ
切り分けて調べていく必要がある。
今後「原因の切り分け方」を覚えていく必要がある。
経験の差が出る部分なので焦らないこと。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
|
 |
|
 |
|
|
|
デバッグの基本のまとめ |
|
|
|
|
| |
|
エラーの原因 |
|
・コードの問題 |
|
・コード以外の問題 |
|
・複合的な問題 |
|
| |
|
IDEの機能を使う |
|
・エラー表示 |
|
・ブレークポイント |
|
・変数のウォッチ |
|
・ステップ実行 |
|
| |
|
|
 |
|
 |
|
|
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
デバッグ方法のポイント
今まで正常に動いていたものが変更したらおかしくなった場合、
変更箇所に原因の元がある。
改変前と後の違いをよく考えてみること。
変更箇所に「関係する処理」に注目して「問題の整理」をする。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
| |
|
|
|
|
|
|
|
|
 |
|
 |
|
|
デバッグのポイント
|
・ |
改変前のコードと後のコードの違いを考える |
|
・ |
変更箇所に関係する処理に注目する |
|
・ |
問題を整理する |
|
|
|
 |
|
 |
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
バグは、時には解明するまで何日もかかる事もあります。
どこに原因があるのか的確な「切り分け」が必要になってきます。
徐々に詳しくなっていきましょう。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|