2011-03-14 149 views
162

我正在寫一個簡單的C#程序,並帶有一些輸出(Console.WriteLine("...");)。問題是,我每次運行它時,都看不到輸出窗口中的程序輸出。查看Visual Studio 2010中的控制檯輸出?

「程序輸出」標記已被檢查,並且我已將所有輸出重定向到中間窗口,但無濟於事。

如何啓用查看程序的輸出?

我不認爲問題在於我的代碼。我嘗試運行一個簡單的程序,只輸出一個字符串和readline「ala hello world」,我仍然無法看到任何輸出。問題在於我在錯誤的位置查找輸出,或者Visual Studio採取行動。

debug.write方法也不起作用。

使用debug.Write,它的一切工作,但它沒有。無論是在我重新啓動之前與我聯繫在一起的東西,還是我只需休息一下,無論哪種方式,現在都很好。感謝所有有幫助的評論=)

+7

視覺Studio正在覆蓋您的控制檯窗口。將它移動到其他顯示器。 – 2011-03-14 16:29:43

+0

[如何在窗體應用程序中顯示控制檯輸出/窗口?](http://stackoverflow.com/questions/4362111/how-do-i-show-a-console-output-window-in -a-forms-application) – 2016-02-08 08:05:50

回答

192

您可以使用System.Diagnostics.Debug.WriteSystem.Runtime.InteropServices方法將消息寫入輸出窗口。

+10

System.Diagnostics.Debug.Write(在OP沒有命名空間的情況下) – jonsca 2011-03-14 16:14:52

+4

真的,我只是習慣了控制+期間:) – 2011-03-14 16:16:22

+0

jonsca:我有一個命名空間在玩,爲什麼我只能使用console.writeline,我想我的程序寫入控制檯它不僅出於測試的原因? – r3x 2011-03-14 16:16:43

34

在程序結束時添加Console.Read();。它會阻止應用程序關閉,並且可以以這種方式查看其輸出。

這是一個控制檯應用程序我剛挖出來處理之後,但在退出之前停止:

class Program 
{ 
    static void Main(string[] args) 
    { 
     DummyObjectList dol = new DummyObjectList(2); 
     dol.Add(new DummyObject("test1", (Decimal)25.36)); 
     dol.Add(new DummyObject("test2", (Decimal)0.698)); 
     XmlSerializer dolxs = new XmlSerializer(typeof(DummyObjectList)); 
     dolxs.Serialize(Console.Out, dol); 

     Console.WriteLine(string.Empty); 
     Console.WriteLine(string.Empty); 

     List<DummyObject> dolist = new List<DummyObject>(2); 
     dolist.Add(new DummyObject("test1", (Decimal)25.36)); 
     dolist.Add(new DummyObject("test2", (Decimal)0.698)); 
     XmlSerializer dolistxs = new XmlSerializer(typeof(List<DummyObject>)); 
     dolistxs.Serialize(Console.Out, dolist); 
     Console.Read(); // <--- Right here 
    } 
} 

或者,你可以簡單地在最後一行添加一個斷點。

+2

已經做到了,第nth更改不幸 – r3x 2011-03-14 16:15:50

+2

Console.ReadLine的工作原理,你只需要按Enter鍵繼續,因爲讀取任何標準的關鍵。 – 2011-03-14 16:24:07

+1

是啊,這麼想了,因爲我做了一個控制檯應用程序... – 2011-03-14 16:25:16

19

按下Ctrl鍵+ F5 運行F5的程序來代替。

+1

Ctrl + F5啓動應用程序而不調試給你看不到輸出窗口中的任何東西。 – 2011-03-15 16:53:28

+6

這對我有效;我只是想看看程序輸出的是什麼,沒有一個控制檯輸出顯示出來。這導致它在運行後保持控制檯窗口打開,所以我可以看到輸出。 – davenpcj 2013-04-16 00:37:02

+0

+1,如果您實際上不想調試(顯示控制檯,並允許讀取輸出),則爲+1。 – mlvljr 2014-04-13 19:53:01

50

