ASP.NET에는 예외 처리의 세 가지 측면이 있습니다.
추적 - 페이지 수준 또는 애플리케이션 수준에서 프로그램 실행을 추적합니다.
오류 처리 - 페이지 또는 애플리케이션 수준에서 표준 또는 사용자 정의 오류를 처리합니다.
디버깅 - 프로그램을 진행하고 중단점을 설정하여 코드를 분석합니다.
이 장에서는 추적 및 처리에 대해 설명합니다. 그리고 이번 장에서는 디버깅에 대해 다룰 것입니다.
개념을 이해하려면 다음 샘플 애플리케이션을 만드세요. 여기에는 레이블 컨트롤, 드롭다운 목록 및 링크가 있습니다. 드롭다운 목록에 인용문 배열이 로드되고 선택한 인용문이 아래 라벨에 표시됩니다. 존재하지 않는 링크를 가리키는 하이퍼링크도 있습니다.
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="errorhandling._Default" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional// EN" "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:Label> <br /> <br /> <asp:HyperLink ID="HyperLink1" runat="서버" NavigateUrl="mylink.htm">링크:</asp:HyperLink> </div> </form> </body></html>
파일 이후의 코드:
public 부분 클래스 _Default : System.Web.UI.Page{ protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { string[,] quote = { {"지식보다 상상력이 더 중요합니다.", "Albert Einsten"}, {"당신에게 미덕이 없다면 가정하십시오" "Shakespeare"}, {"사람은 자신의 승인 없이는 편안할 수 없습니다", "Mark Twain"}, {"젊은 의사와 늙은 이발사를 조심하세요", "벤자민 프랭클린"}, {"분노로 시작된 일은 수치심으로 끝난다", "벤자민 프랭클린"} } for (int i=0; i<quotes.GetLength(0) ); i++) ddlquotes.Items.Add(new ListItem(quotes[i,0], quote[i,1])); ddlquotes_SelectedIndexChanged(개체 전송자, EventArgs e) { if (ddlquotes.SelectedIndex != -1) { lblquotes.Text = String.Format("{0}, 견적: {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 버전은 지원되지 않습니다. |
최상위 정보 아래에는 페이지 수명 주기에 대한 세부 정보를 제공하는 추적 로그가 있습니다. 페이지가 초기화된 이후 경과된 시간(초)을 제공합니다.
다음 섹션은 페이지의 모든 컨트롤을 계층적 형식으로 나열하는 컨트롤 트리입니다.
세션 및 애플리케이션의 마지막 선언은 요약, 쿠키 및 헤더 컬렉션과 모든 서버 변수입니다.
추적 개체를 사용하면 추적 출력에 사용자 지정 정보를 추가할 수 있습니다. 완료하는 방법에는 쓰기 방법과 경고 방법의 두 가지가 있습니다.
Page_Load 이벤트 핸들러를 변경하여 Write 메서드를 감지합니다.
protected void Page_Load(개체 보낸 사람, EventArgs e){ Trace.Write("페이지 로드"); if (!IsPostBack) { Trace.Write("뒤에 게시하지 않음, 페이지 로드") string[,] quote = ... ............. }}
효과를 확인하려면 다음을 실행하세요.
Warn 메서드를 검색하려면 선택한 인덱스 변경 이벤트 핸들러에 일부 오류 코드를 강제 적용해 보겠습니다.
try{ int a = 0; int b = 9 / a;}catch(예외 e){ Trace.Warn("UserAction", "9/a 처리 중", e);}
Try-Catch는 C# 프로그래밍 구문입니다. try 블록은 오류를 생성하거나 생성하지 않을 수 있는 모든 코드를 보유하고 있으며 catch 블록은 오류를 캡처합니다. 프로그램이 실행되면 추적 로그에 경고가 전송됩니다.
애플리케이션 수준 추적은 웹사이트의 모든 페이지에 적용됩니다. 이는 web.config 파일에 다음 코드를 배치하여 구현됩니다.
<system.web> <trace 활성화="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><구성>
가능한 속성 중 일부는 다음과 같습니다. - **모드:** 사용자 정의 오류 페이지를 허용하거나 허용하지 않습니다. 가능한 값은 세 가지입니다. - **켜짐:** 사용자 정의 페이지를 표시합니다. - **끄기:** ASP.NET 오류 페이지(노란색 페이지)를 표시합니다. - **remoteOnly:** 로컬 ASP.NET 오류를 표시하면서 클라이언트에 사용자 지정 오류를 표시합니다. - **defaultRedirect:** 해결되지 않은 오류가 발생한 경우 표시할 페이지의 URL이 포함되어 있습니다. 다양한 오류 유형에 대해 다양한 사용자 정의 오류 페이지를 배치하기 위해 오류의 상태 코드에 따라 다양한 오류 페이지가 지정되는 하위 태그가 사용됩니다. 페이지 수준 오류 해결을 달성하기 위해 Page 지시문을 다음과 같이 수정할 수 있습니다. ```` ASP.NET 디버깅은 페이지 내에서 중요한 주제이므로 다음 장에서 별도로 논의하겠습니다.