Подтвердить что ты не робот

Visual Studio - Как я могу видеть вывод cout в неконсольном приложении?

Кажется довольно утомительным вывод в окно отладки. Где я могу найти вывод cout, если я пишу не-консольную информацию?

Вроде:

double i = a / b;
cout << b << endl;//I want to check out whether b is zero. It seems the output cannot be found anywhere.
4b9b3361

Ответ 1

Чтобы вывести строку на консоль отладки, используйте OutputDebugStringA. См. http://msdn.microsoft.com/en-us/library/windows/desktop/aa363362%28v=vs.85%29.aspx

Чтобы вывести значения переменных в консоль отладки, используя std::ostringstream, отправьте строку в OutputDebugStringA.

Чрезмерные операторы вывода заставят программу сильно замедлить работу. Тем не менее, это хорошая техника, чтобы поймать вещи, с которыми имеет проблемы отладчик, такие как фактические дочерние элементы при игре с базовыми указателями.

Ответ 2

Вопрос очень ясен. Как использовать std:: cout для отладки не консольного приложения в Visual Studio.

Ответ очень ясен: вы не можете. То есть Visual Studio не поддерживает std:: cout в качестве инструмента отладки для неконсольных приложений.

Это серьезное ограничение для Visual Studio, возможно, даже не соответствует стандарту С++. Мне очень грустно видеть дезинформативные "ответы" здесь, пытаясь скрыть этот недостаток их драгоценной Visual Studio.

Ответ 4

Вместо использования cout создайте файл журнала и напишите в нем что угодно.

Изменить: Используйте этот простой код для записи в файл журнала.

ofstream log;
log.open ("log.txt");
log << "Writing this to a file.\n";
log.close();

Ответ 5

Этот ответ решает вопрос и позволяет перенаправить вывод консоли в окно вывода Visual Studio. Сначала нам нужен класс, который переопределяет поток строк cout по умолчанию:

class dbg_stream_for_cout
    : public std::stringbuf
{
public:
    ~dbg_stream_for_cout() { sync(); }
    int sync()
    {
        ::OutputDebugStringA(str().c_str());
        str(std::string()); // Clear the string buffer
        return 0;
    }
};
dbg_stream_for_cout g_DebugStreamFor_cout;

Затем где-то вы хотите "активировать" запись в окно вывода VS:

std::cout.rdbuf(&g_DebugStreamFor_cout); // Redirect std::cout to OutputDebugString!

Ответ 6

Просто используйте std:: cin.get() в конце вашего кода, например:

std::cout << "print this" << std::endl;
std::cin.get();

Это заставляет программу оставаться открытой и ждать ввода пользователя.

Работает для меня в любом случае. Кредит отправляется в TheChernoProject: https://www.youtube.com/channel/UCQ-W1KE9EYfdxhL6S4twUNw

Ответ 7

Я бы хотел дать 2 цента.

Учитывая, что, возможно, это проблема VS о совместимости со стандартом С++ или что мы можем использовать OutputDebugStringA, если вы не можете изменить свою базу кода, вам может понравиться идея просто перенаправить std:: cout на что-то другое, как файл.

Итак, без изменения базы кода вы можете сделать что-то вроде предложенного здесь: Как перенаправить cin и cout в файлы?

Сгущенное:

  • добавить include #include <fstream>
  • в начале вашего приложения в некоторых init перед регистрацией вы можете использовать:
std::ofstream out("out.txt");
std::streambuf *coutbuf = std::cout.rdbuf(); //save old buf
std::cout.rdbuf(out.rdbuf()); //redirect std::cout to out.txt!
  • в конце вашего приложения/регистрации:

станд:: cout.rdbuf(coutbuf);// reset для стандартного вывода снова

Надеюсь, это поможет кому-то, Kudos to Nawaz, который предоставил ответ в другом потоке.