2008-10-07 68 views
49

看來,軌跡對調試的.NET BCL

很大程度上是相同的,具有顯着的例外是調試用法是編出來在發佈配置中。

你什麼時候使用一個而不是另一個?我迄今發現的唯一答案就是你使用調試類來產生你只能在調試配置中看到的輸出,並且跟蹤將保留在發佈配置中,但這並不是真的在我腦海中回答這個問題。

如果你要檢測你自己的代碼,爲什麼你會永遠使用調試,因爲跟蹤可以關閉不重新編譯?

回答

48

主要區別在於您指出的區別:調試不包含在版本中,而Trace是。

根據我的理解,預期的差異在於開發團隊可能會使用調試來發出豐富的描述性消息,這些消息可能被證明對產品的消費者來說過於詳細(或顯示),而Trace旨在發出更加專門針對應用程序的各種消息。

要回答你的最後一個問題,我想不出有什麼理由使用Debug來測試我打算髮布的一段代碼。

希望這會有所幫助。

+6

我完全不同意這個答案。跟蹤比調試級別低,不應該在生產中使用。根據我的經驗,跟蹤在方法開始時使用,或者在工作流程中「跟蹤」一部分工作,並在某些方面顯示調用堆棧。包括Info在內的所有內容都應該是生產中使用的唯一級別。這是信息,警告,錯誤,致命。 – 2013-01-09 22:12:30

+0

我認爲另外一個區別是,您可以在應用程序中配置[Trace Listeners](http://msdn.microsoft.com/zh-cn/library/4y5y10s7(v = vs.110).aspx),並將輸出的痕跡。 Visual Studio中的默認跟蹤偵聽器將把跟蹤消息定向到調試輸出流。 – orad 2014-06-11 22:23:45

+6

追蹤是**應該用於生產的東西。 Windows的每個**子系統都包含跟蹤代碼非常重要。每個硬盤驅動器查找,每個內存分配,每個中斷,CPU上下文切換,每個線程日程安排都會跟蹤代碼.Windows平臺的事件跟蹤(ETW)是一個非常輕量級的跟蹤系統,任何人都可以隨時啓用Windows PC。 [System.Diagnostics.Tracing.EventSource](https://msdn.microsoft.com/en-us/library/system.diagnostics.tracing.eventsource.aspx)是向ETW發送跟蹤事件的管理方式。 – 2015-02-11 18:46:06

3

我會考慮使用log4net進行跟蹤,因爲它的功能更加靈活和強大。

但是對於真正的調試消息,除了我或內部測試人員以外,其他任何人都不想看到,我可能會堅持使用Debug。

+0

有關哪種登錄框架更可取的問題顯示,log4net不像其他登錄框架更靈活或更健壯。 http://stackoverflow.com/questions/4775194/when-should-i-use-tracing-vs-logger-net-enterprise-library-log4net-or-ukadc-di – sam 2015-11-16 15:29:02

1

您已回答了您自己的問題。如果調試信息留在,人們可以看到它們。例如,假設您這樣做:

 
Debug.WriteLine("Connecting to DB with username: blah and PW: pass"); 

任何反編譯代碼的人都可以看到。但是在測試過程中,這可能對您來說非常重要。

跟蹤是不同的。如果你打算做Trace,我可能只是使用log4net。

2

對於高性能敏感的代碼塊,將Trace編譯爲in但禁用可能會導致性能差異。

3

跟蹤和調試的唯一區別在於,當程序編譯到發行版本時,跟蹤語句默認包含在程序中,而調試語句不是。

因此,調試類主要用於開發階段的調試,跟蹤可用於測試和優化在應用程序編譯和發佈後。

5

調試用於純粹的調試目的。它在調試執行(調試模式)中發出豐富的消息。

跟蹤有助於應用程序調試,錯誤修復和分析(發佈後)。

Debug類在發佈模式下無效。