這裏有幾件事情要檢查:

  1. 對於console.Write/WriteLine,您的應用程序必須是一個控制檯應用程序。 (右鍵單擊Solution Explorer中的項目,選擇屬性,看看在應用程序選項卡上的「輸出類型」組合 - 應該是「控制檯應用程序」(注意,如果你真的需要一個Windows應用程序或者類庫,不要將其更改爲控制檯應用程序只是爲了獲得Console.WriteLine

  2. 你可以使用System.Diagnostics.Debug.WriteLine寫入到輸出窗口(顯示在VS輸出窗口,得到了查看。| 輸出)請注意,這些寫操作只會發生在定義DEBUG條件的構建中(默認情況下,調試構建定義這一點,並且發佈版本不)

  3. 如果您希望能夠在非調試版本中寫入可配置的「偵聽器」,您可以使用System.Diagnostics.Trace.Writeline。(默認情況下,這個寫在Visual Studio中的輸出窗口,就像Debug.Writeline

+2

我沒有看到我的輸出,但後來意識到我必須在調試模式(F5)而不是Ctrl + Shift + F5下運行程序。謝謝! – 2013-06-05 15:51:57

+0

System.Diagnostics.Trace.Writeline似乎不工作,有什麼我需要配置爲此? – 2013-06-05 15:59:43

+1

«1» - 虛假陳述。單聲道顯示所有應用程序的罰款。 «2» - ofc。問題是該方法也不會輸出到終端。所以不能在沒有IDE的情況下在PC上調試應用程序。 – 2015-08-11 08:37:06

8

System.Diagnostics.Debug.WriteLine()將工作,但你必須要尋找在輸出正確的地方。在Visual Studio 2010中,在菜單欄上單擊調試Windows輸出。現在,在停靠在錯誤列表旁邊的屏幕底部,應該有一個輸出選項卡。點擊它並再次檢查它是否顯示下拉列表中調試流的輸出。

P.S .:我認爲輸出窗口顯示在全新安裝,但我不記得了。如果沒有,或者意外關閉了它,請按照這些說明操作。

-4

您可以創建2個小方法,一個可以在程序開始時調用,另一個在結束時調用。您也可以使用Console.Read(),以便在最後一個寫入行之後程序不會關閉。

通過這種方式,您可以確定您的功能何時執行以及程序何時存在。

startProgram() 
{ 
    Console.WriteLine("-------Program starts--------"); 
    Console.Read(); 
} 


endProgram() 
{ 
    Console.WriteLine("-------Program Ends--------"); 
    Console.Read(); 
} 
+0

由於Console.Read()的可能性已經在前面陳述過了,所以我沒有看到這個答案如何給這個問題帶來新的信息。 – ForceMagic 2012-10-10 18:29:41

0

要保持打開Windows控制檯,不使用其他輸出方法,而不是標準輸出流cout中去名稱 - 的 - 你的項目 - >屬性 - >鏈接器 - >系統。

一旦出現,選擇SubSytem選項卡並標記控制檯(/ SUBSYSTEM:CONSOLE)。一旦你完成了這個任務,只要你想編譯使用Ctrl + F5(沒有調試就開始)並且你的控制檯將保持打開狀態。 :)

+0

我認爲它適用於C++,而不是問題中的C#。 – 2014-01-17 11:44:47

0

我碰上這種經常因爲某些原因,我無法捉摸,爲什麼這個解決方案尚未提及:

點擊查看輸出(或牽住Ctrl鍵並創下W> O)

然後

控制檯輸出出現在您的錯誤列表當地人觀看窗戶。

注:我使用Visual Studio 2015

+0

ctrl + alt + o適用於我的VS15社區版。 – frostbite 2016-02-13 14:51:27

+0

您提到的輸出窗口看起來像是由調試器生成的,因爲它有大量與加載的程序集,啓動和停止等的線程相關的行。這與控制檯輸出不同。 – PeterVermont 2016-05-10 20:37:31

-1

在Program.cs中,之間:

static int Main(string[] agrs) 
{ 

和你的代碼的其餘部分,添加:

#if DEBUG 
    int rtn = Main2(args); 
    Console.WriteLine("return " + rtn); 
    Console.WriteLine("ENTER to continue."); 
    Console.Read(); 
    return rtn; 
} 

static int Main2(string[] args) 
{ 
#endif 
+0

請添加說明,您的代碼如何解決問題。 – Koopakiller 2016-03-09 19:18:59

相關問題