Я создал консольное приложение C++ и просто хочу захватить инструкции cout/cerr в окне вывода в среде Visual Studio 2005 IDE. Я уверен, что это всего лишь параметр, который мне не хватает. Может кто-то указать мне верное направление?Захват cout в окне вывода Visual Studio 2005?
ответ
Вы не можете этого сделать.
Если вы хотите выводить в окно вывода отладчика, вызовите OutputDebugString.
Я нашел this implementation «teestream», который позволяет одному выходу перейти к нескольким потокам. Вы можете реализовать поток, который отправляет данные в OutputDebugString.
Это случай экрана выхода, который просто мигает, а затем исчезает? если это так, вы можете оставить его открытым, используя cin в качестве последнего заявления перед возвратом.
Нет, вы не можете, потому что оценка cin сама по себе не имеет никакого эффекта. – ben 2008-09-16 21:20:08
Вы можете захватывать вывод соиЬ, как это, например:
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 его в окне вывода Visual Studio 2005 остается в качестве упражнения для визуального разработчика плагина Studio 2005 с. Но вы, вероятно, можете перенаправить его в другом месте, например, в файл или пользовательское окно, возможно, написав собственный класс streambuf (см. Также boost.iostream).
Плагин не нужен, просто используйте OutputDebugString, как упоминал Майк Диммик. – jwfearn 2008-09-26 13:58:47
Комбинация ответа ben и Майка Диммика: вы будете использовать stream_buf_, который в конечном итоге вызовет OutputDebugString. Может, кто-то уже это сделал? Взгляните на две предложенные библиотеки журналов Boost.
это выглядит так: http://www.codeproject.com/KB/debug/debugout.aspx – wimh 2011-03-09 22:17:59
Кроме того, в зависимости от ваших намерений, и какие библиотеки вы используете, вы можете использовать TRACE macro (MFC) или ATLTRACE (ATL).
Я наконец-то реализовать это, поэтому я хочу поделиться с вами:
#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
}
БОНУС TIP: Если вы пишете:
X:\full\file\name.txt(10) : message
в окне вывода, а затем дважды -нажмите на него, затем Visual Studio перейдет к заданному файлу, строка 10 и отобразит «сообщение» в строке состояния. Это очень полезно.
Это работает очень хорошо для меня, но с VS2013 и Boost 1.57 он выходит из строя с ошибкой утверждения в коде Boost как вскоре, когда поток покраснеть, либо распечатав много, либо посылая `std :: endl` в поток, поэтому он больше не может использоваться :-(Не уверен, что это ошибка в Boost или что. – Malvineous 2015-01-18 23:38:19
- 1. Смешные символы в окне вывода Visual Studio
- 2. Сообщение Strange Visual Studio в окне вывода
- 3. печати на консоль в Visual Studio 2005
- 4. Ширина вывода PowerShell в окне вывода Visual Studio
- 5. Ничего не отображается в окне вывода (Visual Studio 2008)
- 6. Visual Studio 2003 vs. Visual Studio 2005
- 7. Visual Studio 2005 создает каталоги вывода в нижнем регистре
- 8. Ошибка LNK 2005 в Visual Studio 2005
- 9. SSRS отчет 2005 в Visual Studio 2005
- 10. Visual Studio 2005 Software
- 11. Visual Studio 2005 + AjaxToolkit
- 12. Visual studio 2005 autocomplete
- 13. Visual Studio 2005 Ошибка
- 14. Visual Studio 2005 Ярлыки
- 15. Visual Studio 2013: перенаправление вывода консоли в окно вывода Visual Studio
- 16. OpenMP в Visual Studio 2005
- 17. Может ли вывод OutputDebugString выводиться в окне вывода Visual Studio?
- 18. Как установить размер вкладки в окне вывода Visual Studio 2010?
- 19. Локализованный выход xUnit.net в окне вывода Visual Studio
- 20. Как распечатать в окне вывода отладки в приложении Win32?
- 21. Visual Studio (VC++ 2005) Отладочная память
- 22. Visual Studio 2013 Отображение вывода
- 23. Захват и форматирование cout
- 24. Открытый проект Visual Studio 2008 в Visual Studio 2005
- 25. Проблема с Visual Studio 2005
- 26. Visual Studio 2005 Ошибка ссылка
- 27. visual studio 2005 компилировать сайт
- 28. Visual Studio 2005 Build Order
- 29. Visual Studio 2005 Не загружается
- 30. CaptureStackBackTrace на Visual Studio 2005
-1, неправильный. См. Ответ Бена. – MSalters 2010-08-20 07:27:35