Отладочный вывод VS

 
0
 
C++
ava
Jeka178RUS | 23.09.2013, 16:37
Добрый день!

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

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

Неужели такая банальная вещь печать как печать cout в панельку вывода это Qt плюшка? Как обрести радость простого вывода в студии?
Comments (5)
ava
Amp | 23.09.2013, 18:02 #
OutputDebugString например.
ava
Jeka178RUS | 24.09.2013, 11:40 #
Ну хоть что-то. Правда выводить этой функцией что-то сложнее чем "Hello World" довольно неудобно ((
ava
Earnest | 25.09.2013, 10:48 #
Действительно, использовать непосредственно OutputDebugString неудобно.
Но в чем проблема? В MFC есть макрос TRACE для форматированного вывода. Если MFC не используешь, надо написать свой, элементарно же. 
ava
borisbn | 25.09.2013, 12:58 #
Цитата (Earnest @  25.9.2013,  10:48 findReferencedText)
надо написать свой, элементарно же.  

Вот. Когда-то сделал себе наподобие 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; }
};
ava
Jeka178RUS | 25.09.2013, 14:20 #
Спасибо!
Заморачиваться и писать что-то для банальной печати текста, это конечно жутко грустно :(

Интересное наблюдение, если в креаторе создать проект без использования Qt аналогичный проекту VS то cout все равно замечательно работает
Please register or login to write.
Firm of day
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Contributors
advanced
Submit