从 Visual Studio 中的控制台应用程序项目,我想将Console
的输出重定向到输出窗口,同时调试。
答案 0 :(得分:27)
在调试之前将应用程序类型更改为Windows。如果没有Console窗口,Console.WriteLine就像Trace.WriteLine一样工作。调试后不要忘记将应用程序重置为Console类型。
答案 1 :(得分:17)
class DebugWriter : TextWriter
{
public override void WriteLine(string value)
{
Debug.WriteLine(value);
base.WriteLine(value);
}
public override void Write(string value)
{
Debug.Write(value);
base.Write(value);
}
public override Encoding Encoding
{
get { return Encoding.Unicode; }
}
}
class Program
{
static void Main(string[] args)
{
#if DEBUG
if (Debugger.IsAttached)
Console.SetOut(new DebugWriter());
#endif
Console.WriteLine("hi");
}
}
**请注意,这几乎是伪代码。它有效,但需要工作:) **
答案 2 :(得分:4)
您可以将其更改为System.Diagnostics.Debug.Write();
答案 3 :(得分:3)
注意如果您使用的是dkackman的方法,但是想要将输出写入控制台窗口和调试窗口,那么您可以稍微修改一下这样的代码:
class DebugWriter : TextWriter
{
//save static reference to stdOut
static TextWriter stdOut = Console.Out;
public override void WriteLine(string value)
{
Debug.WriteLine(value);
stdOut.WriteLine(value);
base.WriteLine(value);
}
public override void Write(string value)
{
Debug.Write(value);
stdOut.Write(value);
base.Write(value);
}
public override Encoding Encoding
{
get { return Encoding.Unicode; }
}
}
答案 4 :(得分:0)
尝试使用Trace.Write并使用DebugView
答案 5 :(得分:0)
谢谢Alex F,很好的解决方案,但对我不起作用,因为我的项目是由cmake创建的。因此,按照Alex F的建议,将WIN32
或MACOSX_BUNDLE
添加到add_executable
add_executable(target_name WIN32 <source list>)
或者,如果您无法编辑CMakeList.txt,则可以将-DCMAKE_WIN32_EXECUTABLE=1
添加到cmake
configure命令中。
答案 6 :(得分:-2)
实际上,有一种最简单的方法:在Visual Studio的“选项”窗口中(从“工具”菜单),转到“调试”,然后选中“将所有输出窗口文本重定向到立即窗口”选项。