【发布时间】:2011-02-10 14:42:58
【问题描述】:
我正在使用 microsoft visual studio 做 C++。 我在 IDE 的输出控制台中看不到 std::err 和 std::out 。 有没有办法重定向它们?
【问题讨论】:
标签: visual-studio visual-c++ mfc
我正在使用 microsoft visual studio 做 C++。 我在 IDE 的输出控制台中看不到 std::err 和 std::out 。 有没有办法重定向它们?
【问题讨论】:
标签: visual-studio visual-c++ mfc
您确实可以重定向 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 来运行您的程序。
【讨论】:
>2 还是2>?
我知道这是一个旧线程,但我不禁给出答案,因为我不敢相信仍然没有真正的答案。您可以做的是将 cout 重定向到您选择的 ostringstream。为此,从 streambuf 派生一个新类,将流发送到 OutputDebugString(让我们调用这个类 OutputDebugStream)并创建一个类,myStream。现在调用:
cout.rdbuf(&myStream)
我以 cout 为例。 cerr 可以使用相同的技术,只需调用
cerr.rdbuf(&myStream).
如果您不使用 cout,Stdout 会稍微困难一些。您可以在运行时使用freopen() 重定向stdout,但它必须是一个文件。要让它重定向到调试屏幕有点困难。一种方法是使用fmemopen()(如果可用)(它不是标准的)并编写一个 streambuf 以将此数据输出到调试屏幕。或者,您可以重定向到一个文件并编写一个流以作为输入打开并重定向到调试流。多一点工作,但我认为这是可能的。
【讨论】:
我使用以下宏输出到 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 内核中工作?!
【讨论】: