Перенаправить stdout и stderr на консоль отладки вывода Microsoft Visual Studio - PullRequest
17 голосов
/ 21 апреля 2010

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

Ответы [ 3 ]

19 голосов
/ 06 августа 2011

Вы действительно можете перенаправить 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.

6 голосов
/ 20 марта 2014

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

cout.rdbuf(&myStream)

Я использовал cout в качестве примера. Эту же технику можно использовать с cerr , просто позвоните

cerr.rdbuf(&myStream).  

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

0 голосов
/ 14 сентября 2017

Я использую следующий макрос для вывода на консоль 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?!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...