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

时间:2010-04-21 13:24:15

标签: visual-studio visual-c++ mfc

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

3 个答案:

答案 0 :(得分:19)

你确实可以重定向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来运行您的程序。

答案 1 :(得分:6)

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

cout.rdbuf(&myStream)

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

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

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

答案 2 :(得分: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内核中运行它?!