您目前已離線,請等候您的網際網路重新連線

如何將追蹤和偵錯 Visual Basic 或 Visual Basic 2005年中。NET

重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。

313417
這為 Microsoft Visual Basic 6.0 版主文件編號,請參閱 161153.
結論
本文將示範如何使用偵錯追蹤的類別。這些類別可用於 Microsoft。NET架構。您可以使用這些類別來提供相關資訊在應用程式開發期間或之後的應用程式的效能部署到實際執行環境。這些類別都只有一個部分集中所提供的檢測功能。NET架構。

需求

以下概括列出建議的硬體的軟體,網路基礎結構和您所需要的 service pack:
  • Microsoft Windows 2000 或 Microsoft Windows XP
  • Microsoft Visual Basic 2005年或 Microsoft Visual Basic。NET
本文也假設您已熟悉的程式偵錯。

技術說明

「 建立和偵錯類別的範例 」 一節的步驟將示範如何建立主控台使用Debug類別,以提供程式的相關資訊的應用程式執行。

當程式執行時,您可以使用偵錯類別的方法來產生訊息以協助監視,以偵測發生故障,或提供效能度量資訊。根據預設,Debug類別產生的訊息會出現在 [輸出] 視窗的 Microsoft Visual Studio整合式的開發環境 (IDE)。

程式碼範例會使用WriteLine方法來產生一則訊息,後面跟著一條線終止符號。當您使用這個方法產生的訊息時,就會出現每個訊息在 [輸出] 視窗中不同的行。

如果您使用Debug類別的Assert方法時,[輸出] 視窗會顯示訊息時,才指定條件評估為 false。訊息也會出現在 [到強制回應對話方塊目前的使用者。此對話方塊包含郵件、 專案名稱,以及Debug.Assert陳述式數目。此對話方塊也包含三個命令按鈕:
  • 中止: 執行的應用程式停駐點。
  • 再試一次: 應用程式進入偵錯模式。
  • 略過: 應用程式繼續執行。
使用者必須按下其中一個應用程式版本按鈕可以繼續。

您也可以直接從Debug類別的輸出到 [輸出] 視窗以外的目的地。Debug類別具有名為接聽程式都包含接聽程式的物件集合。每個接聽項物件會監視偵錯輸出,並將輸出導向至指定的目標。Listeners集合中每個接聽程式接收Debug類別會產生任何輸出。使用TextWriterTraceListener類別定義接聽項物件。您可以指定TextWriterTraceListener類別透過其建構函式的目標。一些可能的輸出目標包括:
  • 使用System.Console.Out屬性的 [主控台] 視窗。
  • 使用System.IO.File.CreateText("FileName.txt"))陳述式文字 (.txt) 檔案。
在建立TextWriterTraceListener物件之後,您必須將物件加入Debug.Listeners集合,以接收偵錯輸出。

