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

问题描述 投票:0回答:3

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

visual-studio visual-c++ mfc
3个回答
18
投票

您确实可以重定向 std::out 和 std::err。只需在解决方案资源管理器中右键单击您的项目并选择

Properties
。然后选择
Configuration Properties -> Debugging
并将适当的参数放入
Command Arguments
字段中。例如,要将 std::err 重定向到文件,我会输入
2> ErrorLog.txt

当 Visual Studio 运行程序时,您输入的内容

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


7
投票

您可以做的是将 cout 重定向到您选择的 ostringstream。为此,请从 streambuf 派生一个新类,该类会将流发送到 OutputDebugString(我们将此类称为 OutputDebugStream)并创建该类的实例 myStream。现在打电话:

cout.rdbuf(&myStream)

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

cerr.rdbuf(&myStream).  
如果您不使用

coutStdout 会有点困难。您可以在运行时使用 freopen() 重定向

stdout
,但它必须重定向到文件。要使其重定向到调试屏幕有点困难。一种方法是使用
fmemopen()
(如果可用)(它不是标准的)并编写 streambuf 将此数据输出到调试屏幕。或者,您可以重定向到文件并写入流以作为输入打开并重定向到调试流。还需要一点工作,但我认为这是可能的。


0
投票

我使用以下宏输出到 Visual Studio 控制台

#ifdef _MSC_VER
#include <Windows.h>
#include <iostream>
#include <sstream>
#include <opencv/cxcore.h>

#define DBOUT( s )            \
{                             \
     std::wostringstream os_;    \
     os_ << s;                   \
     OutputDebugStringW( os_.str().c_str() );  \
}
#else
#define DBOUT( s )            \
{                             \
     std::cout << s;            \
}
#endif

现在我是否只能让它在 cuda 内核中工作?!

© www.soinside.com 2019 - 2024. All rights reserved.