Creé una aplicación de consola C++ y solo quiero capturar las instrucciones cout/cerr en la Ventana de salida dentro del IDE de Visual Studio 2005. Estoy seguro de que esto es solo un ajuste que me estoy perdiendo. ¿Alguien puede señalarme en la dirección correcta?Capturando cout en la ventana de resultados de Visual Studio 2005?
Respuesta
No puede hacer esto.
Si desea realizar una salida a la ventana de salida del depurador, llame a OutputDebugString.
Encontré this implementation de un 'teestream' que permite que una salida vaya a varias transmisiones. Podría implementar una secuencia que envíe datos a OutputDebugString.
¿Es este un caso de la pantalla de salida simplemente parpadeando y luego desapareciendo? de ser así, puede mantenerlo abierto utilizando cin como su última declaración antes de regresar.
No, no se puede porque la evaluación de cin por sí sola no tiene ningún efecto. – ben
Puede capturar la salida del cout de este tipo, por ejemplo:
std::streambuf* old_rdbuf = std::cout.rdbuf();
std::stringbuf new_rdbuf;
// replace default output buffer with string buffer
std::cout.rdbuf(&new_rdbuf);
// write to new buffer, make sure to flush at the end
std::cout << "hello, world" << std::endl;
std::string s(new_rdbuf.str());
// restore the default buffer before destroying the new one
std::cout.rdbuf(old_rdbuf);
// show that the data actually went somewhere
std::cout << s.size() << ": " << s;
Magicking en la ventana de resultados de Visual Studio 2005 se deja como ejercicio para un estudio desarrollador de Visual 2005 plugin. Pero probablemente puedas redirigirlo a otro lugar, como un archivo o una ventana personalizada, tal vez escribiendo una clase streambuf personalizada (ver también boost.iostream).
No se necesita ningún complemento, solo use OutputDebugString como menciona Mike Dimmick. – jwfearn
Una combinación de la respuesta de Ben y la de Mike Dimmick: implementaría un stream_buf_ que termina llamando a OutputDebugString. ¿Tal vez alguien ya ha hecho esto? Eche un vistazo a las dos bibliotecas de registro de Boost propuestas.
esto se ve así: http://www.codeproject.com/KB/debug/debugout.aspx – wimh
También, dependiendo de sus intenciones, y lo que las bibliotecas que está utilizando, es posible que desee utilizar el TRACE macro (MFC) o ATLTRACE (ATL).
he implementado finalmente esto, así que quiero compartirlo con ustedes:
#include <vector>
#include <iostream>
#include <windows.h>
#include <boost/iostreams/stream.hpp>
#include <boost/iostreams/tee.hpp>
using namespace std;
namespace io = boost::iostreams;
struct DebugSink
{
typedef char char_type;
typedef io::sink_tag category;
std::vector<char> _vec;
std::streamsize write(const char *s, std::streamsize n)
{
_vec.assign(s, s+n);
_vec.push_back(0); // we must null-terminate for WINAPI
OutputDebugStringA(&_vec[0]);
return n;
}
};
int main()
{
typedef io::tee_device<DebugSink, std::streambuf> TeeDevice;
TeeDevice device(DebugSink(), *cout.rdbuf());
io::stream_buffer<TeeDevice> buf(device);
cout.rdbuf(&buf);
cout << "hello world!\n";
cout.flush(); // you may need to flush in some circumstances
}
BONUS TIP: Si se escribe:
X:\full\file\name.txt(10) : message
a la ventana de salida y haga doble -Haga clic en él, luego Visual Studio saltará al archivo dado, línea 10, y mostrará el 'mensaje' en la barra de estado. Es muy útil.
Esto ha funcionado muy bien para mí, pero con VS2013 y Boost 1.57 se bloquea con una falla de aserción en el código de Boost como En cuanto la secuencia se vacíe, ya sea imprimiendo mucho o enviando 'std :: endl' a la transmisión, ya no se puede usar :-(No estoy seguro si es un error en Boost o qué. – Malvineous
- 1. Agilice la compilación en Visual Studio 2005
- 2. Error de LNK 2005 en Visual Studio 2005
- 3. Visual Studio 2005 Accesos directos
- 4. Uso de memoria de Visual Studio 2005
- 5. capturando dis.dis resultados
- 6. Visual Studio 2005 - 'Actualización de IntelliSense' cuelgue
- 7. Visual Studio ventana de comandos
- 8. ¿Cambiar icono de la aplicación en Visual Studio 2005?
- 9. ¿Integración Mercurial en Visual Studio 2005?
- 10. Redirigir la salida (stdout, stderr) de un proceso hijo a la ventana Resultados de Visual Studio
- 11. Configurando F # en Visual Studio 2005
- 12. LNK 2005 en Visual C++ en Visual Studio 2010
- 13. invocando funciones durante la depuración con Visual Studio 2005?
- 14. Ventana de edición dividida en Visual Studio
- 15. redirección Console.Write ... Métodos para ventana de resultados de Visual Studio durante la depuración
- 16. ¿Cómo degradar la solución de Visual Studio 2010 a Visual Studio 2005?
- 17. Elaboración de perfiles de código en Visual Studio 2005
- 18. Visual Studio (2005 y 2008) ¿Completó la alerta de compilación?
- 19. Visual Studio 2005. Archivo RC incluye
- 20. ¿Dónde está Visual Studio 2005 Express?
- 21. ¿Vale la pena cambiar de Visual Studio 2005 a Visual Studio 2008?
- 22. ¿Dónde descargar visual studio express 2005?
- 23. ¿Crear instalador de programa en Visual Studio 2005?
- 24. Visual Studio 2010 Express. Escribir en la ventana de salida
- 25. Valor devuelto en la ventana Autos de Visual Studio
- 26. ¿Aplansar miembros heredados en la ventana Inspección de Visual Studio?
- 27. Ancho de la salida de PowerShell en la ventana de salida de Visual Studio
- 28. guardar datos de la ventana de memoria de Visual Studio
- 29. Ventana Comando vs. Inmediato en Visual Studio
- 30. Visual Studio 2008: ¿Vale la pena actualizar desde 2005?
-1, mal. Vea la respuesta de Ben. – MSalters