我正在使用C ++编写Windows应用程序,我想使用cout
进行调试。
似乎cout
的效果是隐藏的,是否有一个配置选项允许控制台窗口打开我的调试信息?
答案 0 :(得分:2)
你有几个合理的选择。一种是将您的入口点重命名为WinMain
到main
,因此它将被构建为控制台应用程序。这仍然可以使用RegisterClass
和CreateWindow
之类的内容。
显而易见的替代方法是使用OutputDebugString
代替cout
。它的输出将显示在调试器或任何数量的程序中,专门用于显示它产生的内容(基本上是不提供其他调试功能的迷你调试器)。
我认为不太合理的第三个解决方案是调用AllocConsole
来分配控制台,然后写入它。如果您不介意使用Windows本机控制台功能(WriteFile
,WriteConsoleOutput
等)进行所有写作,那很好。不幸的是,它不会初始化C ++流以使用控制台,因此您需要打开指向控制台的文件流,或者找到并使用初始化控制台的流库的(未记录的)函数。虽然这可以起作用,但你最终需要做额外的工作来编写不可移植的代码,并且很少(如果有的话)优势来弥补它(在这种情况下,“非便携式”可能包括甚至不能使用至少在你调用库的初始化函数的情况下,同一编译器的其他版本。)
答案 1 :(得分:2)
要将控制台窗口添加到GUI应用程序,您可以使用AllocConsole
API。
然后您只需打开特殊文件名"CONOUT$"
并将您的信息流附加到其中(cout
,cerr
等)
请参阅MSDN上的this explanation。
答案 2 :(得分:1)
我相信接受的答案实际上不是你想要的。你说你只需要它来调试,而不是发布。您最好的选择是:
a)将stdout
和stderr
重定向到文件,然后检查文件。您可以在VS项目Properties > Configuration Properties > Debugging > Command Arguments
中进行设置:您应该输入>out.txt 2>&1
。这会将stdout
和stderr
同时输出到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程序管理控制台是非常混乱的,我建议你以另一种方式做。例如,如果您需要实时查看消息,请在窗口中显示;如果没有,请将它们写入文件。