C#如何使用 Debug 和 Trace 類
轉自:http://wenku.baidu.com/view/8a5def15f18583d04964596b.html
本文介紹如何使用 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 集合才可接收除錯輸出。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
namespace DebugAndTrace
{
class Program
{
static void Main(string[] args)
{
string sProdName = "Widget";
int iUnitQty = 100;
double dUnitCost = 1.03;
/*將類生成的訊息指定為 WriteLine 方法的第一個輸入引數。按 CTRL+ALT+O 組合鍵以確保“輸出”視窗可見。*/
Debug.WriteLine("Debug Information-Product Starting ");
/*為了清晰易讀,請使用 Indent 方法在“輸出”視窗中縮排後面的訊息*/
Debug.Indent();
/*要顯示所選變數的內容,請使用 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());
/* 您還可以使用 WriteLine 方法顯示現有物件的名稱空間和類名稱。例如,下面的程式碼在“輸出”視窗中顯示 */
System.Xml.XmlDocument oxml = new System.Xml.XmlDocument();
Debug.WriteLine(oxml);
/*要整理輸出,可以包括一個類別作為 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");
/* 僅在使用 Debug 類的 WriteLineIf 方法將指定條件計算為 true 時,“輸出”視窗才可以顯示訊息。
* 將要計算的條件是 WriteLineIf 方法的第一個輸入引數。WriteLineIf 的第二個引數是僅在第一個引數的條件計算為真時才顯示的訊息。*/
Debug.WriteLineIf(iUnitQty > 50, "This message WILL appear");
Debug.WriteLineIf(iUnitQty < 50, "This message will NOT appear");
/*使用 Debug 類的 Assert 方法,使“輸出”視窗僅在指定條件計算為 false 時才顯示訊息:*/
Debug.Assert(dUnitCost > 1, "Message will NOT appear");
Debug.Assert(dUnitCost < 1, "Message will appear since dUnitcost < 1 is false");
/* 為“控制檯”視窗 (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);
Debug.WriteLine("The product name is " + sProdName);
Debug.WriteLine("The available units on hand are" + iUnitQty);
Debug.WriteLine("The per unit cost is " + dUnitCost);
/*為了清晰易讀,請使用 Unindent 方法去除 Debug 類為後續訊息生成的縮排。當您將 Indent 和 Unindent 兩種方法一起使用時,讀取器可以將輸出分成組。*/
Debug.Unindent();
Debug.WriteLine("Debug Information-Product Ending");
/*為了確保每個 Listener 物件收到它的所有輸出,請為 Debug 類緩衝區呼叫 Flush 方法:*/
Debug.Flush();
/*使用 Trace 類 您還可以使用 Trace 類生成監視應用程式執行的訊息。Trace 和 Debug 類共享大多數相同的方法來生成輸出。*/
//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();
}
}
}
輸出視窗為:
Debug Information-Product Starting
The product name is Widget
The available units on hand are100
The per unit cost is 1.03
System.Xml.XmlDocument
Field: The product name is Widget
Field: The units on hand are100
Field: The per unit cost is1.03
Calc: Total Cost is 103
This message WILL appear
“DebugAndTrace.vshost.exe”(託管): 已載入“C:\WINDOWS\assembly\GAC_MSIL\System.resources\2.0.0.0_zh-CHS_b77a5c561934e089\System.resources.dll”
---- 除錯斷言失敗----
---- 斷言短訊息----
Message will appear since dUnitcost < 1 is false
---- 斷言長訊息----
at Program.Main(String[] args) D:\Projects\DebugAndTrace\DebugAndTrace\Program.cs(50)
at AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
at AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
at HostProc.RunUsersAssembly()
at ThreadHelper.ThreadStart_Context(Object state)
at ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at ThreadHelper.ThreadStart()
The product name is Widget
The available units on hand are100
The per unit cost is 1.03
Debug Information-Product Ending
其截圖是:
相關文章
- rman target / debug trace
- 如何使用SQL_TRACE和10046事件SQL事件
- C# Debug和release判斷用法C#
- C# 測試程式碼#if DEBUG使用C#
- debug:am trace-ipc原始碼分析原始碼
- C# 好程式碼學習筆記(1):檔案操作、讀取檔案、Debug/Trace 類、Conditional條件編譯、CLSC#筆記編譯
- c#中Debug和Release的區別實驗C#
- ORACLE中SQL TRACE和TKPROF的使用OracleSQL
- iOS中 Debug 和 Release 的區別和使用iOS
- 如何將C# 7類庫升級到C# 8?使用可空引用型別C#型別
- 使用sql trace工具和tkprof來跟會話SQL會話
- -debug(C# 編譯器選項)C#編譯
- C#中類的使用舉例C#
- 使用SQL TRACE和TKPROF——效能調整手冊和參考SQL
- [cmake]如何設定Debug和Release編譯模式編譯模式
- 教你如何簡單的在windows 10使用DebugWindows
- SQL TRACE和TKPROF,10046的使用步驟SQL
- 使用Oracle TRACE——效能調整手冊和參考Oracle
- sql_trace生成及使用tkprof檢視trace fileSQL
- sql_trace的使用SQL
- C#之 sealed(密封類和密封方法)C#
- C#實驗7 類和繼承C#繼承
- C# OOP:繼承,介面和抽象類C#OOP繼承抽象
- 使用Trace Management Object監測和診斷SQL Server(一)ObjectSQLServer
- 使用Trace Management Object監測和診斷SQL Server(二)ObjectSQLServer
- C#介面、抽象類、普通類和繼承(子類與父類)都有其特定的用途和場景C#抽象繼承
- C#中類的建立和例項化C#
- python 類如何使用Python
- Chromium Trace and Perfetto使用詳解
- Linux trace使用入門Linux
- 如何使用 C# 中的 LazyC#
- 如何在 C# 中使用 ChannelsC#
- 如何使用 C# 中的 ValueTaskC#
- 如何在C#中使用MSMQC#MQ
- 使用SQL TRACE和TKPROF觀察SQL語句執行結果SQL
- debug 和 release 應用
- IDEA中使用DebugIdea
- Oracle EBS 如何生成trace檔案Oracle