熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

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

2013-11-13 09:47:18  來源: .NET編程 

  以前使用ASP開發過Web應用程序的人員肯定知道調試Web應用程序是多麼麻煩在ASP中調試是痛苦的通常包括了使用ResponseWrite()方法輸出變量的值那麼請問一下自己你有多少次忘記了在布署應用程序之前刪除了調試語句?
  
  隨著NET框架組件的出現這種情況發生了徹底的改變NET中你可以使用Visual Studio NET中的調試程序跟蹤整個Web應用程序的執行或者使用SystemWebTraceContext名字空間中的Trace類本文演示如何使用Trace類輔助你的調試工作
  使用Trace類
  ASPNET中包含了一個幫助跟蹤應用程序信息流的Trace類作為使用Response對象進行調試的代替你現在可以使用Trace類打印出調試信息了
  
  為了演示它的使用我們首先建立一個ASPNET Web應用程序並在默認的WebForm上放置一個Button和一個ListBox控件(如圖所示)用三個項填充ListBox控件並把它的AutoPostBack屬性設置為True
  
 

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

  
激活跟蹤

  
  下一步我在Form的load事件中插入Trace語句這樣我就知道是否發生了PostbackPostBack事件是ASPNET中的最容易混亂的一個特性它經常導致初用ASPNET的開發者的失敗
  
  Private Sub Page_Load(ByVal sender As SystemObject _
  ByVal e As SystemEventArgs) _
  Handles MyBaseLoad
  此處放置初始化頁面的用戶代碼
  TraceWrite(Page loaded)
  If Not IsPostBack Then
  TraceWrite(Not in a postback)
   postback發生的時候執行一些操作
  Else
  TraceWrite(In a postback)
   執行一些操作
  End If
  End Sub
  
  我同樣想知道當ListBox數據項被選擇的時候是否發生了postback
  
  Private Sub ListBox_SelectedIndexChanged(ByVal sender As _
  SystemObject _
  ByVal e As SystemEventArgs) Handles _
  ListBoxSelectedIndexChanged
  TraceWrite(Listbox postback)
  End Sub
  
  當上面的ASPNET應用程序執行時將顯示下面的輸出結果(圖所示)
  
 

  
顯示跟蹤信息

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

  
檢查跟蹤信息

  
  跟蹤頁面包含下面的部分(圖中沒有顯示所有的信息)
  
 

  注意我們的跟蹤信息顯示在跟蹤信息段的下面如果要關閉跟蹤只需要簡單地把頁面指令中Trace的屬性設置為False沒有必要刪除應用程序中的跟蹤指令現在關閉調試僅僅是設置一個布爾值這麼簡單了
  
  打開/關閉跟蹤只是簡單地修改頁面指令中的Trace屬性的值你也可以使用Trace類編程關閉跟蹤Trace類的成員如下
  
 

  要編程關閉跟蹤可以在WebForm的load事件中使用下面的語句
  
  TraceIsEnabled = false
  
  在我們的例子中跟蹤信息沒有很顯目的顯示因此它被其它的跟蹤信息掩埋了Trace類的Warn()方法可以把跟蹤信息打印為紅色因此不是這樣編寫代碼
  
  TraceWrite(Page loaded)
  
  而是
  
  TraceWarn(Page loaded)
  
  圖顯示了Warn()方法用紅色顯示的調試信息
  
 

  
使用Warn()方法用紅色顯示跟蹤信息

  
  對跟蹤信息排序
  把多個跟蹤語句放在一個應用程序中有時會顯得雜亂如果你的跟蹤信息可以被分為不同的類別那麼跟蹤就更容易了Trace類允許我們基於種類對跟蹤信息進行分類和排序
  
  下面的例子演示了如何對跟蹤信息按類別進行分組
  
  Private Sub Page_Load(ByVal sender As SystemObject _
  ByVal e As SystemEventArgs) _
  Handles MyBaseLoad
  TraceTraceMode = TraceModeSortByCategory
  此處放置初始化頁面的用戶代碼
  TraceWarn(Page_Load Page loaded)
  If Not IsPostBack Then
   執行一些操作
  TraceWarn(Page_Load Not in a postback)
  Else
  TraceWarn(Page_Load In a postback)
  End If
  End Sub
  
  Private Sub ListBox_SelectedIndexChanged(ByVal sender _
  As SystemObject ByVal e As _
  SystemEventArgs) Handles _
  ListBoxSelectedIndexChanged
  TraceWarn(ListBox Listbox postback)
  End Sub
  
  執行這個例子的時候將顯示下面的調試信息它根據類別分組了(圖所示)
  
 

  
按類別排序

  
  讓我們分析上面的代碼
  
  TraceTraceMode = TraceModeSortByCategory
  
  TraceMode屬性設置了跟蹤支持的模式
  
  SortByCategory根據類型對跟蹤信息排序
  
  SortByTime 根據執行次序對跟蹤信息進行顯示
  
  因為我們選擇了根據類別排序模式因此圖顯示了信息按類別排序了
  
  TraceWarn(Page_Load Page loaded)
  
  Warn屬性把消息顯示為紅色注意這是個重載的方法在例子中我們給它傳遞了兩個參數第一個輸入類別(Category)第二個參數是為取得消息(Message)的
  
  除了使用Trace類設置跟蹤模式之外你還可以使用頁面指令指定跟蹤模式
  
  <%@ Page Language=vb Trace=true TraceMode=SortByCategory AutoEventWireup=false Codebehind=WebFormaspxvb Inherits=WebApplicationWebForm %>
  
  應用程序跟蹤
  最後一部分討論了頁面追蹤它追蹤頁面內的執行信息流ASPNET同時支持應用程序級的追蹤應用程序級的追蹤在nfig文件中設置在trace段下面
  
  <trace enabled=false requestLimit= pageOutput=false traceMode=SortByTime localOnly=true />
  
  為了激活應用程序級追蹤設置下面的值
  
 

  當應用程序被載入後追蹤信息沒有顯示在頁面上為了查看追蹤信息我們需要使用追蹤查看器(traceaxd)
  

  
應用程序級的追蹤

  
  圖顯示了應用程序的最後的六個請求的追蹤信息如果要查看每個請求的細節信息點擊每一行的View Details鏈接
  
  注意如果在nfig文件中trace被設置為true並且在頁面指令中它被設置為false追蹤將被禁止
  
  總結
  ASPNET使調試Web應用程序容易多了現在你已經知道了如何使用追蹤試用一下看看它把你的效率提高了多少!
From:http://tw.wingwit.com/Article/program/net/201311/11590.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.