如果我在C#.NET(winforms)中有一个包含Console.WriteLine("TEST");
的代码,并且Visual Studio附加到该进程,则它不会写入" TEST"在输出窗口中。
(申请被正确附上)
如果我使用visual studio开始我的程序正常,它就可以工作。
为什么第一种情况不起作用?
答案 0 :(得分:2)
Visual Studio,在调试 windows 时,程序(/target:winexe
)将启动它们,stdout
和stderr
重定向到命名管道。命名管道的另一端由VS调试器拥有,并且在这些管道上读取的任何内容(即应用程序写入stdout或stderr的任何内容)都将显示在 Debug 输出窗口中(通过没有办法是调试的应用程序输出窗口。)
当附加到应用程序时,无法再进行此重定向(显然,因为应用程序已经启动,并且stderr
和stdin
无法在事后重定向)。因此Console.Write
不再自动神奇地重定向到Debug输出。
请注意,控制台程序(/target:exe
)
但是有一个专门的API来编写调试信息:Debug.Write
。这使用OutputDebugString
函数,它们将文本发送到附加的调试器(如果有的话)。无论何时或如何附加调试器,这都有效,因为它不依赖于stdout / stderr重定向技巧。
将Console.Write
替换为Debug.Write
。