調試ASP.NET應用程式的方法和技巧

來源:互聯網
上載者:User

以前使用ASP開發過Web應用程式的人員肯定知道調試Web應用程式是多麼麻煩。在ASP中,調試是痛苦的,通常包括了使用Response.Write()方法輸出變數的值。那麼請問一下自己:你有多少次忘記了在布署應用程式之前刪除了調試語句?

  隨著.NET架構組件的出現這種情況發生了徹底的改變。在.NET中,你可以使用Visual Studio .NET中的偵錯工具跟蹤整個Web應用程式的執行,或者使用System.Web.TraceContext名字空間中的Trace類。本文示範如何使用Trace類輔助你的調試工作。

  使用Trace類

  ASP.NET中包含了一個協助跟蹤應用程式資訊流的Trace類。作為使用Response對象進行調試的代替,你現在可以使用Trace類列印出調試資訊了。

  為了示範它的使用,我們首先建立一個ASP.NET Web應用程式,並在預設的WebForm1上放置一個Button和一個ListBox控制項(1所示)。用三個項填充ListBox控制項並把它的AutoPostBack屬性設定為True。

圖1.填充預設的WebForm1

  對於本文,我希望跟蹤應用程式的執行流。首先,啟用跟蹤,頁面指令要求含有Trace屬性,它的值設定為True(切換到查看HTML源模式),2所示。


圖2.啟用跟蹤

  下一步,我在Form的load事件中插入Trace語句,這樣我就知道是否發生了Postback。PostBack事件是ASP.NET中的最容易混亂的一個特性,它經常導致初用ASP.NET的開發人員的失敗。

Private Sub Page_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles MyBase.Load
 '此處放置初始化頁面的使用者代碼
 Trace.Write("Page loaded")
 If Not IsPostBack Then
  Trace.Write("Not in a postback")
  ' postback發生的時候執行一些操作
 Else
  Trace.Write("In a postback")
  ' 執行一些操作
 End If
End Sub

  我同樣想知道當ListBox資料項目被選擇的時候是否發生了postback:

Private Sub ListBox1_SelectedIndexChanged(ByVal sender As _
System.Object, _
ByVal e As System.EventArgs) Handles _
 ListBox1.SelectedIndexChanged
 Trace.Write("Listbox postback")
End Sub

  當上面的ASP.NET應用程式執行時,將顯示下面的輸出結果(圖3所示):


圖3.顯示跟蹤資訊

  你可以發現,當第一次載入WebForm1的時候,你可以看到字串"Page loaded"和"Not in a postback"。如果你點擊WebForm1上的按鈕,你可以看到圖4所示的記錄。與此類似,如果點擊了ListBox,也會顯示"Listbox postback"字串。


圖4.檢查跟蹤資訊

  跟蹤頁麵包含下面的部分(圖3中沒有顯示所有的資訊):

描述
請求細節 描述與請求相關的資訊,例如對話ID、編碼和請求的時間。
跟蹤資訊 包含當前啟動並執行應用程式的詳細資料。跟蹤資訊顯示在這個部分中。
控制項樹 顯示某個頁面中控制項的資訊和Viewstate 隱藏欄位的大小。
Cookie集合 顯示頁面和它的值設定的cookie。
頭集合 顯示HTTP頭資訊,例如內容長度和使用者代理程式。
表單集合 顯示某個頁面中控制項的名稱和它們的值。
伺服器變數 顯示伺服器端的環境變數。

  注意,我們的跟蹤資訊顯示在"跟蹤資訊段"的下面。如果要關閉跟蹤,只需要簡單地把頁面指令中Trace的屬性設定為False。沒有必要刪除應用程式中的跟蹤指令,現在關閉調試僅僅是設定一個布爾值這麼簡單了。

  開啟/關閉跟蹤只是簡單地修改頁面指令中的Trace屬性的值。你也可以使用Trace類編程關閉跟蹤。Trace類的成員如下:

屬性 描述
IsEnabled 表明是否啟用對當前請求的跟蹤。
TraceMode 設定跟蹤模式:sortByCategory或sortByTime。

