我正在使用microsoft visual studio来做C ++。 我没有在IDE的输出控制台中看到std :: err和std :: out。 有没有办法重定向它们?
答案 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内核中运行它?!