ASP ページのスクリプト オブジェクトのデバッグ
更新 : 2007 年 11 月
ASP ページのスクリプト オブジェクトをデバッグする場合は、以下の項目について検討する必要があります。
スクリプト オブジェクト モデルについて
デバッグとスクリプト ライブラリ
スクリプト オブジェクトのデバッグの有効化
エラーの報告
イベントのトレース
警告のトレース
スクリプト オブジェクト モデルについて
ASP スクリプト オブジェクト モデルでは、Web アプリケーションで使用できるイベント、プロパティ、およびメソッドを使って、一連のオブジェクトが定義されています。ほとんどのスクリプト オブジェクトは、Microsoft Visual Basic のコントロールと同様の方法で、ユーザー インターフェイス (ボタンやテキスト ボックスなどの要素) と関数を表します。
Microsoft Visual Studio 2005 のスクリプト オブジェクトには特別なランタイムは不要です。オブジェクトを使用すると、ASP ページに含まれるスクリプト ファイル内にオブジェクトが定義されます。これらのファイルはスクリプトですが、ActiveX データ オブジェクト (ADO: ActiveX Data Object) コマンドおよび HTML 要素をカプセル化しており、イベント ドリブン プログラミングをサポートする洗練されたオブジェクトを作成できます。
スクリプト オブジェクトには 2 つのバージョンがあります。標準の HTML 3.2 ブラウザ用に ASP サーバー側で実行されるオブジェクトと、クライアント側の Internet Explorer 4.0 以降のバージョンで実行されるオブジェクトです。プログラミング モデル (イベント、メソッド、およびプロパティ) は、どちらのバージョンでも同じです。スクリプト オブジェクトは、コードで直接、またはデザイン時のコントロールによって、作成および操作できます。ASP ページを保存すると、スクリプト オブジェクト コードは、標準 HTML とスクリプトの組み合わせの形で永続化されます。
デバッグとスクリプト ライブラリ
スクリプト オブジェクトはスクリプトで作成されるため、スクリプト オブジェクト モデルとやり取りするスクリプトを作成した場合、スクリプトのデバッグが複雑になる場合があります。この理由を次に示します。
まず、デバッガでスクリプトを 1 ステップずつ実行すると、見慣れない洗練されたスクリプト ライブラリのコードに遭遇する場合があります。
次に、スクリプト ライブラリ内でエラーが発生した場合、スクリプト ライブラリを 1 ステップずつ実行するのは煩雑であり、エラーの場所を特定できない場合があります。
最後に、作成したスクリプトとスクリプト オブジェクト モデルとの間で、イベントのシーケンスや制御フローをたどるのが難しい場合があります。
このような状況で、次のスクリプト オブジェクト モデルのデバッグ オプションを使用すると、アプリケーションをデバッグできます。
低レベルのエラーのキャッチ — レコードセットなどのスクリプト オブジェクトがエラーを検出した場合、詳細なエラー メッセージを表示します。このオプションを使用すると、外部的な要因によって発生したコンポーネントのエラーを検出できます。
イベントのトレース — イベントの発生時に、発生したイベントの一覧をページに表示できます。このオプションを使用すると、スクリプト オブジェクト モデルのイベントに関連して作成したスクリプトがいつ実行されるかを確認できます。
警告のトレース — エラーになる可能性のある問題が発生したときに警告メッセージを表示します。このオプションを使用しない場合、メッセージは表示されません。このオプションを使用すると、無効なパラメータをメソッドに渡すときに発生する問題などを検出できます。
スクリプト オブジェクトのデバッグの有効化
ASP ページには、通常、先頭のスクリプト ブロックにデバッグ オプションが記述されています。既定では、デバッグ オプションはオフになっています。スクリプト ブロックの例を次に示します。
<SCRIPT id=DebugDirectives runat=server language=javascript>
// Set these to true to enable debugging or tracing
@set @debug=false
@set @trace=false
</SCRIPT>
スクリプト オブジェクトのデバッグを行うには、サーバーで JScript 5.0 以降のバージョンを実行する必要があります。JScript Version 5.0 は、Microsoft の Web サイトからサーバーにダウンロードできます。
デバッグを有効にするには、必要なデバッグ オプションを true に設定します。たとえば、低レベルのエラーをキャッチするには、ブロックを次のように変更します。
<SCRIPT id=DebugDirectives runat=server language=javascript>
// Set these to true to enable debugging or tracing
@set @debug = true
@set @trace = false
</SCRIPT>
デバッグ オプション ブロックは、ASP ページの最初にある @language ディレクティブの直後に記述してください。
次に示すように、全部で 4 つのオプションを設定できます。
名前 |
目的 |
---|---|
@debug |
特定のスクリプト オブジェクトで選択されたエラーが発生したときに報告します。 |
@trace |
次の 2 つのトレース オプションをオンにします。 |
@trace_events |
イベントのトレースをオンにします。 |
@trace_warnings |
エラーになる可能性のある問題が発生したときに、警告を表示します。オンにしない場合は、何も表示されません。 |
各設定の詳細については、このトピックの後半で説明します。
メモ : |
---|
@trace を true に設定すると、@trace_events と @trace_warnings の設定がオーバーライドされます。@trace を false に設定した場合は、各トレース オプションのオンとオフを個別に設定できます。 |
個別のトレース オプションは、ASP ページの既定のスクリプト ブロックにはありません。個別のトレース オプションを設定する場合は、ブロックにオプションを追加する必要があります。たとえば、次のブロックでは、警告をオフのままにして、イベントのトレースだけを有効にしています。
<SCRIPT id=DebugDirectives runat=server language=javascript>
@set @debug = false
@set @trace = false
@set @trace\_events = true
</SCRIPT>
Microsoft Internet Explorer 4.x を使用している場合は、いずれかの @trace オプションを設定すると、BODY タグがオーバーライドされることがあります。そのため、BODY タグのイベント連結が無効になり、属性が無視されることがあります。この問題は、Internet Explorer 5.0 以降のバージョンでは発生しません。
次のスタイルのイベント連結は、Internet Explorer 4.0 では機能しません。
<BODY onload="initialize()">
この制限事項に対処するには、別の連結機構を使用します。Visual Basic Scripting Edition (VBScript) では、次の暗黙連結を使用できます。
<SCRIPT LANGUAGE="VBScript">
Function window_onload()
initialize()
End Function
</SCRIPT>
JScript では、次のように、ウィンドウ オブジェクト イベントに関数ポインタを割り当てるグローバル スクリプトを呼び出すことができます。
<SCRIPT LANGUAGE="JScript">
window.onload = initialize
</SCRIPT>
BODY タグに属性が含まれている場合は、ドキュメント オブジェクトのプロパティを設定するのではなく、スクリプトで属性を設定する必要があります。たとえば、現在 BODY タグに BGCOLOR="#FFFF00" という属性が含まれている場合は、スクリプトを使用して次のように属性を設定できます。ドキュメントが最初に読み込まれたときに、前述の技法を使用して、このスクリプトを呼び出してください。
<SCRIPT LANGUAGE="JScript">
function initialize(){
document.bgColor = "#FFFF00";
}
</SCRIPT>
エラーの報告
スクリプト オブジェクトは、ページ外のほかのオブジェクトとやり取りすることがあります。たとえば、レコードセット オブジェクトは、ADO を使用してデータベースにアクセスします。やり取りの途中でエラーが発生したときに、外部オブジェクトによって報告されるエラー情報があいまいだったり、独自のページのコンテキストには不十分と思われる場合があります。
@debug オプションを使用すると、レポート機構が有効になり、この種類のエラーがキャッチされ、解釈されます。エラー情報は ASP ページに書き込まれ、ページの通常のコンテンツと共に表示されます。基になるエラー メッセージが表示されることもあります。
たとえば、@debug を true に設定し、レコードセット オブジェクトが無効な SQL ステートメントを実行しようとすると、ページに次のようなメッセージが表示されます。
SCRIPTING OBJECT MODEL EXCEPTION:
FILE: recordset.asp
FUNCTION: Recordset1.open()
DESCRIPTION: Failed to open the ADO recordset. Check for the following
possible causes:
An invalid SQL statement.
Missing or invalid database object name (check Recordset DTC properties)
Missing parameters or parameter type mismatch (parameters must be set
before recordset is opened).
イベントのトレース
ASP ページでスクリプト オブジェクト モデルを使用すると、状態の変化 (Recordset1_ondatasetcomplete など) やユーザーのアクション (Button1_onclick など) に対応して、個別のスクリプト オブジェクトがイベントを発生させます。スクリプト オブジェクト モデルによって発生したイベントに関連して、独自のスクリプトがいつ実行されるかを認識しておく必要があります。
そのためには、@trace オプションまたは @trace\_events オプションを true に設定して、イベントのトレースを有効にします。イベントのトレースを有効にすると、イベントが発生するたびにイベント情報が ASP ページに書き込まれます。たとえば、ASP ページの一部は、次のようになります。
EVENT TRACE: thisPage fired oninit event.
EVENT TRACE: Recordset1 fired onbeforeopen event.
EVENT TRACE: Recordset1 fired onrowenter event.
EVENT TRACE: Recordset1 fired ondatasetchanged event.
EVENT TRACE: Recordset1 fired ondatasetcomplete event.
独自のスクリプトがいつ実行されるかを判別するには、次のスクリプトに示すように、重要な箇所に Response.Write ステートメントを記述します。この例では、テキスト ボックスの情報に基づいてレコードセットのパラメータを設定しています。各ステップが終了すると、ページにレポートが表示されます。
Sub btnQuery_onclick()
Recordset1.close()
Response.Write("Finished closing recordset.")
Recordset1.setParameter 1, txtLastName.value
Response.Write("Finished resetting query parameter.")
Recordset1.open()
Response.Write("Finished reopening recordset.")
End Sub
JScript の条件付きコンパイル コマンドを使用すると、デバッグ オプションを設定したときだけ Response.Write ステートメントをページに表示するように指定できます。たとえば、次のブロックでは、@trace オプションが true に設定されているときだけ Response.Write ステートメントが実行されます。
@if (@trace)
Response.Write("Ready to set SQL statement parameters.");
@end
使用できるのは、デバッグ オプションだけではありません。次の例のように、条件フラグを作成することもできます。
@set @trace\_custom = true
' ... other script here
@if (@trace_custom)
Response.Write("Ready to set SQL statement parameters.");
@end
メモ : |
---|
ページを呼び出す前に、デバッグ条件がすべて false に設定されていることを確認してください。 |
条件付きコンパイルの詳細については、Microsoft のスクリプト関連の Web サイトで、ステートメントの @if コマンドと @set コマンドに関する説明を参照してください。
警告のトレース
通常、スクリプト オブジェクトは、致命的でないエラーを報告しません。これは、スクリプト オブジェクトを強力にし、不要な情報をできるだけ ASP ページに表示しないためです。たとえば、スクリプト オブジェクトのメソッドに無効な値を渡したときでも、オブジェクトがその値によって完全に失敗しない場合、オブジェクトはエラー メッセージを表示せずに実行を続けることがあります。ただし、アプリケーションの開発中は、通常、スクリプト オブジェクトに問題が発生していないかどうかを知る必要があります。問題が報告されないことが原因で、後でページの実行時に別の問題が発生し、ページのデバッグが困難になることもあります。
この問題を解決するには、@trace オプションまたは @trace\_warnings オプションを true に設定して、警告をトレースします。スクリプト オブジェクトは、問題を検出すると、次の形式でページに情報を書き込みます。
WARNING TRACE:
FILE: recordset.asp
FUNCTION: Recordset1.open()
DESCRIPTION: Recordset is already open.
参照
処理手順
方法 : Internet Explorer でスクリプトのデバッグを有効にする