Название: Как QtCreator делает вывод в cout при запуске release сборки? Отправлено: Susenin от Апрель 18, 2015, 20:21 Здравствуйте!
GUI-приложение, Windows 7. В коде есть вывод данных в std::cout и std::cerr. При запуске приложения из QtCreator вывод идет в консоль самого QtCreator, как на картинке. Как Креатор это делает? И можно ли как-то при запуске приложения без Креатора открыть консоль, чтобы туда валился вывод этого приложения, предназначенный для стандартных потоков? Название: Re: Как QtCreator делает вывод в cout при запуске release сборки? Отправлено: kuzulis от Апрель 18, 2015, 21:16 Цитировать В коде есть вывод данных в std::cout и std::cerr. Где? Цитировать И можно ли как-то при запуске приложения без Креатора открыть консоль, чтобы туда валился вывод этого приложения, предназначенный для стандартных потоков? Собрать GUI приложение с соответствующим флагом (например CONFIG += console для qmake). Тогда при запуске GUI приложения будет автоматом запускаться консоль куда и будут выводиться логи. Но лучше логи выводить через QDebug и иже с ними (для Qt5 есть даже "logging framework"). В этом случае их можно посмотреть через утилиту DebugView (https://technet.microsoft.com/en-us/library/bb896647.aspx). Но это все актуально для Windows. Название: Re: Как QtCreator делает вывод в cout при запуске release сборки? Отправлено: Susenin от Апрель 19, 2015, 02:08 Цитировать В коде есть вывод данных в std::cout и std::cerr. Где?В моем коде Код
Цитировать И можно ли как-то при запуске приложения без Креатора открыть консоль, чтобы туда валился вывод этого приложения, предназначенный для стандартных потоков? Собрать GUI приложение с соответствующим флагом (например CONFIG += console для qmake). Тогда при запуске GUI приложения будет автоматом запускаться консоль куда и будут выводиться логи.туда выводится все, что должно выводится в std::cout и std::cerr. У Креаторе же это получается? Как? Но лучше логи выводить через QDebug и иже с ними (для Qt5 есть даже "logging framework"). В этом случае их можно посмотреть через утилиту DebugView (https://technet.microsoft.com/en-us/library/bb896647.aspx). Но это все актуально для Windows. Спасибо.Кое-чего получилось. 1 вариант. Выполняем такой код, когда нужно вызвать консоль(это WinAPI функции): Код Ссылки по теме: https://support.microsoft.com/ru-ru/kb/58667 https://bobobobo.wordpress.com/2009/03/01/how-to-attach-a-console-to-your-gui-app-in-c/ 2 вариант Отладочную информацию передаем в функцию OutputDebugString (тоже WinAPI). И смотрим программой DebugView (https://technet.microsoft.com/en-us/sysinternals/bb896647) Остается вопрос - как QtCreator перенаправляет потоки вывода себе в Application Output, когда приложение запускается из него? Название: Re: Как QtCreator делает вывод в cout при запуске release сборки? Отправлено: kuzulis от Апрель 19, 2015, 13:30 Цитировать У Креаторе же это получается? Как? Остается вопрос - как QtCreator перенаправляет потоки вывода себе в Application Output, когда приложение запускается из него? Что мешает посмотреть его сорцы? Скорее всего через QProcess и читает его выхлоп. Цитировать 1 вариант. 2 вариант Не нужно никаких заморочек с переопределением MessageHandler и прочее, ИМХО. Достаточно использовать только qDebug/Warning/Critical или аналогичные из Logging Framework. Они уже внутри вызывают OutputDebugString и прочее (я про Qt5). Название: Re: Как QtCreator делает вывод в cout при запуске release сборки? Отправлено: qate от Апрель 20, 2015, 13:31 в qt4 было удобнее - если запуск из консоли - есть вывод в консоль, если мышой - нет вывода
в qt5 сделали иначе (как на разобрался), приходится прибивать консоль (некрасиво, но мне нужен вывод в консоль без окна консоли) |