Estoy utilizando microsoft visual studio para C++.
No veo std::err y std::en la salida de la consola del IDE.
Hay una manera de hacerlos ?

InformationsquelleAutor Arthur | 2010-04-21

3 Comentarios

  1. 19

    De hecho, puede redirigir std::y std::err. Simplemente haga clic derecho sobre el proyecto en el explorador de soluciones y seleccione Properties. A continuación, seleccione Configuration Properties -> Debugging y poner los argumentos adecuados en el Command Arguments campo. Por ejemplo, para redirigir std::err a un archivo, me gustaría escribir 2> ErrorLog.txt.

    Las cosas que usted escriba en Command Arguments simplemente obtener anexan como argumentos de línea de comandos cuando Visual Studio se ejecuta el programa, tal como se había introducido manualmente en la consola. Así, el ejemplo anterior se dice simplemente VisualStudio para ejecutar el programa con el comando <programName>.exe 2> ErrorLog.txt en lugar de sólo <programName>.exe.

    • Lo siento mi objetivo era redirigir el std::y std::err a la salida de la ventana de visual studio, no a un archivo. Gracias de todos modos
    • No hay problema. Pero, el título de la pregunta es tal que la gente que solo busca redirigir la salida podría terminar aquí, así que me imaginé que sería vale la pena publicar esta respuesta así.
    • Es >2 o 2>?
    • Debe ser de 2>filename.txt. Si entiendo las cosas correctamente, >2 redirigir stdout a un archivo llamado ‘2’ porque el valor predeterminado es redirigir stdout si no se especifica un archivo descriptor antes de la >. Consulte aquí para más información sobre IO de la redirección.
  2. 6

    Sé que este es un hilo viejo, pero no puedo dejar de dar la respuesta, ya me lo puedo creer, todavía no hay una respuesta real. Lo que puedes hacer es redirigir la cout a un ostringstream de su elección. Para ello, derivar una nueva clase de streambuf que enviará el flujo a OutputDebugString (vamos a llamar a esta clase de OutputDebugStream) y crear una instancia de la clase, myStream. Ahora la llamamos:

    cout.rdbuf(&myStream)

    He utilizado cout para un ejemplo. Esta misma técnica puede ser utilizada con cerr, simplemente llame a

    cerr.rdbuf(&myStream).  

    Stdout es un poco más difícil si usted no está utilizando cout. Puede redirigir stdout durante el tiempo de ejecución mediante el uso de freopen(), pero debe ser un archivo. Para conseguir que esto redirigirá a la pantalla de Depuración es un poco más difícil. Es una forma de utilizar fmemopen() si está disponible (no estándar) y escribir un streambuf a la salida de los datos a la pantalla de Depuración. Alternativamente, usted puede redirigir a un archivo y escribir una secuencia para abrir como entrada y redirigir a la depuración de secuencia. Un poco más de trabajo, pero creo que es posible.

  3. 0

    Yo utilice la siguiente macro para la salida en el visual studio consola

    #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

    Ahora, si tan sólo pudiera conseguir que funcione dentro de un kernel cuda?!

Dejar respuesta

Please enter your comment!
Please enter your name here