ASP.NET の例外処理には 3 つの側面があります。
トレース- ページ レベルまたはアプリケーション レベルでプログラムの実行をトレースします。
エラー処理- ページまたはアプリケーション レベルで標準エラーまたはカスタム エラーを処理します。
デバッグ- プログラムを進め、コードを分析するためのブレークポイントを設定します。
この章では、トレースと処理について説明します。この章では、デバッグについて説明します。
概念を理解するには、次のサンプル アプリケーションを作成します。ラベル コントロール、ドロップダウン リスト、リンクがあります。ドロップダウン リストには引用符の配列が読み込まれ、選択した引用符が下のラベルに表示されます。存在しないリンクを指すハイパーリンクもあります。
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="errorhandling._Default" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional// JP" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title> トレース、デバッグ、エラー処理 </title> </head> <body> <form id= "form1" runat="server"> <div> <asp:Label ID="lblHeading" runat="server" Text="トレース、デバッグ、エラー処理"> </asp:Label> <br /> <br / > <asp:DropDownList ID="ddlquotes" runat="server" AutoPostBack="True" onselectedindexchanged="ddlquotes_SelectedIndexChanged"> </asp:DropDownList> <br /> <br /> <asp:Label ID="lblquotes" runat= "サーバー"> </asp:ラベル> <br /> <br /> <asp:HyperLink ID="HyperLink1" runat="サーバー" NavigateUrl="mylink.htm">リンク先:</asp:HyperLink> </div> </form> </body></html>
ファイルの後のコード:
public Partial class _Default : System.Web.UI.Page{ protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { string[,] quotes = { {「想像力は知識よりも重要です。」、「アルバート」アインステン"}、{"徳を持っていないなら、美徳であると仮定しなさい" "シェイクスピア"}、{"人間は自分の承認がなければ快適ではいられない"、"マーク・トウェイン"}、 {"若い医者と年老いた床屋に気をつけろ", "ベンジャミン フランクリン"}, {"怒りで始まったことは恥に終わる", "ベンジャミン フランクリン"} }; ); i++) ddlquotes.Items.Add(new ListItem(quotes[i,0], quotes[i,1])); ddlquotes_SelectedIndexChanged(object sender, EventArgs e) { if (ddlquotes.SelectedIndex != -1) { lblquotes.Text = String.Format("{0}, Quote: {1}", ddlquotes.SelectedItem.Text, ddlquotes.SelectedValue) ; } }}
ページレベルのトレースを許可するには、次のように Page ディレクティブを変更し、Trace 属性を追加する必要があります。
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="errorhandling._Default" Trace ="true" %>
ファイルを実行すると、トレース情報が取得されます。
ヘッダーには次の情報が含まれます。
セッションID
ステータスコード
リクエストの時間
リクエストの種類
リクエストとレスポンスのエンコーディング
ページが要求されるたびに、サーバーから送信されるステータス コードには、名前とエラー時刻 (存在する場合) が表示されます。次の表に、一般的な HTTP ステータス コードを示します。
番号 | 説明する |
---|---|
通知(100~199) | |
100 | 続く |
101 | 転換契約 |
成功(200 - 299) | |
200 | わかりました |
204 | コンテンツなし |
リダイレクト (300 - 399) | |
301 | 永久に移動する |
305 | プロキシを使用する |
307 | 一時的なリダイレクト |
クライアントからのエラー (400 ~ 499) | |
400 | 要求の形式が正しくありません |
402 | 支払い要件 |
404 | 見つかりません |
408 | リクエストタイムアウト |
417 | 失敗することを期待する |
サーバーからのエラー (500 - 599) | |
500 | 内部サーバーエラー |
503 | サービスは利用できません |
505 | HTTP バージョンはサポートされていません |
最上位の情報の下には、ページのライフサイクルの詳細を提供するトレース ログがあります。ページが初期化されてからの経過時間を秒単位で示します。
次のセクションはコントロール ツリーで、ページ上のすべてのコントロールが階層形式でリストされます。
セッションとアプリケーションの最後の宣言は、サマリー、Cookie、およびヘッダーのコレクションであり、その後にすべてのサーバー変数が続きます。
トレース オブジェクトを使用すると、トレース出力にカスタム情報を追加できます。これを完了するには、Write メソッドと Warn メソッドの 2 つのメソッドがあります。
Write メソッドを検出するように Page_Load イベント ハンドラーを変更します。
protected void Page_Load(object sender, EventArgs e){ Trace.Write("Page Load"); if (!IsPostBack) { Trace.Write("Not Post Back, Page Load"); string[,] quotes = ... ...... }}
実行して影響を確認します。
Warn メソッドを検出するには、選択したインデックス変更イベント ハンドラーにエラー コードを強制的に挿入しましょう。
try{ int a = 0; int b = 9 / a;}catch (Exception e){ Trace.Warn("UserAction", "処理中 9/a", e);}
Try-Catch は C# プログラミング構造です。 try ブロックは、エラーを生成するかどうかのコードを保持し、catch ブロックはエラーをキャプチャします。プログラムが実行されると、トレース ログに警告が送信されます。
アプリケーションレベルの追跡は、Web サイト内のすべてのページに適用されます。これは、次のコードを web.config ファイルに配置することで実装されます。
<system.web> <trace Enabled="true" /></system.web>
ASP.NET はすべての実行時エラーを検出しますが、小さなエラーがまだいくつか存在します。トレースによるエラーの観察は、ユーザーではなく開発者が行うものです。
したがって、これが起こらないようにするために、アプリケーションの web.config にエラー解決設定を追加できます。これはアプリケーション全体のエラー解決です。たとえば、次のコードを web.config ファイルに追加できます。
<configuration> <system.web> <customErrors mode="RemoteOnly"defaultRedirect="GenericErrorPage.htm"> <error statusCode="403" redirect="NoAccess.htm" /> <error statusCode="404" redirect="FileNotFound .htm" /> </customErrors> </system.web><構成>
可能な属性の一部: - **モード:** カスタム エラー ページを許可または禁止します。可能な値は 3 つあります。 - **オン:** カスタム ページを表示します。 - **オフ:** ASP.NET エラー ページ (イエロー ページ) を表示します。 - **remoteOnly:** カスタム エラーをクライアントに表示し、ローカル ASP.NET エラーを表示します。 - **defaultRedirect:** 未解決のエラーが発生した場合に表示するページの URL が含まれます。 異なるエラー タイプに異なるカスタム エラー ページを配置するには、サブタグが使用されます。サブタグでは、エラーのステータス コードに基づいて異なるエラー ページが指定されます。 ページレベルのエラー解決を実現するには、Page ディレクティブを次のように変更できます。 `````` ASP.NET デバッグは重要なトピックであるため、次の章で個別に説明します。