2011-03-14 47 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

相关问题