【问题标题】:Redirect stdout and stderr to the output debug console of microsoft visual studio将stdout和stderr重定向到microsoft visual studio的输出调试控制台
【发布时间】:2011-02-10 14:42:58
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 对不起,我的目标是将 std::out 和 std::err 重定向到 Visual Studio 的输出窗口,而不是文件。还是谢谢
    • @jules 没问题。但是,问题的标题是这样的,只是希望重定向输出的人也可能会在这里结束,所以我认为也值得发布这个答案。
    • @Brandon 是>2 还是2>
    • 应该是2>filename.txt。如果我理解正确,>2 会将 stdout 重定向到名为“2”的文件,因为如果您没有在 > 之前指定文件描述符,它默认会重定向 stdout。有关 IO 重定向的更多信息,请参阅here
    【解决方案2】:

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

    cout.rdbuf(&myStream)
    

    我以 cout 为例。 cerr 可以使用相同的技术,只需调用

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

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

    【讨论】:

      【解决方案3】:

      我使用以下宏输出到 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 内核中工作?!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-04-09
        • 1970-01-01
        • 2011-04-08
        • 2014-07-22
        • 1970-01-01
        • 2011-01-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多