将stdout和stderr重定向到microsoft visual studio的输出调试控制台

Art*_*hur 17 mfc visual-studio visual-c++

我正在使用microsoft visual studio来做C++.我没有在IDE的输出控制台中看到std :: err和std :: out.有没有办法重定向他们?

Bra*_*don 19

你确实可以重定向std :: out和std :: err.只需在解决方案资源管理器中右键单击您的项目,然后选择Properties.然后选择Configuration Properties -> Debugging并将适当的参数放入Command Arguments字段中.例如,要将std :: err重定向到文件,我会输入2> ErrorLog.txt.

键入的内容Command Arguments只是在Visual Studio运行程序时作为命令行参数附加,就像您手动将它们输入控制台一样.因此,上面的示例只是告诉VisualStudio使用命令<programName>.exe 2> ErrorLog.txt而不是仅仅运行程序<programName>.exe.

  • 抱歉,我的目标是将std :: out和std :: err重定向到visual studio的输出窗口,而不是文件.不管怎么说,还是要谢谢你 (4认同)
  • @jules 没问题。但是,问题的标题是这样的,只是希望重定向输出的人也可能会在这里结束,所以我认为也值得发布这个答案。 (2认同)

小智 6

我知道这是一个老线程,但我不能不给出答案,因为我无法相信仍然没有真正的答案.你可以做的是将cout重定向到你选择的ostringstream.要做到这一点,从派生新类流缓冲,将数据流发送到OutputDebugString的(让我们调用这个类OutputDebugStream),并创建类的实例,myStream.现在打电话:

cout.rdbuf(&myStream)
Run Code Online (Sandbox Code Playgroud)

我以cout为例.同样的技术可以与cerr一起使用,只需调用即可

cerr.rdbuf(&myStream).  
Run Code Online (Sandbox Code Playgroud)

如果你不使用cout,Stdout会有点困难.您可以在运行时使用重定向标准输出freopen(),但必须是文件.要使其重定向到调试屏幕有点困难.一种方法是使用fmemopen()它是否可用(它不是标准的)并写一个streambuf将这些数据输出到Debug屏幕.或者,您可以重定向到文件并编写流以作为输入打开并重定向到调试流.多一点工作,但我认为这是可能的.