建立和偵錯類別的範例

  1. 使用 Visual Basic 2005年或 Visual Basic。NET 建立新的主控台應用程式專案,名為 conInfo。公用模組命名為 「 module1 」 會加入至的專案預設值。
  2. 若要將變數初始化以包含下列資訊產品,加入下列的Dim陳述式:
    Dim sProdName As String = "Widget"Dim iUnitQty As Integer = 100Dim dUnitCost As Decimal = 1.03					
  3. 與第一個指定的類別產生的訊息輸入的WriteLine方法的參數。按 CTRL + ALT + O 按鍵組合,以確保輸出] 視窗是可見的。
    Debug.WriteLine("Debug Information-Product Starting ")					
  4. 為了方便讀者閱讀,使用的縮排的方法來縮排在 [輸出] 視窗中接下來的訊息:
    Debug.Indent()					
  5. 若要顯示選取變數的內容,請使用WriteLine方法,如下所示:
    Debug.WriteLine("The product name is " & sProdName)Debug.WriteLine("The available units on hand are " & iUnitQty)Debug.WriteLine("The per unit cost is " & dUnitCost)					
  6. 您也可以使用WriteLine方法,若要顯示的命名空間和類別名稱存在的物件。比方說,下列程式碼會在 [輸出] 視窗中顯示System.Xml.XmlDocument命名空間:
    Dim oxml As New System.Xml.XmlDocument()Debug.WriteLine(oxml)					
  7. 若要組織輸出,您可以包含類別,以作為選用項目,第二個輸入的參數WriteLine方法。如果您指定某個類別,輸出格式視窗的訊息是"類別: 訊息。"比方說,第一行下列程式碼會顯示"欄位: 產品名稱是 Widget 」 在輸出中視窗:
    Debug.WriteLine("The product name is " & sProdName, "Field")Debug.WriteLine("The units on hand are " & iUnitQty, "Field")Debug.WriteLine("The per unit cost is " & dUnitCost, "Field")Debug.WriteLine("Total Cost is" & iUnitQty * dUnitCost, "Calc")					
  8. [輸出] 視窗可以顯示的訊息時,才指定使用WriteLineIf方法, Debug類別的評估條件為 true。要評估的條件是第一個輸入的參數WriteLineIf方法中。WriteLineIf的第二個參數是訊息才會出現在第一個條件參數會評估為 true。
    Debug.WriteLineIf(iUnitQty > 50, "This message WILL appear")Debug.WriteLineIf(iUnitQty < 50, "This message will NOT appear")					
  9. 使用Debug類別的Assert方法,讓 [輸出] 視窗會顯示訊息唯若指定的條件評估為 false:
    Debug.Assert(dUnitCost > 1, "Message will NOT appear")Debug.Assert(dUnitCost < 1, "Message will appear")					
  10. 建立主控台視窗 (tr1),名為文字檔的TextWriterTraceListener物件Output.txt (tr2),然後在偵錯接聽程式集合中新增的每個物件:
    Dim tr1 As New TextWriterTraceListener(System.Console.Out)Debug.Listeners.Add(tr1)        Dim tr2 As New _  TextWriterTraceListener(System.IO.File.CreateText("Output.txt"))Debug.Listeners.Add(tr2)					
  11. 為了方便讀者閱讀,請使用取消縮排方法來後續郵件移除縮排偵錯類別會產生。當您使用的縮排取消縮排方法在一起時,讀者就可以區分輸出為群組。
    Debug.Unindent()Debug.WriteLine("Debug Information-Product Ending")					
  12. 若要確保每個接聽項物件會接收所有的範例的輸出結果,請呼叫偵錯類別緩衝區排清的方法:
    Debug.Flush()					

使用 Trace 類別

您也可以使用Trace類別產生監視執行中的訊息應用程式。追蹤偵錯類別幾乎相同的方法,以產生輸出,其中包括:
  • WriteLine
  • WriteLineIf
  • 縮排
  • 不縮排
  • 判斷提示
  • 排清
您可以使用追蹤偵錯類別分別或共同在同一個應用程式中。在偵錯的方案組態的專案中,在使用中的追蹤偵錯輸出。這兩個專案會產生的輸出這些所有的接聽程式物件的類別。不過,發行版本的方案組態只專案從Trace類別,會產生輸出。發行方案組態的專案會忽略任何偵錯的類別方法引動過程。
Trace.WriteLine("Trace Information-Product Starting ")Trace.Indent()Trace.WriteLine("The product name is " & sProdName)Trace.WriteLine("The product name is " & sProdName, "Field")Trace.WriteLineIf(iUnitQty > 50, "This message WILL appear")Trace.Assert(dUnitCost > 1, "Message will NOT appear")Trace.Unindent()Trace.WriteLine("Trace Information-Product Ending")Trace.Flush()Console.ReadLine()				

驗證能否運作

  1. 請確定偵錯目前的方案組態。
  2. 如果看不到 [方案總管] 視窗,請按CTRL + ALT + L 組合鍵來顯示此視窗。
  3. ConInfo,以滑鼠右鍵按一下,再按 [內容
  4. 在左窗格的 [conInfo] 屬性頁中,在組態] 資料夾中,請確認箭頭是指向偵錯
  5. 上方 [組態] 資料夾中,在 [組態] 下拉式清單方塊中,按一下 [現用 (偵錯) ] 或 [偵錯,,然後按一下[確定]
  6. 請按 CTRL + ALT + O 以顯示 [輸出] 視窗。
  7. 按 F5 鍵執行任何程式碼。判斷提示已失敗] 對話方塊出現時,請按一下 [忽略]。
  8. 在 [主控台] 視窗中,按 ENTER 鍵。程式應該完成時間和 [輸出] 視窗應該會顯示下列輸出:
    Debug Information-Product Starting     The product name is Widget    The available units on hand are 100    The per unit cost is 1.03    System.Xml.XmlDocument    Field: The product name is Widget    Field: The units on hand are 100    Field: The per unit cost is 1.03    Calc: Total cost is 103    This message WILL appear    ---- DEBUG ASSERTION FAILED -------- Assert Short Message ----Message will appear---- Assert Long Message ----    at Module1.Main()  C:\Documents and Settings\Administrator\My     Documents\Visual Studio Projects\conInfo\Module1.vb(29)    The product name is Widget    The available units on hand are 100    The per unit cost is 1.03Debug Information-Product EndingTrace Information-Product Starting     The product name is Widget    Field: The product name is Widget    This message WILL appearTrace Information-Product Ending						
  9. 應該會顯示主控台視窗和 Output.txt 檔案下列輸出:
    (The Output.txt file is located in the same directory as the conInfo executable, conInfo.exe. Normally this is the \bin folder of where the project source has been stored. By default that would be C:\Documents and Settings\User login\My Documents\Visual Studio Projects\conInfo\bin)    The product name is Widget    The available units on hand are 100    The per unit cost is 1.03Debug Information-Product EndingTrace Information-Product Starting     The product name is Widget    Field: The product name is Widget    This message WILL appearTrace Information-Product Ending						

