Перенаправить 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?!