方法 描述
Warn 把跟蹤資訊顯示為紅色。
Write 寫跟蹤資訊。

  要編程關閉跟蹤,可以在WebForm1的load事件中使用下面的語句:

Trace.IsEnabled = false

  在我們的例子中,跟蹤資訊沒有很顯目的顯示,因此它被其它的跟蹤資訊掩埋了。Trace類的Warn()方法可以把跟蹤資訊列印為紅色。因此不是這樣編寫代碼:

Trace.Write("Page loaded")

  而是:

Trace.Warn("Page loaded")

  圖5顯示了Warn()方法用紅色顯示的調試資訊。


圖5.使用Warn()方法用紅色顯示跟蹤資訊

  對跟蹤資訊排序

  把多個跟蹤語句放在一個應用程式中有時會顯得雜亂。如果你的跟蹤資訊可以被分為不同的類別,那麼跟蹤就更容易了。Trace類允許我們基於種類對跟蹤資訊進行分類和排序。

  下面的例子示範了如何對跟蹤資訊按類別進行分組:

Private Sub Page_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles MyBase.Load
 Trace.TraceMode = TraceMode.SortByCategory
 '此處放置初始化頁面的使用者代碼
 Trace.Warn("Page_Load", "Page loaded")
 If Not IsPostBack Then
  ' 執行一些操作
  Trace.Warn("Page_Load", "Not in a postback")
 Else
  Trace.Warn("Page_Load", "In a postback")
 End If
End Sub

Private Sub ListBox1_SelectedIndexChanged(ByVal sender _
As System.Object, ByVal e As _
System.EventArgs) Handles _
 ListBox1.SelectedIndexChanged
 Trace.Warn("ListBox", "Listbox postback")
End Sub

  執行這個例子的時候,將顯示下面的調試資訊,它根據類別分組了(圖6所示):


圖6.按類別排序

  讓我們分析上面的代碼:

Trace.TraceMode = TraceMode.SortByCategory

  TraceMode屬性設定了跟蹤支援的模式:

  · SortByCategory:根據類型對跟蹤資訊排序 。

  · SortByTime: 根據執行次序對跟蹤資訊進行顯示。

  因為我們選擇了根據類別排序模式,因此圖7顯示了資訊按類別排序了。

Trace.Warn("Page_Load", "Page loaded")

  Warn屬性把訊息顯示為紅色,注意這是個重載的方法。在例子中,我們給它傳遞了兩個參數。第一個輸入類別(Category),第二個參數是為取得訊息(Message)的。

  除了使用Trace類設定跟蹤模式之外,你還可以使用頁面指令指定跟蹤模式:

<%@ Page Language="vb" Trace="true" TraceMode="SortByCategory" AutoEventWireup="false" Codebehind="WebForm1.aspx.vb" Inherits="WebApplication1.WebForm1" %>

  應用程式跟蹤

  最後一部分討論了頁面追蹤,它追蹤頁面內的執行資訊流。ASP.NET同時支援應用程式級的追蹤,應用程式級的追蹤在web.config檔案中設定,在trace段下面:

  為了啟用應用程式級追蹤,設定下面的值:

屬性 描述
Enabled True 啟用或禁止應用程式級追蹤。
requestLimit 10 設定追蹤的請求的最大數量。
pageOutput False 在頁面的末尾顯示追蹤資訊。
traceMode sortByTime 追蹤資訊排序方式。
localOnly True 設定在非本機電腦上查看追蹤瀏覽器的能力。

  當應用程式被載入後,追蹤資訊沒有顯示在頁面上。為了查看追蹤資訊,我們需要使用追蹤查看器(trace.axd):


圖7.應用程式級的追蹤

  圖7顯示了應用程式的最後的六個請求的追蹤資訊。如果要查看每個請求的細節資訊,點擊每一行的"View Details"連結。

  注意,如果在web.config檔案中trace被設定為true,並且在頁面指令中它被設定為false,追蹤將被禁止。

  總結

  ASP.NET使調試Web應用程式容易多了。現在你已經知道了如何使用追蹤,試用一下,看看它把你的效率提高了多少!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.