檢測和追蹤的簡介
「檢測」(Instrumentation) 這個詞彙代表監視或測量產品效能等級和診斷錯誤的能力。 就程式設計而言,這表示應用程式能夠納入:
程式碼追蹤 - 於執行階段接收有關應用程式執行的資訊訊息。
偵錯 - 追蹤並修正開發中應用程式內的程式撰寫錯誤。 如需詳細資訊,請參閱偵錯。
效能計數器 - 讓您追蹤應用程式效能的元件。 如需詳細資訊,請參閱.NET Framework 中的效能計數器。
事件記錄檔 - 讓您接收和追蹤應用程式執行中主要事件的元件。 如需詳細資訊,請參閱 EventLog 類別。
Trace 和 Debug 類別會提供在開發期間或部署之後,監視和檢查應用程式效能的方式。 例如,您可使用 Trace 類別來追蹤出現於部署應用程式中的特定動作型別 (例如,建立新的資料庫連接),並藉此監視應用程式的效率。
程式碼追蹤和偵錯
在開發期間,您可以使用 Debug 類別的輸出方法,在 Visual Studio 整合式開發環境 (IDE) 的 [輸出] 視窗中顯示訊息。 例如:
Trace.WriteLine("Hello World!")
Debug.WriteLine("Hello World!")
System.Diagnostics.Trace.WriteLine("Hello World!");
System.Diagnostics.Debug.WriteLine("Hello World!");
當應用程式是在偵錯工具中執行時,這些範例都會在 [輸出] 視窗中顯示 "Hello World!"。
這讓您能夠依據應用程式在測試環境中的行為來偵錯應用程式並將其效能最佳化。 您可在已啟動 Debug 條件屬性 (Attribute) 的偵錯組建 (Build) 中偵錯應用程式,以接收所有的偵錯輸出。 當您的應用程式準備發行時,您可在不啟動 Debug 條件屬性情況下編譯發行組建,使編譯器 (Compiler) 不會將偵錯程式碼納入最終可執行檔。 如需詳細資訊,請參閱如何:使用追蹤和偵錯進行條件式編譯。 如需應用程式不同組建組態的詳細資訊,請參閱在 Visual Studio 中建置應用程式。
您還可以使用 Trace 類別的方法,追蹤已安裝應用程式中的程式碼執行。 在程式碼中放置追蹤參數,您就能控制是否進行追蹤,以及追蹤的範圍。 這可讓您在生產環境中監視應用程式的狀態。 這對於使用在多台電腦上執行的多個元件的商務應用程式而言格外重要。 經由組態檔部署後,您可控制如何使用參數。 如需詳細資訊,請參閱如何:設定追蹤參數。
在開發要使用追蹤的應用程式時,通常會將追蹤和偵錯訊息包含在應用程式程式碼中。 當您準備好部署應用程式時,您可在不啟動 Debug 條件屬性的情況下編譯發行組建。 不過,您可以啟動 Trace 條件屬性,讓編譯器將追蹤程式碼加入可執行檔中。 如需詳細資訊,請參閱如何:使用追蹤和偵錯進行條件式編譯。
程式碼追蹤階段
程式碼追蹤階段可分為三段:
檢測 - 將追蹤程式碼加入至應用程式。
追蹤 - 追蹤程式碼將資訊寫入至指定的目標。
分析 - 評估追蹤資訊,以辨識並瞭解應用程式的問題。
在開發期間,依照預設所有的偵錯和追蹤輸出方法會將資訊寫入至 Visual Studio 的 [輸出] 視窗。 在部署的應用程式中,方法會將追蹤資訊寫入您指定的目標 (Target)。 如需為追蹤或偵錯指定輸出目標的詳細資訊,請參閱追蹤接聽項。
檢測和分散式應用程式
當您建立分散式應用程式時,您可能會發現很難以應用程式預計的使用方式來加以測試。 極少數的開發小組能夠測試所有作業系統或 Web 瀏覽器 (包括所有當地語系化語言選項) 的可能組合,或是模擬同時存取應用程式的大量使用者。 在這些情況下,您無法測試分散式應用程式將如何回應大量使用、不同設定和獨特的使用者行為。 再者,分散式應用程式的許多部分中,都不具備您可直接與其互動或檢視這些部分活動的使用者介面。
然而,您可以透過檢測應用程式 (亦即將追蹤陳述式放在程式碼中的重要位置),啟用分散式應用程式,為系統管理員描述相關事件,特別是發生錯誤的事項,以彌補上述情況的不足。 之後,如果在執行階段發生非預期事件 (例如,回應時間極慢),您便可判斷可能的原因。
使用追蹤陳述式,您可以避免檢查原始程式碼、修改原始程式碼、重新編譯,以及嘗試在偵錯環境內產生執行階段錯誤等困難的工作。 請記得,您不僅可追蹤記錄應用程式以顯示資訊,還可監視效能。
追蹤陳述式的策略位置
當您放置於執行階段期間使用的追蹤陳述式 (Statement) 時必須非常小心。 您必須考慮部署應用程式中可能需要什麼追蹤資訊,以便能夠充分涵蓋所有可能的追蹤案例。 然而,因為使用追蹤的應用程式隨個案而異,所以沒有追蹤策略位置的一般方針。 如需放置追蹤陳述式的詳細資訊,請參閱 如何:將追蹤陳述式加入至應用程式程式碼。
追蹤輸出
追蹤輸出是由稱為接聽程式的物件負責收集。 接聽程式是一種接收追蹤輸出並將其寫入至輸出裝置 (通常為視窗、記錄檔或文字檔) 的物件。 建立追蹤接聽程式時,通常會將其加入至 Trace.Listeners 集合,讓接聽程式能夠接收所有的追蹤輸出。
追蹤資訊一定至少會寫入至預設的 Trace 輸出目標,DefaultTraceListener。 如果因為某種原因而已經刪除了 DefaultTraceListener, 但未將任何其他接聽程式加入至 Listeners 集合,您將不會接收到任何追蹤訊息。 如需詳細資訊,請參閱追蹤接聽項。
下表列出寫入追蹤資訊的六個 Debug 成員和 Trace方法。
方法 |
Output |
---|---|
Assert |
指定的文字;如果未指定文字,則會顯示呼叫堆疊。 只有當 Assert 陳述式中指定為引數的條件為 false 時,才會寫入輸出。 |
失敗 |
指定的文字;如果未指定文字,則會顯示呼叫堆疊。 |
寫入 |
指定的文字。 |
WriteIf |
如果符合 WriteIf 陳述式中指定為引數的條件,則輸出指定的文字。 |
WriteLine |
指定的文字和歸位字元 (Carriage Return)。 |
WriteLineIf |
如果符合 WriteLineIf 陳述式中指定為引數的條件,則輸出指定的文字和歸位字元。 |
Listeners 集合中的所有接聽程式都會接收前面表格中所說明的訊息,但是所採取的動作會因接收訊息的接聽程式種類而異。 例如,當 DefaultTraceListener 接收 Fail 或失敗的 Assert告知時,會顯示判斷提示 (Assertion) 對話方塊,但 TextWriterTraceListener 僅會將輸出寫入至其資料流。
您可藉由實作自己的接聽程式來產生自訂結果。 例如,自訂追蹤接聽程式可將訊息顯示至訊息方塊,或連線至資料庫,以將訊息加入至表格中。 所有的自訂接聽程式均應支援前面提及的六種方法。 如需建立開發人員定義接聽程式的詳細資訊,請參閱《.NET Framework 參考》中的 TraceListener。
Visual Basic 注意事項 |
---|
在 Visual Basic 2005 中,Debug.Write、Debug.WriteIf、Debug.WriteLine 和 Debug.WriteLineIf 方法已取代 Visual Basic 先前版本提供的 Debug.Print 方法。 |
Write 和 WriteLine 方法會固定寫入您指定的文字。 Assert、WriteIf 和 WriteLineIf 需要 Boolean 引數,以控制是否要寫入指定的文字;只有當運算式為 true (針對 WriteIf 和 WriteLineIf) 或 false (針對 Assert) 時,才會寫入指定的文字。 Fail 方法會固定寫入指定的文字。 如需詳細資訊,請參閱 如何:將追蹤陳述式加入至應用程式程式碼和《.NET Framework 參考》。
安全性考量
如果您在部署 ASP.NET 應用程式前沒有停用追蹤和偵錯,應用程式可能會顯示本身的資訊,而遭受惡意程式的利用。 如需詳細資訊,請參閱如何:使用追蹤和偵錯進行條件式編譯、在 Visual Studio 中建置應用程式 和 如何:設定追蹤參數。 偵錯也可經由網際網路資訊服務 (IIS) 設定。