完整程式碼清單

Module Module1    Sub Main()        Dim sProdName As String = "Widget"        Dim iUnitQty As Integer = 100        Dim dUnitCost As Decimal = 1.03        Debug.WriteLine("Debug Information-Product Starting ")        Debug.Indent()        Debug.WriteLine("The product name is " & sProdName)        Debug.WriteLine("The available units on hand are " & iUnitQty)        Debug.WriteLine("The per unit cost is " & dUnitCost)        Dim oxml As New System.Xml.XmlDocument()        Debug.WriteLine(oxml)        Debug.WriteLine("The product name is " & sProdName, "Field")        Debug.WriteLine("The units on hand are " & iUnitQty, "Field")        Debug.WriteLine("The per unit cost is " & dUnitCost, "Field")        Debug.WriteLine("Total cost is " & iUnitQty * dUnitCost, "Calc")        Debug.WriteLineIf(iUnitQty > 50, "This message WILL appear")        Debug.WriteLineIf(iUnitQty < 50, "This message will NOT appear")        Debug.Assert(dUnitCost > 1, "Message will NOT appear")        Debug.Assert(dUnitCost < 1, "Message will appear")        Dim tr1 As New TextWriterTraceListener(System.Console.Out)        Debug.Listeners.Add(tr1)        Dim tr2 As New _          TextWriterTraceListener(System.IO.File.CreateText("Output.txt"))                Debug.Listeners.Add(tr2)        Debug.WriteLine("The product name is " & sProdName)        Debug.WriteLine("The available units on hand are " & iUnitQty)        Debug.WriteLine("The per unit cost is " & dUnitCost)        Debug.Unindent()        Debug.WriteLine("Debug Information-Product Ending")        Debug.Flush()        Trace.WriteLine("Trace Information-Product Starting ")        Trace.Indent()        Trace.WriteLine("The product name is " & sProdName)        Trace.WriteLine("The product name is " & sProdName, "Field")        Trace.WriteLineIf(iUnitQty > 50, "This message WILL appear")        Trace.Assert(dUnitCost > 1, "Message will NOT appear")        Trace.Unindent()        Trace.WriteLine("Trace Information-Product Ending")        Trace.Flush()        Console.ReadLine()    End SubEnd Module				

疑難排解

  • 發行方案的組態型別時,偵錯類別輸出會被忽略。
  • 您建立針對特定目標的TextWriterTraceListener類別之後, TextWriterTraceListener接收輸出的追蹤偵錯類別。不論您使用追蹤偵錯類別的Add方法加入接聽程式類別的TextWriterTraceListener ,這就會發生。
  • 如果在追蹤偵錯類別加入接聽項物件的同一個目標,被重複的輸出的每一行,無論是否偵錯追蹤會產生輸出。
    Dim tr1 As New TextWriterTraceListener(System.Console.Out)Debug.Listeners.Add(tr1)Dim tr2 As New TextWriterTraceListener(System.Console.Out)Trace.Listeners.Add(tr2)					

警告:本文已自動翻譯

內容

文章識別碼:313417 - 最後檢閱時間:05/07/2012 18:13:00 - 修訂: 1.0

  • Microsoft Visual Basic 2005
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • kbvs2005swept kbvs2005applies kbvs2002sp1sweep kbbug kbdebug kbhowtomaster kbmt KB313417 KbMtzh
意見反應