Перенаправить stdout и stderr на выходную консоль отладки Microsoft Visual Studio

Я использую Microsoft Visual Studio для создания С++. Я не вижу std:: err и std:: out в выходной консоли среды IDE. Есть ли способ перенаправить их?

Ответы

Ответ 1

Вы действительно можете перенаправить std:: out и std:: err. Просто щелкните правой кнопкой мыши по проекту в проводнике решений и выберите Properties. Затем выберите Configuration Properties -> Debugging и поместите соответствующие аргументы в поле Command Arguments. Например, чтобы перенаправить std:: err в файл, я бы набрал 2> ErrorLog.txt.

То, что вы вводите в Command Arguments, просто добавляется в качестве аргументов командной строки, когда Visual Studio запускает вашу программу, точно так же, как вы вручную ввели их в консоль. Итак, приведенный выше пример просто говорит VisualStudio запускать вашу программу с помощью команды <programName>.exe 2> ErrorLog.txt вместо <programName>.exe.

Ответ 2

Я знаю, что это старый поток, но я не могу не дать ответ, так как не могу поверить, что ответа на этот вопрос пока нет. То, что вы можете сделать, - перенаправить cout на собственный заголовок. Для этого выведите новый класс из streambuf, который отправит поток в OutputDebugString (Позволяет вызвать этот класс OutputDebugStream) и создаст экземпляр класса myStream. Теперь звоните:

cout.rdbuf(&myStream)

Я использовал cout для примера. Этот же метод можно использовать с cerr, просто позвоните

cerr.rdbuf(&myStream).  

Stdout немного сложнее, если вы не используете cout. Вы можете перенаправить stdout во время выполнения с помощью freopen(), но это должно быть файл. Сделать это перенаправить на экран Debug немного сложнее. Один из способов - использовать fmemopen(), если он доступен (он не является стандартным) и написать streambuf для вывода этих данных на экран Debug. Кроме того, вы можете перенаправить на файл и написать поток, который будет открыт в качестве входных данных и перенаправлен на поток отладки. Немного больше работы, но я думаю, что это возможно.

Ответ 3

Я использую следующий макрос для вывода на консоль визуальной студии

#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?!