プログラム・プロブレム

ティータイム 6 エラーの読み方


I はじめに

初(以下H):さて、ティータイム 6 は「エラーの読み方」と題して説明をしてみるぞ。
涼(以下S):エラー… 大抵の場合は見たくないものですが。
H:そんなエラーだが、読めるようになると重要な参考情報になるんだ。
S:特にコンパイルエラーは便利ですね。
H:インタプリタ型言語の場合は、代わりにユニットテストを使うといいぞ。
S:コンパイラ型言語でもユニットテストは重要ですけどね。
H:では本文に行ってみよう。

II エラーの読み方

行番号

S:さて、エラーが出たらまず見るのは行番号です。
H:大抵のエラーには、その原因になった場所の行番号が表示される。
S:ばっちりその場所になる場合もありますが、場合によっては前後に数行ズレる事もあります。
H:該当行を見てみて、関係無さそうなら前後も見るようにしような。

エラー名

S:続いてはエラー名ですね。
H:「Syntax Error」とか「Runtime Error」とかいうヤツだ。
S:ここにはエラーの大まかな分類が示されます。
H:これを見ると、どんな種類のエラーなのかが分かるわけだ。
S:検索する時のキーワードに使うといいですかね。

エラー内容

H:そしてエラーの内容だ。
S:どんな原因でエラーになったのかの説明が表示されます。
H:結構詳しく表示されるから、がんばって読んでみるように心がけような。

コールスタック

S:例外などの場合にはコールスタックも表示される場合があります。
H:実際のエラー原因と、エラー発生位置が離れている場合に役に立つぞ。
S:それまでに実行されてきた関数が順序良く表示されますからね。
H:エラー位置に原因が見付からなければ、上の関数や更に上の関数などの流れもチェックしよう。

III 対応方法

S:何と言っても、一番大事なのはエラーで慌てないことです。
H:慌ててしまうと、対応を誤ったり大事な事を忘れたりするからな。
S:まずは一旦深呼吸するなどして落ち着きましょう。話はそれからです。

H:で、それがコンパイルエラーだった時はラッキーだ。
S:実行前に問題が発見されたわけですからね。
H:じっくり対処できることに感謝しよう。

S:実行時エラーの時は、まず重要度を判断しましょう。
H:サービス中のサーバプログラムとかだと、対応を急ぐ必要があったりするからな。
S:自分の所の使い捨てツールなら緊急度は低いですしね。

H:状況を判断できたら、対応に使える時間も分かるはずだ。
S:急ぎの場合は原因追求よりも、とりあえずの対策優先のこともあります。
H:そのへんは臨機応変な判断をしてもらおう。

S:次に原因追求ですが、まずはエラー発生場所から手を付けましょう。
H:ログとかエラーメッセージを参考に、なんでエラーになったのかを調べることだ。
S:エラーが再現可能な場合はだいぶ楽ですが、再現が安定しない場合は大変です。
H:調べる時には出力命令が役に立つぞ。
S:関係ありそうな変数の内容などを、ひたすら出力するだけでも結構便利です。
H:エラー発生場所に問題が無い時には、遡って調べる必要があるな。
S:二分探索の要領で範囲を絞っていくといいですね。
H:全体の半分の地点での状況を調べて、問題があれば前半分、無ければ後半分を対象にして繰り返す方法だな。
S:ロジック自体のミスと、コーディング時のミスの両面から調べましょうね。

H:原因が分かれば、あとは対処すればいいわけだ。
S:簡単なコーディングミスなどの場合は、該当個所の修正で大丈夫です。
H:もっと根本的な部分に問題がある場合には、設計の見直しまで戻るのも必要だぞ。
S:併せて、今のバグに対するテストコードを作成しておくのも重要です。
H:同じバグが何かの理由で再発生した時に見付けるのが楽になるからな。

S:ソースコードの修正が終わったら、ユニットテストを通しましょう。
H:もしかすると、修正したことによって他の問題が発生している可能性がある。
S:バグを直したら、別のバグを発生させてたのでは洒落になりませんからね。
H:重要だな、ユニットテスト。

S:そして、最後にバグが直ったことの確認です。これは別の人にやってもらう方がいいですね。
H:再現手順を行ってみて、修正後のコードでバグが発生しなければ OK ということだな。
S:必要ならば詳細報告書などを書いておきましょう。
H:そういう時にはバグ追跡システムとかを利用できると便利だな。

IV 終わりに

S:エラー情報は重要です。ぜひ活用できるようにしましょう。
H:分からなくても、まずは読んでみる癖を付けるといいだろうな。
S:C++ のテンプレートのエラーなんて、慣れてもわけ分からないのが普通ですし。
H:この記事が少しでもそんな時の役に立てば幸いだ。
S:では、今回はこれで。
H:最後まで読んでくれてありがとう。

ティータイム 6 終了


一覧に戻る