[英]Why I can't see the debug output when I run a test in Visual Studio 2012?
[英]Should I see debug outputs In Visual Studio's output window when running in a release configuration?
這些似乎是Trace
消息 ,而不是Debug
消息 ,因此它們甚至出現在發行版中。
讓我們通過在這里研究術語“調試”的各種上下文含義來了解發生了什么。
首先,在Visual Studio中具有“ Debug”和“ Release”選項的下拉菜單的上下文。 這些選項是構建配置 。 要了解此選項的重要性,請雙擊項目的“屬性”節點,然后轉到“構建”頁面。
該頁面(以及其他一些頁面)可以具有特定於特定構建配置的設置。 您可以通過頁面上的下拉菜單查看每個配置的設置(默認為您當前使用的任何構建配置)。
名稱“ Debug”和“ Release”沒有什么特別的-這些只是默認配置,具有針對這些方案的默認設置。 您可以更改配置的設置。 您也可以定義自己的構建配置,但這超出了此答案的范圍。 最后,這些設置也可以由類似的目標平台(例如“ AnyCPU”,“ x86”等)進行參數設置,但是對於此答案,我將假定所有構建都使用相同的平台設置。
C#具有條件編譯功能-能夠根據編譯時已定義或未定義的符號來編譯代碼的不同部分。 例如,如果定義了MY_SYMBOL_NAME
,則此常數的值為“ A”,否則為“ B”。
public const string MyConst =
#if MY_SYMBOL_NAME
"A";
#else
"B";
#endif
項目“構建”頁面上的前三個設置控制這些符號。 特別是“ Define DEBUG常量”和“ Define TRACE常量”,它們實際上是指編譯符號。 通過檢查這些內容,所選的構建設置將分別使用定義的DEBUG
和TRACE
符號進行編譯。
默認情況下,“ Debug”和“ Release”配置都定義TRACE
,但恰好只有“ Debug”定義DEBUG
。
Debug
類 條件編譯專門擴展到System.Diagnostics.Debug
和System.Diagnostics.Trace
類的成員:僅在定義了適當的符號時,才編譯對這些類的方法的調用。 所以這:
Debug.WriteLine("!");
被這樣對待:
#if DEBUG
Debug.WriteLine("!");
#endif
這些方法寫入所謂的“跟蹤偵聽器”, 可以在代碼或應用程序配置文件中對其進行配置 。
因此,如果您看到的文本是通過調用Trace
編寫的,那么即使在Release配置中,您仍然會看到它。 當然,這意味着此日志記錄將保留在出廠版本中,除非您明確禁用“定義TRACE常量”設置。
那么,為什么Visual Studio仍會顯示這些內容? 因為有“調試”之一, 更多的含義:你是否已經開始與Visual Studio的調試器的應用程序連接,還是不行。 VS的“調試”菜單欄中列出了兩個啟動選項:“啟動調試”和“不調試啟動”。 這與您使用的構建配置正交:您可以在不連接調試器的情況下運行Debug構建,並且可以在連接調試器的情況下運行Release構建(盡管這樣做可能沒有幫助,因為在某些情況下可能不會遇到斷點例)。
使用調試器時,“輸出”窗口將顯示寫入默認跟蹤偵聽器的消息。 這被標記為“調試”,但其中包含所有內容,包括對Trace
調用(默認情況下包含在Release版本中)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.