2010-06-10 153 views

回答

76

Console.WriteLine寫入標準輸出流,無論是在調試或發佈。 Debug.WriteLine寫入Listeners集合中的跟蹤偵聽器,但僅在調試時運行。當應用程序在發佈配置中編譯時,Debug元素將不會被編譯到代碼中。

至於Debug.WriteLine寫入Listeners集合中的所有跟蹤監聽器,它是可能的,這可能是在多個地方輸出(Visual Studio的輸出窗口,控制檯,日誌文件的第三方應用程序,註冊一個監聽器(我相信DebugView這樣做)等)。

+7

嚴格地說,DebugView監視通過本地Windows API調用'OutputDebugString'(和'DebugPrint')記錄的消息。 'DefaultTraceListener'寫入'OutputDebugString',這就是DebugView看到輸出的原因。 http://msdn.microsoft.com/en-us/library/system.diagnostics.defaulttracelistener.aspx – MarkJ 2010-06-10 12:05:51

27

Console.WriteLine()是用於控制檯模式程序。 Visual Studio託管過程的一個很好的功能使其輸出出現在Visual Studio輸出窗口中,同時調試沒有控制檯的進程。這在調試時非常有用,但要注意,當您準備創建發佈版本時,應該刪除此代碼(或將其包含在#ifdef DEBUG中)。否則會給你的程序增加不必要的開銷。這使得它不太適合調試跟蹤。

Debug.WriteLine()如果使用條件#defined創建DEBUG,則會生成跟蹤信息。在Debug版本中默認處於打開狀態。輸出結束的位置可以在app.exe.config文件中配置。如果這個配置沒有被覆蓋,.NET會自動提供一個DefaultTraceListener類的實例。它將Debug.WriteLine()文本與Windows OutputDebugString() API函數一起發送給調試器。 Visual Studio調試器使其顯示在輸出窗口中,就像Console.WriteLine()一樣。

Debug.WriteLine()的一個明顯的優點是它在Release版本中不產生任何開銷,這些調用被有效地移除。但是它不支持複合格式,因此您需要String.Format()。對於調試跟蹤,Debug類應該是您的選擇。

14

如果您的使用Console.WriteLine的目的僅僅是爲了調試,您的 更好地使用Debug.WriteLine

如果您想向用戶顯示消息,您可以使用Console.WriteLine

Debug.WriteLine僅用於調試您的應用程序。在 發佈模式下,您的調試語句將被忽略。

控制檯應用程序的另一個用法是測試私人程序集。而不是創建某種GUI測試工具來測試DLL的編譯版本的傳統方法,您可以簡單地重新構建DLL作爲控制檯應用程序以及從控制檯輸入/輸出。我發現這種技術比花費時間創建GUI測試工具更快。

+2

「如果你想向用戶顯示一條消息,你可以使用console.writeline。「這可能會讓一些人感到困惑,因爲如果在控制檯應用程序中執行,它只會向用戶顯示某些內容。 – 2011-05-03 15:19:46

相關問題