2012年10月17日 星期三

Debugging 網站

Configuring ASP.NET for Debugging

To configure ASP.NET for debugging, there are two areas where you set this information: the project's property page and the Web.config file.

1. Activate the ASP.NET Debugger

The first step is to enable the ASP.NET debugger in your project's Property Pages dialog box.

2. Configure Debugging

The second step is to enable debugging either for your entire site or on a page-by-page basis.

for entire site

<configuration>
  <system.web>
    <compilation debug="true">
    </compilation>
  <system.web>
</configuration>

for page-level debugging

<%@ Page Debug="true" ... %>

Defining Custom Errors

Configuring a Custom Site-Level Error Page

在 web.config 指定錯誤頁的網址。例如:

<customErrors mode="On" defaultRedirect="~/ErrPage.aspx" />

底下是相關屬性說明:

  • defaultRedirect :指定發生錯誤時,要將瀏覽器導向至的預設 URL。
  • mode :顯示錯誤訊息的模式
    • On :啟用自訂錯誤。如此 ASP.NET 的標準詳細錯誤就不會顯示。
    • Off:停用自訂錯誤。如此 ASP.NET 的標準詳細錯誤可在用戶端和本機端顯示。
    • RemoteOnly:(預設值)。如此 ASP.NET 的標準詳細錯誤僅會在本機端顯示,用戶端顯示自訂錯誤。

當導向發生時,伺服器會將錯誤頁的網址透過 QueryString 以 aspxErrorPath 名稱傳遞給指定的 Error Page 。如下所示:

http://localhost/examples/SiteErrorPage.aspx?aspxerrorpath=/examples/Default.aspx

Configuring Error-Specific Error Pages

針對不同的狀態碼(status code)也可以定義不同的錯誤頁。例如:

<configuration>
 <system.web>
  <customErrors defaultRedirect="SiteErrorPage.aspx" mode="RemoteOnly">
   <error statusCode="403" redirect="RestrictedAccess.aspx" />
  </customErrors>
 <system.web>
</configuration>

Error Status Codes

關於錯誤的狀態碼,位在 4xx 和 5xx

Debugging Remotely

透過 Remote Debugging Monitor (Msvsmon.exe) 工具,可以進行遠端除錯,這個工具位在開發環境安裝目錄中,例如:Program Files\Microsoft Visual Studio 9.0\Common7\IDE\Remote Debugger\x64 。 會使用這個方法除錯,最常使用這個除錯技巧,大都是遇到 bug 只會發生在主機上,但又沒辨法在 Server 上安裝 VS.NET 時。 它主要原理是在 Server 上執行 Msvsmon.exe ,建立起一個除錯的橋樑。 然後再開啟本機上的 VisualStudio ,選擇「附加至處程序」功能,就可以透過這個橋樑進行遠端的偵錯。 如果偵錯的對象是 IIS, 那就點選「w3wp.exe」處理序,以進行 ASP.NET 網頁的遠端偵錯。

詳細做法可參考:

Debugging Client-Side Script

Visual Studio 也允許對 java-script 進行除錯,不過必須先停用以下功能,就可以一行一行的執行 java-script 程式嗎:

IE: 工具 → 網際網路選項 → 進階 → 瀏覽 → 停用指令碼除錯

Break When an Exception is Thrown

當指令碼發生錯誤時,如果你沒有處理例外狀況,這個例外狀況可能就無法被測得。 如下面範例,如果發生錯誤,你將無法欄截到。

protected void btnSQException_Click(object sender, EventArgs e)
    {
        try
        {
            SqlConnection conn = new SqlConnection(@"Data Source=.;Database=GUARANTEED_TO_FAIL");
            conn.Open();
        }
        catch (SqlException ex)
        {
                
        }
    }

所以,在 debug 時,你可以將 Visual Studio 的 debugger 設定成「若發生例外錯誤即中斷」。 也就是任何一行程式碼產生錯誤時,程式會立即中斷在該行程式碼。 這個設定是針對特定的例外類型做設定,你可以參考下列的設定步驟:

開啟 Exceptions Dialog Box

勾選必須中斷的錯誤類型

當發生錯誤時,程式立即停在錯誤的程式碼

沒有留言:

張貼留言