非控制台应用程序项目中的c ++控制台

时间:2012-06-18 14:30:31

标签: c++ windows visual-c++

我正在使用C ++编写Windows应用程序,我想使用cout进行调试。
似乎cout的效果是隐藏的,是否有一个配置选项允许控制台窗口打开我的调试信息?

5 个答案:

答案 0 :(得分:2)

你有几个合理的选择。一种是将您的入口点重命名为WinMainmain,因此它将被构建为控制台应用程序。这仍然可以使用RegisterClassCreateWindow之类的内容。

显而易见的替代方法是使用OutputDebugString代替cout。它的输出将显示在调试器或任何数量的程序中,专门用于显示它产生的内容(基本上是不提供其他调试功能的迷你调试器)。

我认为不太合理的第三个解决方案是调用AllocConsole来分配控制台,然后写入它。如果您不介意使用Windows本机控制台功能(WriteFileWriteConsoleOutput等)进行所有写作,那很好。不幸的是,它不会初始化C ++流以使用控制台,因此您需要打开指向控制台的文件流,或者找到并使用初始化控制台的流库的(未记录的)函数。虽然这可以起作用,但你最终需要做额外的工作来编写不可移植的代码,并且很少(如果有的话)优势来弥补它(在这种情况下,“非便携式”可能包括甚至不能使用至少在你调用库的初始化函数的情况下,同一编译器的其他版本。)

答案 1 :(得分:2)

要将控制台窗口添加到GUI应用程序,您可以使用AllocConsole API。

然后您只需打开特殊文件名"CONOUT$"并将您的信息流附加到其中(coutcerr等)

请参阅MSDN上的this explanation

答案 2 :(得分:1)

我相信接受的答案实际上不是你想要的。你说你只需要它来调试,而不是发布。您最好的选择是:

a)将stdoutstderr重定向到文件,然后检查文件。您可以在VS项目Properties > Configuration Properties > Debugging > Command Arguments中进行设置:您应该输入>out.txt 2>&1。这会将stdoutstderr同时输出到out.txt

b)将您的调试(您说只需要调试)配置Properties > Configuration Properties > Linker > System > SubSystem设置为Console (/SUBSYSTEM:CONSOLE)。然后,您可以使用F5运行项目,但在应用程序完成时它将隐藏控制台窗口。如果你使用Ctrl+F5运行它(但是你没有连接调试器),那么它就不会被隐藏。

答案 3 :(得分:0)

执行此操作的最简单方法是从头开始启动控制台应用程序:

在VisualStudio中,文件> 新项目。选择 Win32控制台应用程序。选择各种选项并创建新项目。

请注意,虽然它说的是 Win32 控制台应用程序,但您可以不受限制地创建x64版本。

此时你有一个应用程序shell。如果您已经拥有代码并希望将其引入此新项目,只需执行项目> 添加现有项目,然后选择要包含在项目中的文件。

答案 4 :(得分:0)

从GUI程序管理控制台是非常混乱的,我建议你以另一种方式做。例如,如果您需要实时查看消息,请在窗口中显示;如果没有,请将它们写入文件。