デバッグの基本 つづき |
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
 |
 |
|
次にエラーの原因を
考えてみよう。
原因は大きく分けると3種類
・コードの問題
・コード以外の問題
・複合的な問題
主な原因はコードの問題だ。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
 |
探偵みたい! |
|
|
|
 |
|
 |
|
エラーの原因
・ |
コードの問題(実行時エラー、論理エラー、または両方) |
・ |
コード以外の問題(パソコンの故障など) |
・ |
複合的な問題
(コードの複数箇所のエラー、コードとコード以外の複合エラーなど) |
|
|
|
 |
|
 |
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
まずはコードの問題。
実行時エラーの場合は
Javaがエラーメッセージを
出して、おおよその原因を
教えてくれるから、
ある程度解決しやすい。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
 |
 |
 |
|
|
|
|
 |
|
|
|
|
|
さっき見た
メモリー不足
エラーとかね。
コードのエラーを
出してる行も
教えてくれるよ。 |
 |
|
 |
ヒントを
くれるんだね。 |
|
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
 |
 |
|
論理エラーの場合、
考え方や作り方が間違っていたり
勘違いが原因だから
原因を探すのが難しい場合が
多い。
忘れている場合や思い込み。
そもそも、そのやり方を知らない
場合もあるからね。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
そうか。
あたしが前に
計算問題で、
掛け算のやり方
間違えてたのと同じだ。
全然、気がつかなかった
もんね。
あんな感じなんだね。 |
|
|
 |
 |
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
 |
あたし1人じゃ
気づくの
時間かかったね。 |
|
|
|
SESSION
7 で、ことがやった計算の間違え |
 |
|
 |
|
計算問題 |
|
計算の答えはいくつ? |
(2048 × (1024 + 1024)) - 8658 + 896 × 1024 = ??? |
|
|
詳しくはSESSION 7参照 |
|
|
「掛け算は、足し算引き算よりも先に計算しなければいけない」 |
|
ことは、この事を忘れていたため、正しい計算ができなかった。 |
|
掛け算のやり方を忘れてたら、何が間違いの原因か分からない。
論理エラーは、論理的な間違い以外にも、思い込みや
勘違いの場合もあるので原因究明に時間がかかる場合が多い。 |
|
|
|
 |
|
 |
|
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
もちろん、両方が同時に
起こっている場合もある。
注意しよう。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
 |
 |
 |
|
|
|
|
 |
|
|
|
|
|
覚えないでいいよ。
参考ね。
ざっと読んでー。 |
 |
|
 |
はい。 |
|
|
|
 |
|
 |
|
コードの問題の例(実行時エラー) |
Javaの規定に違反したために起こったエラー
(書式が違う、言語仕様と違っていることをした、など) |
Javaの規定の限界を超えたために起こったエラー
(循環関数などでJavaの呼出限界を超えた場合、など) |
関数やAPI(ライブラリ)の使い方の間違いによるエラー
(引数の順番を間違えた、など) |
変数の使い方の間違いによるエラー |
設定の間違いによるエラー
(IDEの設定ファイルやJavaの起動時の引数などの設定ミス) |
|
|
コードの問題の例(論理エラー) |
考え方の間違い
(ロジックやアルゴリズム。処理を実行する順番がおかしいなど) |
知識不足 |
勘違い |
忘れている |
|
|
論理エラーによって、実行時エラーが引き起こさている場合など
複合している場合もある。 |
|
|
|
 |
|
 |
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
それから、エラーの原因が
コード以外の場合。
機械が壊れていたり、
OSの不具合が原因だったり・・・。
コードを変更した途端に
エラーが出て、それが原因だと
思って延々調べてたら、実は
タイミングよくネットワークカードが
壊れたせいでした!
「なんでー、まさか!」ってね。
OSやJavaをアップデートした時も
注意しよう。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
 |
 |
 |
|
|
|
|
 |
|
|
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
えー!
コードを見てるだけじゃ
だめな場合があるんだ。
いろいろ調査する
場合もあるんだね。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
 |
 |
 |
|
|
|
|
 |
|
|
|
|
お前
すげー
言いそう。 |
 |
|
 |
なんでー、
まさか!
なんちゃって。 |
|
|
|
 |
|
 |
|
コード以外の問題の例 |
Javaの不具合によるエラー |
OSの不具合によるエラー |
他のソフト(ライブラリなどを含む)の不具合によるエラー |
プログラムの実行環境によるエラー
(ライブラリのバージョンの違いや不足など) |
ハードウェアのエラー
(ハードディスクやメモリー、ネットワークカード、物理的な故障や
ドライバーの追加・変更によるものなど) |
上記の組み合わせによるエラー |
|
|
JavaやOSのアップデートやライブラリーの追加・変更、
新たな機器の接続やドライバーの追加・変更など・・・
今まで出ていなかったエラーが
開発環境の変更後に出た場合、注意する必要がある。 |
|
|
|
 |
|
 |
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
それからエラーの原因が
エラーの複合の場合もあるね。
同時に複数のエラーが
起きている場合や
別のエラーが原因で、さらに
引き起こされているエラーね。
実行時エラーのエラーメッセージとは、
全く別のところが原因だったって
こともあるよ。 |
|
|
 |
 |
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
 |
めぐりめぐってー
出たエラーとかー
「風が吹けば
桶屋がもうかる」
みたいなエラー
もう最悪ー |
|
なんでー、
まさか! |
 |
|
|
|
|
 |
|
 |
|
複合的な問題の例 |
2箇所以上のコードのエラーの複合エラー |
コードのエラーとライブラリのバージョンの違いによるエラー |
OSと開発環境のバージョンの違いによるエラー |
|
|
|
|
 |
|
 |
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
だから、どこにエラーの
原因があるのか
一つ一つ切り分けて
調べていく必要がある。
「原因の切り分け方」を
覚えていく必要があるんだ。
経験の差が
滅茶苦茶出る部分だな! |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
 |
 |
 |
|
|
|
|
 |
|
|
|
|
|
とどめを
どーん |
 |
|
あー |
|
 |
|
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
悪い、悪い。参考までね。
今は深く考えないでいいよ。
軽く知っといて。
実行時エラーと
論理エラーは覚えといてね。
ゆっくり慣れていこうな。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
 |
 |
 |
|
|
|
|
 |
|
|
|
|
|
どうせ
遅かれ早かれ
経験するからー
ヒヒヒ |
 |
|
 |
そっか。
よかった。 |
|
|
早速
論理エラー
だしー |
 |
|
 |
そっか!
今回のは論理エラー
なんだっけ。
エラーが
見つけづらいんだ・・・。
あわわ。 |
|
|