连接到VS中的进程时,Console.WriteLine不起作用

时间:2017-11-15 09:22:31

标签: visual-studio

如果我在C#.NET(winforms)中有一个包含Console.WriteLine("TEST");的代码,并且Visual Studio附加到该进程,则它不会写入" TEST"在输出窗口中。 (申请被正确附上)

如果我使用visual studio开始我的程序正常,它就可以工作。

为什么第一种情况不起作用?

1 个答案:

答案 0 :(得分:2)

Visual Studio,在调试 windows 时,程序(/target:winexe)将启动它们,stdoutstderr重定向到命名管道。命名管道的另一端由VS调试器拥有,并且在这些管道上读取的任何内容(即应用程序写入stdout或stderr的任何内容)都将显示在 Debug 输出窗口中(通过没有办法是调试的应用程序输出窗口。)

当附加到应用程序时,无法再进行此重定向(显然,因为应用程序已经启动,并且stderrstdin无法在事后重定向)。因此Console.Write不再自动神奇地重定向到Debug输出。

请注意,控制台程序(/target:exe

不会发生此stdout / stderr redircetion

但是有一个专门的API来编写调试信息:Debug.Write。这使用OutputDebugString函数,它们将文本发送到附加的调试器(如果有的话)。无论何时或如何附加调试器,这都有效,因为它不依赖于stdout / stderr重定向技巧。

Console.Write替换为Debug.Write