Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Отладочный вывод VS


Автор: Jeka178RUS 23.9.2013, 15:37
Добрый день!

Я был вынужден пересесть с QtCreator на MS Visual Studio и у меня возник глупый вопрос, на который я не смог найти простой вопрос:

В Qt creator есть панель "Вывод приложения" куда сыпется весь текстовый вывод через std::cout или кутишные методы qdebug/qwarning и т.д.
В VS есть панель "Output" однако никакого вывода std::cout я там не обнаружил (приложение конечно же оконное, в моем случае DirectX)

Неужели такая банальная вещь печать как печать cout в панельку вывода это Qt плюшка? Как обрести радость простого вывода в студии?

Автор: Amp 23.9.2013, 18:02
OutputDebugString например.

Автор: Jeka178RUS 24.9.2013, 11:40
Ну хоть что-то. Правда выводить этой функцией что-то сложнее чем "Hello World" довольно неудобно ((

Автор: Earnest 25.9.2013, 10:48
Действительно, использовать непосредственно OutputDebugString неудобно.
Но в чем проблема? В MFC есть макрос TRACE для форматированного вывода. Если MFC не используешь, надо написать свой, элементарно же. 

Автор: borisbn 25.9.2013, 12:58
Цитата(Earnest @  25.9.2013,  10:48 Найти цитируемый пост)
надо написать свой, элементарно же.  

Вот. Когда-то сделал себе наподобие Qt-шного qDebug'а
Код

class DebugOut
{
public:

enum
{
    UseSpace        = 0x01,
    UseCR           = 0x02,
    UseCharQuotes   = 0x04,
    UseStringQuotes = 0x08,
    UseBoolText     = 0x10,
};

    DebugOut( const char * const channel = 0, unsigned int options = ( UseSpace | UseCR | UseBoolText ) )
        : m_stream( std::ios_base::out )
    {
        fillStr( m_space,        options, UseSpace,        ' ' );
        fillStr( m_CR,           options, UseCR,           '\n' );
        fillStr( m_charQuotes,   options, UseCharQuotes,   '\'' );
        fillStr( m_stringQuotes, options, UseStringQuotes, '\"' );
        m_useBoolText = ( options & UseBoolText ) ? true : false;
        if ( channel )
        {
            m_channel = std::string( "<" ) + channel + std::string( ">" );
        }
    }
    ~DebugOut()
    {
        std::string str = m_channel + m_stream.str() + m_CR;
        OutputDebugStringA( str.c_str() );
    }
    template < typename T >
    inline DebugOut & operator << ( T t ) { m_stream << t << m_space; return *this; }
    inline DebugOut & operator << ( char c ) { m_stream << m_charQuotes << c << m_charQuotes << m_space; return *this; }
    inline DebugOut & operator << ( const char * s ) { m_stream << m_stringQuotes << s << m_stringQuotes << m_space; return *this; }
    inline DebugOut & operator << ( const std::string s ) { return operator << ( s.c_str() ); }
    inline DebugOut & operator << ( bool b )
    {
        if ( m_useBoolText ) m_stream << ( b ? "true" : "false" ) << m_space;
        else                 m_stream << int( b ) << m_space;
        return *this;
    }
    
protected:
    std::stringstream m_stream;
    std::string m_channel;
    char m_charQuotes[ 2 ];
    char m_stringQuotes[ 2 ];
    char m_space[ 2 ];
    char m_CR[ 2 ];
    bool m_useBoolText;
    
    inline void fillStr( char * str, int options, int flag, char ch ) { str[ 0 ] = str[ 1 ] = 0; if ( options & flag ) str[ 0 ] = ch; }
};

Автор: Jeka178RUS 25.9.2013, 14:20
Спасибо!
Заморачиваться и писать что-то для банальной печати текста, это конечно жутко грустно :(

Интересное наблюдение, если в креаторе создать проект без использования Qt аналогичный проекту VS то cout все равно замечательно работает

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)