在 Visual C# .NET 中跟蹤和除錯
本文介紹如何使用 Debug 和 Trace 類。Microsoft .NET Framework 中提供了這兩個類。在應用程式開發期間或部署到產品後,可以使用這兩個類提供有關應用程式效能的資訊。這兩個類只是 .NET Framework 中所提供配置功能的一部分。
要求下面的列表概括了推薦的硬體、軟體、網路結構以及所需的 Service Pack:
• Microsoft Windows 2000 或 Microsoft Windows XP
• Microsoft Visual C# .NET
本文還假定您熟悉程式除錯。
方法說明
在使用 Debug 類建立一個示例一節中介紹的步驟演示瞭如何建立使用 Debug 類以提供有關程式執行資訊的控制檯應用程式。
當程式執行時,您可以使用 Debug 類的方法來生成訊息,以幫助您監視程式執行順序、檢測故障或提供效能度量資訊。預設情況下,Debug 類產生的訊息顯示在 Visual Studio 整合開發環境 (IDE) 的“輸出”視窗中。
該程式碼示例使用 WriteLine 方法生成後面帶有行結束符的訊息。當您使用此方法生成訊息時,每條訊息在“輸出”視窗中均顯示為單獨的一行。
如果使用 Debug 類的 Assert 方法,那麼只有在指定條件計算為 false 時,“輸出”視窗才顯示訊息。該訊息還在一個模式對話方塊中向使用者顯示。該對話方塊包括訊息、專案名和 Debug.Assert 語句編號。該對話方塊還包括下列三個命令按鈕:
• 終止:應用程式停止執行。
• 重試:應用程式進入除錯模式。
• 忽略:應用程式繼續。
使用者必須先單擊這些按鈕中的一個,然後應用程式才可以繼續。
您還可以指示從 Debug 類向“輸出”視窗以外的目標進行輸出。Debug 類有一個名為 Listeners 的集合,該集合包括一些 Listener 物件。
每個 Listener 物件都監視 Debug 輸出並使輸出指向指定的目標。
Listener 集合中的每個 Listener 都接收 Debug 類生成的任何輸出。請使用 TextWriterTraceListener 類定義 Listener 物件。可以通過 TextWriterTraceListener 類的建構函式為該類指定目標。
一些可能的輸出目標包括: • 使用 System.Console.Out 屬性指定“控制檯”視窗作為輸出目標。
• 使用 System.IO.File.CreateText("FileName.txt") 語句指定文字檔案 (.txt) 作為輸出目標。
建立 TextWriterTraceListener 物件後,必須將該物件新增到 Debug.Listeners 集合才可接收除錯輸出。
使用 Debug 類建立一個示例1. 啟動 Visual Studio .NET。
2. 新建一個名為 conInfo 的新 Visual C# .NET 控制檯應用程式專案。將建立 Class1。
3. 在 Class1 的頂部新增以下名稱空間。
using System.Diagnostics;
4. 要初始化變數以使其包含產品的相關資訊,請將下面的宣告語句新增到 Main 方法:
string sProdName = "Widget";
int iUnitQty = 100;
double dUnitCost = 1.03;
5. 將類生成的訊息指定為 WriteLine 方法的第一個輸入引數。按 CTRL+ALT+O 組合鍵以確保“輸出”視窗可見。
Debug.WriteLine("Debug Information-Product Starting ");
6. 為了清晰易讀,請使用 Indent 方法在“輸出”視窗中縮排後面的訊息:
Debug.Indent();
7. 要顯示所選變數的內容,請使用 WriteLine 方法,如下所示:
Debug.WriteLine("The product name is " + sProdName);
Debug.WriteLine("The available units on hand are" + iUnitQty.ToString());
Debug.WriteLine("The per unit cost is " + dUnitCost.ToString());
8. 您還可以使用 WriteLine 方法顯示現有物件的名稱空間和類名稱。例如,下面的程式碼在“輸出”視窗中顯示 System.Xml.XmlDocument 名稱空間:
System.Xml.XmlDocument xml = new System.Xml.XmlDocument();
Debug.WriteLine(oxml);
9. 要整理輸出,可以包括一個類別作為 WriteLine 方法的第二個可選的輸入引數。如果您指定一個類別,則“輸出”視窗訊息的格式為“類別:訊息”。例如,以下程式碼的第一行在“輸出”視窗中顯示“Field:The product name is 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.ToString(),"Field");
Debug.WriteLine("Total Cost is " + (iUnitQty * dUnitCost),"Calc");
10. 僅在使用 Debug 類的 WriteLineIf 方法將指定條件計算為 true 時,“輸出”視窗才可以顯示訊息。將要計算的條件是 WriteLineIf 方法的第一個輸入引數。WriteLineIf 的第二個引數是僅在第一個引數的條件計算為真時才顯示的訊息。
Debug.WriteLineIf(iUnitQty > 50, "This message WILL appear");
Debug.WriteLineIf(iUnitQty < 50, "This message will NOT appear");
11. 使用 Debug 類的 Assert 方法,使“輸出”視窗僅在指定條件計算為 false 時才顯示訊息:
Debug.Assert(dUnitCost > 1, "Message will NOT appear");
Debug.Assert(dUnitCost < 1, "Message will appear since dUnitcost < 1 is false");
12. 為“控制檯”視窗 (tr1) 和名為 Output.txt (tr2) 的文字檔案建立 TextWriterTraceListener 物件,然後將每個物件新增到 Debug Listeners 集合中:
TextWriterTraceListener tr1 = new TextWriterTraceListener(System.Console.Out);
Debug.Listeners.Add(tr1);
TextWriterTraceListener tr2 = new TextWriterTraceListener(System.IO.File.CreateText("Output.txt"));
Debug.Listeners.Add(tr2);
13. 為了清晰易讀,請使用 Unindent 方法去除 Debug 類為後續訊息生成的縮排。當您將 Indent 和 Unindent 兩種方法一起使用時,讀取器可以將輸出分成組。
Debug.Unindent();
Debug.WriteLine("Debug Information-Product Ending");
14. 為了確保每個 Listener 物件收到它的所有輸出,請為 Debug 類緩衝區呼叫 Flush 方法:
Debug.Flush();
使用 Trace 類 您還可以使用 Trace 類生成監視應用程式執行的訊息。Trace 和 Debug 類共享大多數相同的方法來生成輸出,這些方法包括: • WriteLine
• WriteLineIf
• Indent
• Unindent
• Assert
• Flush
您可以在同一應用程式中分別或同時使用 Trace 和 Debug 類。在一個“除錯解決方案配置”專案中,Trace 和 Debug 兩種輸出均為活動狀態。該專案從這兩個類為 Listener 物件生成輸出。但是,“釋出解決方案配置”專案僅從 Trace 類生成輸出。該“釋出解決方案配置”專案忽略任何 Debug 類方法呼叫。
要求下面的列表概括了推薦的硬體、軟體、網路結構以及所需的 Service Pack:
• Microsoft Windows 2000 或 Microsoft Windows XP
• Microsoft Visual C# .NET
本文還假定您熟悉程式除錯。
方法說明
在使用 Debug 類建立一個示例一節中介紹的步驟演示瞭如何建立使用 Debug 類以提供有關程式執行資訊的控制檯應用程式。
當程式執行時,您可以使用 Debug 類的方法來生成訊息,以幫助您監視程式執行順序、檢測故障或提供效能度量資訊。預設情況下,Debug 類產生的訊息顯示在 Visual Studio 整合開發環境 (IDE) 的“輸出”視窗中。
該程式碼示例使用 WriteLine 方法生成後面帶有行結束符的訊息。當您使用此方法生成訊息時,每條訊息在“輸出”視窗中均顯示為單獨的一行。
如果使用 Debug 類的 Assert 方法,那麼只有在指定條件計算為 false 時,“輸出”視窗才顯示訊息。該訊息還在一個模式對話方塊中向使用者顯示。該對話方塊包括訊息、專案名和 Debug.Assert 語句編號。該對話方塊還包括下列三個命令按鈕:
• 終止:應用程式停止執行。
• 重試:應用程式進入除錯模式。
• 忽略:應用程式繼續。
使用者必須先單擊這些按鈕中的一個,然後應用程式才可以繼續。
您還可以指示從 Debug 類向“輸出”視窗以外的目標進行輸出。Debug 類有一個名為 Listeners 的集合,該集合包括一些 Listener 物件。
每個 Listener 物件都監視 Debug 輸出並使輸出指向指定的目標。
Listener 集合中的每個 Listener 都接收 Debug 類生成的任何輸出。請使用 TextWriterTraceListener 類定義 Listener 物件。可以通過 TextWriterTraceListener 類的建構函式為該類指定目標。
一些可能的輸出目標包括: • 使用 System.Console.Out 屬性指定“控制檯”視窗作為輸出目標。
• 使用 System.IO.File.CreateText("FileName.txt") 語句指定文字檔案 (.txt) 作為輸出目標。
建立 TextWriterTraceListener 物件後,必須將該物件新增到 Debug.Listeners 集合才可接收除錯輸出。
使用 Debug 類建立一個示例1. 啟動 Visual Studio .NET。
2. 新建一個名為 conInfo 的新 Visual C# .NET 控制檯應用程式專案。將建立 Class1。
3. 在 Class1 的頂部新增以下名稱空間。
using System.Diagnostics;
4. 要初始化變數以使其包含產品的相關資訊,請將下面的宣告語句新增到 Main 方法:
string sProdName = "Widget";
int iUnitQty = 100;
double dUnitCost = 1.03;
5. 將類生成的訊息指定為 WriteLine 方法的第一個輸入引數。按 CTRL+ALT+O 組合鍵以確保“輸出”視窗可見。
Debug.WriteLine("Debug Information-Product Starting ");
6. 為了清晰易讀,請使用 Indent 方法在“輸出”視窗中縮排後面的訊息:
Debug.Indent();
7. 要顯示所選變數的內容,請使用 WriteLine 方法,如下所示:
Debug.WriteLine("The product name is " + sProdName);
Debug.WriteLine("The available units on hand are" + iUnitQty.ToString());
Debug.WriteLine("The per unit cost is " + dUnitCost.ToString());
8. 您還可以使用 WriteLine 方法顯示現有物件的名稱空間和類名稱。例如,下面的程式碼在“輸出”視窗中顯示 System.Xml.XmlDocument 名稱空間:
System.Xml.XmlDocument xml = new System.Xml.XmlDocument();
Debug.WriteLine(oxml);
9. 要整理輸出,可以包括一個類別作為 WriteLine 方法的第二個可選的輸入引數。如果您指定一個類別,則“輸出”視窗訊息的格式為“類別:訊息”。例如,以下程式碼的第一行在“輸出”視窗中顯示“Field:The product name is 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.ToString(),"Field");
Debug.WriteLine("Total Cost is " + (iUnitQty * dUnitCost),"Calc");
10. 僅在使用 Debug 類的 WriteLineIf 方法將指定條件計算為 true 時,“輸出”視窗才可以顯示訊息。將要計算的條件是 WriteLineIf 方法的第一個輸入引數。WriteLineIf 的第二個引數是僅在第一個引數的條件計算為真時才顯示的訊息。
Debug.WriteLineIf(iUnitQty > 50, "This message WILL appear");
Debug.WriteLineIf(iUnitQty < 50, "This message will NOT appear");
11. 使用 Debug 類的 Assert 方法,使“輸出”視窗僅在指定條件計算為 false 時才顯示訊息:
Debug.Assert(dUnitCost > 1, "Message will NOT appear");
Debug.Assert(dUnitCost < 1, "Message will appear since dUnitcost < 1 is false");
12. 為“控制檯”視窗 (tr1) 和名為 Output.txt (tr2) 的文字檔案建立 TextWriterTraceListener 物件,然後將每個物件新增到 Debug Listeners 集合中:
TextWriterTraceListener tr1 = new TextWriterTraceListener(System.Console.Out);
Debug.Listeners.Add(tr1);
TextWriterTraceListener tr2 = new TextWriterTraceListener(System.IO.File.CreateText("Output.txt"));
Debug.Listeners.Add(tr2);
13. 為了清晰易讀,請使用 Unindent 方法去除 Debug 類為後續訊息生成的縮排。當您將 Indent 和 Unindent 兩種方法一起使用時,讀取器可以將輸出分成組。
Debug.Unindent();
Debug.WriteLine("Debug Information-Product Ending");
14. 為了確保每個 Listener 物件收到它的所有輸出,請為 Debug 類緩衝區呼叫 Flush 方法:
Debug.Flush();
使用 Trace 類 您還可以使用 Trace 類生成監視應用程式執行的訊息。Trace 和 Debug 類共享大多數相同的方法來生成輸出,這些方法包括: • WriteLine
• WriteLineIf
• Indent
• Unindent
• Assert
• Flush
您可以在同一應用程式中分別或同時使用 Trace 和 Debug 類。在一個“除錯解決方案配置”專案中,Trace 和 Debug 兩種輸出均為活動狀態。該專案從這兩個類為 Listener 物件生成輸出。但是,“釋出解決方案配置”專案僅從 Trace 類生成輸出。該“釋出解決方案配置”專案忽略任何 Debug 類方法呼叫。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-620623/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 在oracle中跟蹤會話執行語句的幾種方法Oracle會話
- 如何在Visual Studio中除錯.NET原始碼除錯原始碼
- 在 WebSphere Application Server V6.1 應用程式中跟蹤死鎖WebAPPServer
- oracle中跟蹤sql執行計劃的方法OracleSQL
- 除錯跟蹤利器---strace除錯
- Ubuntu中跟蹤多個時區的簡捷方法Ubuntu
- CPU中跟蹤後繼指令地址的暫存器
- Meta新專利技術試圖在元宇宙中跟蹤你的情緒元宇宙
- 如何在專案管理中跟蹤資源可用性?專案管理
- 在Visual Studio中快速啟動除錯Web應用程式除錯Web
- 正確配置 Visual Studio Code 開發和除錯 TypeScript除錯TypeScript
- 在 .NET Core 中使用 ViewConfig 除錯配置View除錯
- 一路踩坑,被迫聊聊 C# 程式碼除錯技巧和遠端除錯C#除錯
- 12個Visual Studio除錯效率技巧除錯
- 【Visual Leak Detector】原始碼除錯 VLD 庫原始碼除錯
- 使用Visual C# .net生成Office COM 外接程式C#
- Visual Studio.NET、asp.net和C#間的關係是怎樣的?ASP.NETC#
- 如何在Visual Studio中執行和除錯彙編程式碼?除錯
- 【譯】使用 Visual Studio 除錯外部原始碼除錯原始碼
- Visual Studio 那些隱藏的除錯功能除錯
- 使用 Visual Studio 來除錯 dll 檔案除錯
- .NET高階除錯系列-Windbg除錯入門篇高階除錯
- Visual Studio的八個除錯建議:像老大哥一樣除錯除錯
- 如何使用Visual Studio Code除錯PHP CLI應用和Web應用除錯PHPWeb
- C#和Visual Basic之匿名型別C#型別
- SharePoint Framework 在Visual Studio Code中除錯你的本地解決方案Framework除錯
- 論Visual Studio和.NET FrameworkFramework
- 【PHP Debug】Visual Studio Code 除錯外掛PHP除錯
- [PHP Debug] Visual Studio Code 除錯外掛PHP除錯
- 非常棒的Visual Studo除錯外掛:OzCode除錯
- 使用Visual Studio Macro除錯VSPackage專案Mac除錯Package
- 使用Linux Strace跟蹤除錯Oracle程式程式Linux除錯Oracle
- PHP 程式碼除錯跟蹤工具 YtracePHP除錯
- 在 Istio 中除錯 503 錯誤除錯
- scrapy在pychram中除錯除錯
- SharePoint Framework 在Visual Studio Code中除錯你的託管解決方案Framework除錯
- Kubernetes之curl除錯除錯
- VS.Net除錯非常慢除錯