ランタイム エラーの検索と除去
更新 : 2007 年 11 月
このレッスンでは、プログラムをデバッグしてランタイム エラーを修正する方法について説明します。
以前に説明したように、ランタイム エラーは、プログラムが完了できない操作を実行しようとした場合に発生します。ランタイム エラーが発生すると、プログラムが停止してエラー メッセージが表示されます。プログラムを続行するには、エラーをデバッグして修正する必要があります。
ランタイム エラーの検索と修正
ほとんどのランタイム エラーは、変数を使用する前に変数に値を割り当てていないなどの、コード内の間違いによって発生します。プログラムを実行して間違いが検出されると、プログラムは停止し、コード エディタ ウィンドウに [例外処理アシスタント] ダイアログ ボックスが表示されます。このとき、プログラムは中断モードになります。これは、デバッグが実行されるモードです。
[例外処理アシスタント] ダイアログ ボックスには、エラーの説明以外に、エラーの原因を解明するためのトラブルシューティングのヒントが表示されます。トラブルシューティングのヒントをクリックすると、詳細なヘルプ トピックが表示されます。
プログラムを続行するには、エラーを修正する必要があります。それにはコードを調べてエラーの原因を探すことが必要です。たとえば、変数に間違った値が含まれているためにエラーが発生したと思われる場合は、中断モードに入ったままで、IntelliSense を使用して変数の値を表示できます。コード エディタで変数の上にマウスを置くと、ツールヒントに変数の値が表示されます。値が予期したものと異なる場合は、それより前にあるコードでその値が設定されている場所を探し、そのコードを修正して続行します。
やってみよう
変数の値を調べるには
[ファイル] メニューの [新規作成] をポイントし、[プロジェクト] をクリックします。
[新しいプロジェクト] ダイアログ ボックスの [テンプレート] ペインで、[Windows アプリケーション] をクリックします。
[プロジェクト名] ボックスに「RunTimeErrors」と入力し、[OK] をクリックします。
新しい Windows フォーム プロジェクトが開きます。
フォームをダブルクリックしてコード エディタを開きます。
Form_Load イベント ハンドラに次のコードを追加します。
Dim miles As Integer = 0 Dim hours As Integer = 0 Dim speed As Integer = 0
miles = 55 speed = miles / hours MsgBox(CStr(speed) & " miles per hour")
F5 キーを押してプログラムを実行します。[例外処理アシスタント] ダイアログ ボックスが表示され、メッセージ "OverflowException はハンドルされませんでした" が表示されます。
ダイアログ ボックスからコード ファイルへ引かれた点線から、コードのどの行にエラーの原因があるかがわかります。
[例外処理アシスタント] に最初に表示されるトラブルシューティングのヒントは、ゼロで割っていないことを確認する必要があることを示しています。
変数 miles の上にマウスを移動して、数秒間そのままにします。"miles 55" というツールヒントが表示されます。
次に、変数 hours の上にマウスを移動すると、ツールヒントが "hours 0" になります。
ゼロで割ることはできないにもかかわらず、hours の値がゼロになっています。これがエラーの原因です。hours の値が更新されていません。
miles = 55 の行の上に次のコード行を追加します。
hours = 2
コードの左側のマージンにある黄色の矢印をクリックして、hours = 2 の行までドラッグします。
これにより、エラーを含む行ではなくその行からプログラムを続行できます。エラーの修正を認識させるためには、このように新しく追加したコード行を実行することが必要です。
F5 キーを押してプログラムを続行します。"28 miles per hour" を表示するダイアログ ボックスが表示されます。
次の手順
このレッスンでは、ランタイム エラーを検出して修正する方法について説明しました。次のレッスンでは、3 種類目のプログラミング エラーとして、論理エラーについて説明します。高度なデバッグ手法については、「詳細情報 :イミディエイト ウィンドウでコードをテストする」を参照してから、論理エラーのレッスンに進んでください。
次のレッスン : 「想定外の現象 : 論理エラーの検出」