スクリプトを作成する際は、そのスクリプトが技術的におよび構文的に正確であることが必要です。スクリプトに誤りがあると、正常に実行できなかったり、エラー メッセージが表示されたりします。これらのエラー メッセージの原因を調べてエラーを解決する作業のことをデバッグと呼びます。スクリプトのテストを十分に行い、必要なデバッグを行うことによって、Web サイトを訪問するすべてのユーザーが、エラー メッセージを見ることなく意図したとおりの動作を体験できるようにしてください。
エラー メッセージは HTML として送り返されますが、エラーの種類に応じて次の情報の一部または全部がいっしょに返されます。
注意 行番号を表示するテキスト エディタを使えば、.asp ファイル内のエラー行を調べるのに便利です。
これらの情報を使って .asp ファイルを修正し、エラーを解決します。深刻なエラーについては、クライアント ブラウザだけでなく、Windows NT や Internet Information Server (IIS) のログにも送られます。それ以外のエラーは IIS のログとクライアント ブラウザに送られます。
.asp ファイル内にエラーが見つかると、スクリプトの処理が中断されてエラー メッセージがブラウザに返されます。エラーが見つかった場合でもページの処理を続けたい場合には、次の行を .asp ファイルの先頭に追加します。
<% On Error Resume Next %>
注意 On Error Resume Next ステートメントは VBScript のステートメントであり、VBScript で記述されているスクリプトに対してのみ作用します。.asp ファイルに JScript が含まれている場合、JScript ではエラー後再開に相当する機能がないため、このステートメントを使っても JScript のエラーのデバッグには何の効果もありません。VBScript から JScript の関数を呼び出してその関数によってエラーが生じた場合は、エラー メッセージがブラウザに返され、その位置で .asp ファイルの処理が中断します。
On Error Resume Next ステートメントは、実際にエラーを解決するものではありません。エラーを手動で解決するには、Err.Clear メソッドを使います。
<HTML> <HEAD> <TITLE>On Error Resume Next および Err.Clear によるエラー処理</TITLE> </HEAD> <BODY> <% Call DoSafeDivide(1, 3) Call DoSafeDivide(1, 0) %> <SCRIPT LANGUAGE="VBScript" RUNAT=Server> Sub DoSafeDivide(x, y) On Error Resume Next z = x / y If Err.Number > 0 Then Response.Write("割り算に失敗しました: " & x & " / " & y & "<BR>") Response.Write("エラー元: " & Err.Source & "<BR>") Response.Write("エラー番号: " & Err.Number & "<BR>") Response.Write("エラーの説明: " & Err.Description & "<BR>") Err.Clear Else Response.Write("割り算に成功しました: " & x & " / " & y & " = " & z & "<BR>") End If End Sub </SCRIPT> </BODY> </HTML>
コレクションに対して繰り返しデバッグ作業を行う場合に、For...Each ステートメントを使ってスクリプト内のコレクションのすべての変数を返すことにより作業を簡単にすることができます。たとえば、次のスクリプト例は、Request オブジェクトの QueryString コレクションに対して For...Each ステートメントを使い、QueryString コレクション内のすべてのキーに対するすべての値を返します。
<% For Each Key In Request.QueryString %> <%= Key %> = <%= Request.QueryString(Key) %><br> <% ValueCount = Request.QueryString(Key).Count If ValueCount > 1 Then %> <%= Key %> に対して <%= ValueCount %> 個の値があります。<br> <% For i = 1 To ValueCount %> 値 <%= i %> は <b><%= Request.QueryString(Key)(i) %></b><br> <% Next End If Next %>
VBScript のエラーでは、次の例のようにエラーの正確な位置を示すポインタをスクリプト コード内に出力することができます。
Microsoft VBScript compilation error '800a03f3' Expected '=' /ASPSamp/Samples/outstrem.asp, line 11 Set OutStream Nothing -------------^
JScript では、通常次のような間違いがエラーの原因となります。
JScript のデバッグでは以上のようなエラーについて常にチェックしてください。
Request オブジェクトの QueryString コレクション内の変数を受け取るときに、Form コレクション内にあるべき変数を受け取った場合は、HTML の <FORM> タグで METHOD=POST
を設定していないか確認してください。QueryString コレクションにフォーム変数を渡すのは GET
メソッドです。POST
メソッドは Form コレクションにフォーム変数を渡します。