ASP を使用して Web アプリケーションを開発したことがある人なら、Web アプリケーションのデバッグがいかに面倒かを知っているはずです。 ASP では、デバッグは面倒で、通常は Response.Write() メソッドを使用して変数の値を出力する必要があります。そこで自問してみてください。アプリケーションをデプロイする前にデバッグ ステートメントを削除するのを何度忘れたことがあるでしょうか。
この状況は、.NET Framework コンポーネントの出現により完全に変わりました。 .NET では、Visual Studio .NET のデバッガーを使用するか、System.Web.TraceContext 名前空間の Trace クラスを使用して、Web アプリケーション全体の実行をトレースできます。この記事では、Trace クラスを使用してデバッグ作業を支援する方法を説明します。
Trace クラスの使用
ASP.NET には、アプリケーション情報フローの追跡に役立つ Trace クラスが含まれています。デバッグに Response オブジェクトを使用する代わりに、Trace クラスを使用してデバッグ情報を出力できるようになりました。
その使用法を示すために、まず ASP.NET Web アプリケーションを構築し、デフォルトの WebForm1 に Button と ListBox コントロールを配置します (図 1 を参照)。 ListBox コントロールに 3 つの項目を入力し、AutoPostBack プロパティを True に設定します。
図 1. デフォルトの WebForm1 への入力 |
この記事では、アプリケーションの実行フローをトレースしたいと思います。まず、トラッキングをアクティブにします。ページ命令には Trace 属性が含まれる必要があり、その値は True (HTML ソース モードに切り替える) に設定されます (図 2 を参照)。
図 2. アクティベーションの追跡 |
次に、フォームの読み込みイベントに Trace ステートメントを挿入して、ポストバックが発生したかどうかを確認します。 PostBack イベントは、ASP.NET で最もわかりにくい機能の 1 つであり、ASP.NET を初めて使用する開発者にとっては失敗につながることがよくあります。
Private Sub Page_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ MyBase.Loadを処理します 'ページを初期化するためのユーザー コードをここに配置します Trace.Write("ページが読み込まれました") そうでない場合はPostBack Trace.Write("ポストバック中ではない") 'ポストバックが発生したときにいくつかの操作を実行しますElse Trace.Write("ポストバック中") 'いくつかの操作を実行End If エンドサブ |
また、ListBox 項目が選択されたときにポストバックが発生するかどうかも知りたいです。
Private Sub ListBox1_SelectedIndexChanged(ByVal sender As _ System.オブジェクト、_ ByVal e As System.EventArgs) ハンドル _ ListBox1.SelectedIndexChanged Trace.Write("リストボックス ポストバック") エンドサブ |
上記の ASP.NET アプリケーションを実行すると、次の出力が表示されます (図 3 を参照)。
図 3. 追跡情報の表示 |
WebForm1 が初めて読み込まれると、「ページが読み込まれました」および「ポストバックにありません」という文字列が表示されることがわかります。 WebForm1 のボタンをクリックすると、図 4 に示すレコードが表示されます。同様に、ListBox をクリックすると、「Listbox postback」という文字列も表示されます。
図 4. トレース情報の確認 |
追跡ページには次のセクションが含まれています (図 3 にはすべての情報が示されているわけではありません)。
セクション | 説明 |
リクエストの詳細 | 会話 ID、エンコーディング、リクエストの時間など、リクエストに関連する情報を説明します。 |
トレース情報には、 | 現在実行中のアプリケーションの詳細が含まれます。このセクションには追跡情報が表示されます。 |
コントロール ツリーには | 、ページ内のコントロールに関する情報とビューステートの非表示フィールドのサイズが表示されます。 |
Cookie コレクションには、 | ページによって設定された Cookie とその値が表示されます。 |
ヘッダー コレクションには、 | content-length や user-agent などの HTTP ヘッダー情報が表示されます。 |
Forms コレクションには、 | ページ上のコントロールの名前とその値が表示されます。 |
「サーバー変数」には、 | サーバー側の環境変数が表示されます。 |
当社の追跡情報は「追跡情報セクション」の下に表示されることに注意してください。トレースをオフにしたい場合は、ページ ディレクティブの Trace 属性を False に設定するだけです。アプリケーションからトレース命令を削除する必要はなく、ブール値を設定するだけでデバッグをオフにすることが簡単になりました。
トレースのオン/オフは、ページ ディレクティブの Trace 属性の値を変更するだけです。 Trace クラスを使用して、プログラムでトレースをオフにすることもできます。 Trace クラスのメンバーは次のとおりです。
プロパティの | 説明 |
IsEnabled は、 | 現在のリクエストの追跡をアクティブにするかどうかを示します。 |
TraceMode は | 、トレース モード (sortByCategory または sortByTime) を設定します。 |
メソッド | 説明 |
Warn は、 | トレース情報を赤色で表示します。 |
トレース情報を書き込みます | 。 |
プログラムで追跡をオフにするには、WebForm1 のロード イベントで次のステートメントを使用します。
今回の場合、追跡情報は目立つように表示されていないため、他の追跡情報に埋もれてしまいます。 Trace クラスの Warn() メソッドは、トレース情報を赤色で出力できます。したがって、次のようにコードを記述する代わりに、次のようにします。
Trace.Write("ページが読み込まれました") |
その代わり:
Trace.Warn("ページが読み込まれました") |
図 5 は、Warn() メソッドに関して赤色で表示されたデバッグ情報を示しています。
図 5. Warn() メソッドを使用してトレース情報を赤色で表示する |
追跡情報の並べ替え
アプリケーションに複数のトレース ステートメントを配置すると、乱雑になる場合があります。追跡情報をさまざまなカテゴリに分類できれば、追跡が簡単になります。 Trace クラスを使用すると、カテゴリに基づいてトレース情報を分類および並べ替えることができます。
次の例は、追跡情報をカテゴリ別にグループ化する方法を示しています。
Private Sub Page_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ MyBase.Loadを処理します Trace.TraceMode = TraceMode.SortByCategory 'ページを初期化するためのユーザー コードをここに配置します Trace.Warn("Page_Load", "Page requested") そうでない場合はPostBack 'いくつかの操作を実行します Trace.Warn("Page_Load", "ポストバック中ではありません") それ以外 Trace.Warn("Page_Load", "ポストバック中") 終了の場合 エンドサブ
Private Sub ListBox1_SelectedIndexChanged(ByVal 送信者 _ System.Object として、ByVal e として _ System.EventArgs) ハンドル _ ListBox1.SelectedIndexChanged Trace.Warn("リストボックス", "リストボックス ポストバック") エンドサブ |
この例を実行すると、次のデバッグ情報がカテゴリ別にグループ化されて表示されます (図 6 を参照)。
図 6. カテゴリ別に並べ替え |
上記のコードを分析してみましょう。
Trace.TraceMode = TraceMode.SortByCategory |
TraceMode プロパティは、トレースでサポートされるモードを設定します。
· SortByCategory: 追跡情報をタイプに従って並べ替えます。
· SortByTime: 実行順序に従ってトレース情報を表示します。
カテゴリ別並べ替えモードを選択したため、図 7 はカテゴリごとに並べ替えられた情報を示しています。
Trace.Warn("Page_Load", "ページが読み込まれました") |
Warn 属性では、メッセージが赤色で表示されます。これはオーバーロードされたメソッドであることに注意してください。この例では、2 つのパラメーターを渡します。最初の入力カテゴリ (Category)、2 番目のパラメータはメッセージ (Message) を取得することです。
Trace クラスを使用してトレース モードを設定するほかに、ページ ディレクティブを使用してトレース モードを指定することもできます。
<%@ Page Language="vb" Trace="true" TraceMode="SortByCategory" AutoEventWireup="false" Codebehind="WebForm1.aspx.vb" Inherits="WebApplication1.WebForm1" %> |
アプリケーション トレース
最後のセクションでは、ページ内の実行情報の流れを追跡するページ追跡について説明します。 ASP.NET は、アプリケーション レベルのトレースもサポートしており、アプリケーション レベルのトレースは、web.config ファイルのトレース セクションで設定されます。
アプリケーションレベルのトレースをアクティブにするには、次の値を設定します。
プロパティ | 値 | 説明 |
Enabled | True | アプリケーションレベルのトレースを有効または無効にします。 |
requestLimit | 10 | は、追跡するリクエストの最大数を設定します。 |
pageOutput | False は | 、ページの最後に追跡情報を表示します。 |
traceMode | sortByTime | トレース情報のソートメソッド。 |
localOnly | True は | 、ローカル以外のコンピューターでブラウザ トレースを表示する機能を設定します。 |
アプリケーションがロードされると、追跡情報はページに表示されません。トレース情報を表示するには、トレース ビューア (trace.axd) を使用する必要があります。
図 7. アプリケーションレベルのトレース |
図 7 は、アプリケーションの最後の 6 つのリクエストのトレース情報を示しています。各リクエストの詳細を表示するには、各行の「詳細を表示」リンクをクリックします。
web.config ファイルでトレースが true に設定され、ページ ディレクティブで false に設定されている場合、トレースは無効になることに注意してください。
要約する
ASP.NET を使用すると、Web アプリケーションのデバッグがはるかに簡単になります。追跡の使用方法がわかったので、それを試して、生産性がどれだけ向上するかを確認してください。