代码之家  ›  专栏  ›  技术社区  ›  0x26res

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

  •  17
  • 0x26res  · 技术社区  · 15 年前

    我使用微软Visual Studio来做C++。 我在IDE的输出控制台中看不到std::err和std::out。 有没有办法改变他们的方向?

    3 回复  |  直到 7 年前
        1
  •  19
  •   Michael F    9 年前

    您确实可以重定向std::out和std::err。只需右键单击解决方案资源管理器中的项目并选择 Properties . 然后选择 Configuration Properties -> Debugging 把适当的论点放入 Command Arguments 字段。例如,要将std::err重定向到文件,我将键入 2> ErrorLog.txt .

    你输入的东西 命令参数 只需在Visual Studio运行程序时作为命令行参数附加,就像在控制台中手动键入它们一样。因此,上面的示例只告诉VisualStudio使用命令运行程序 <programName>.exe 2> ErrorLog.txt 而不仅仅是 <programName>.exe .

        2
  •  6
  •   user13500    11 年前

    我知道这是一条古老的线索,但我忍不住给出了答案,因为我不敢相信仍然没有真正的答案。您可以做的是重定向 咳嗽 到A 鸵鸟溪 由你选择。为此,从 溪流 将流发送到 输出调试 (我们叫这个班吧 输出调试流 )并创建类的实例, MySt流 . 现在呼叫:

    cout.rdbuf(&myStream)
    

    我用过 咳嗽 例如。同样的技术也可以用于 瑟尔 只要打个电话

    cerr.rdbuf(&myStream).  
    

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

        3
  •  0
  •   ejectamenta    7 年前

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