std::cout - как сфлушить при падении приложения?
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 02.02.18 18:51
Оценка:
Здравствуйте!

Есть приложение Win32/MSVC2005, пишет всё в std::cout, и иногда падает. При падении в консоль выводится далеко не всё. Можно как-то сделать, чтобы всё-все вывелось?

Да, вывод перенаправляется в файл, если выводить на консоль, выводится больше, но тоже не все

Пробовал вызывать .flush() — не помогло. Есть какие-нибудь варианты, кроме переделки всего с записью лога через виндовый WriteFile?
Маньяк Робокряк колесит по городу
Re: std::cout - как сфлушить при падении приложения?
От: lpd Черногория  
Дата: 02.02.18 19:00
Оценка: 8 (2) +1
Здравствуйте, Marty, Вы писали:

M> Здравствуйте!


M>Есть приложение Win32/MSVC2005, пишет всё в std::cout, и иногда падает. При падении в консоль выводится далеко не всё. Можно как-то сделать, чтобы всё-все вывелось?


Пиши в std::cerr — он не буферизуется.
У сложных вещей обычно есть и хорошие, и плохие аспекты.
Берегите Родину, мать вашу. (ДДТ)
Re: std::cout - как сфлушить при падении приложения?
От: ononim  
Дата: 05.02.18 10:24
Оценка:
M>Да, вывод перенаправляется в файл, если выводить на консоль, выводится больше, но тоже не все
M>Пробовал вызывать .flush() — не помогло. Есть какие-нибудь варианты, кроме переделки всего с записью лога через виндовый WriteFile?
А fflush(stdout) ?
Как много веселых ребят, и все делают велосипед...
Re: std::cout - как сфлушить при падении приложения?
От: Kernan Ниоткуда https://rsdn.ru/forum/flame.politics/
Дата: 05.02.18 13:09
Оценка: +2
Здравствуйте, Marty, Вы писали:

M> Здравствуйте!


M>Есть приложение Win32/MSVC2005, пишет всё в std::cout, и иногда падает. При падении в консоль выводится далеко не всё. Можно как-то сделать, чтобы всё-все вывелось?

В винде есть функция специальная которую можно переопределить и делать что-то перед тем как свалится в корку, гуглить в МСДН по MiniDump, SetUnhandledExceptionFilter, и статья на SO
Sic luceat lux!
Re[2]: std::cout - как сфлушить при падении приложения?
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 05.02.18 16:31
Оценка:
Здравствуйте, lpd, Вы писали:

M>>Есть приложение Win32/MSVC2005, пишет всё в std::cout, и иногда падает. При падении в консоль выводится далеко не всё. Можно как-то сделать, чтобы всё-все вывелось?


lpd>Пиши в std::cerr — он не буферизуется.


Пока разобрался с ошибкой. Но спс, если что, в следующий раз буду cerr пробовать
Маньяк Робокряк колесит по городу
Re[2]: std::cout - как сфлушить при падении приложения?
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 05.02.18 16:32
Оценка:
Здравствуйте, ononim, Вы писали:

M>>Да, вывод перенаправляется в файл, если выводить на консоль, выводится больше, но тоже не все

M>>Пробовал вызывать .flush() — не помогло. Есть какие-нибудь варианты, кроме переделки всего с записью лога через виндовый WriteFile?
O>А fflush(stdout) ?

Да это вроде разные потоки, и их надо с плюсовыми синхронизировать. Впрочем, с багой разобрался, уже не актуально
Маньяк Робокряк колесит по городу
Re[2]: std::cout - как сфлушить при падении приложения?
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 05.02.18 16:33
Оценка:
Здравствуйте, Kernan, Вы писали:

M>>Есть приложение Win32/MSVC2005, пишет всё в std::cout, и иногда падает. При падении в консоль выводится далеко не всё. Можно как-то сделать, чтобы всё-все вывелось?

K>В винде есть функция специальная которую можно переопределить и делать что-то перед тем как свалится в корку, гуглить в МСДН по MiniDump, SetUnhandledExceptionFilter, и статья на SO


А, ну это SEH. Я в итоге с его помощью и разобрался
Маньяк Робокряк колесит по городу
Re[3]: std::cout - как сфлушить при падении приложения?
От: ononim  
Дата: 05.02.18 19:27
Оценка:
O>>А fflush(stdout) ?
M>Да это вроде разные потоки, и их надо с плюсовыми синхронизировать. Впрочем, с багой разобрался, уже не актуально
Можно предположить что плюсовые выводят через сишные и надо флашить оба — вначале плюсовые, а потом сишные.

Еще можно через setvbuf(stdout, NULL, _IONBF, 0) отключить буферизацию stdout-а.
Как много веселых ребят, и все делают велосипед...
Отредактировано 05.02.2018 19:29 ononim . Предыдущая версия .
Re[4]: std::cout - как сфлушить при падении приложения?
От: andrey.desman  
Дата: 05.02.18 19:36
Оценка: 3 (1) +1
Здравствуйте, ononim, Вы писали:

O>>>А fflush(stdout) ?

M>>Да это вроде разные потоки, и их надо с плюсовыми синхронизировать. Впрочем, с багой разобрался, уже не актуально
O>Можно предположить что плюсовые выводят через сишные и надо флашить оба — вначале плюсовые, а потом сишные.

http://en.cppreference.com/w/cpp/io/ios_base/sync_with_stdio
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.