Есть приложение Win32/MSVC2005, пишет всё в std::cout, и иногда падает. При падении в консоль выводится далеко не всё. Можно как-то сделать, чтобы всё-все вывелось?
Да, вывод перенаправляется в файл, если выводить на консоль, выводится больше, но тоже не все
Пробовал вызывать .flush() — не помогло. Есть какие-нибудь варианты, кроме переделки всего с записью лога через виндовый WriteFile?
Здравствуйте, Marty, Вы писали:
M> Здравствуйте!
M>Есть приложение Win32/MSVC2005, пишет всё в std::cout, и иногда падает. При падении в консоль выводится далеко не всё. Можно как-то сделать, чтобы всё-все вывелось?
Пиши в std::cerr — он не буферизуется.
У сложных вещей обычно есть и хорошие, и плохие аспекты.
Берегите Родину, мать вашу. (ДДТ)
Re: std::cout - как сфлушить при падении приложения?
M>Да, вывод перенаправляется в файл, если выводить на консоль, выводится больше, но тоже не все M>Пробовал вызывать .flush() — не помогло. Есть какие-нибудь варианты, кроме переделки всего с записью лога через виндовый WriteFile?
А fflush(stdout) ?
Как много веселых ребят, и все делают велосипед...
Re: std::cout - как сфлушить при падении приложения?
Здравствуйте, Marty, Вы писали:
M> Здравствуйте!
M>Есть приложение Win32/MSVC2005, пишет всё в std::cout, и иногда падает. При падении в консоль выводится далеко не всё. Можно как-то сделать, чтобы всё-все вывелось?
В винде есть функция специальная которую можно переопределить и делать что-то перед тем как свалится в корку, гуглить в МСДН по MiniDump, SetUnhandledExceptionFilter, и статья на SO
Sic luceat lux!
Re[2]: std::cout - как сфлушить при падении приложения?
Здравствуйте, lpd, Вы писали:
M>>Есть приложение Win32/MSVC2005, пишет всё в std::cout, и иногда падает. При падении в консоль выводится далеко не всё. Можно как-то сделать, чтобы всё-все вывелось?
lpd>Пиши в std::cerr — он не буферизуется.
Пока разобрался с ошибкой. Но спс, если что, в следующий раз буду cerr пробовать
Здравствуйте, ononim, Вы писали:
M>>Да, вывод перенаправляется в файл, если выводить на консоль, выводится больше, но тоже не все M>>Пробовал вызывать .flush() — не помогло. Есть какие-нибудь варианты, кроме переделки всего с записью лога через виндовый WriteFile? O>А fflush(stdout) ?
Да это вроде разные потоки, и их надо с плюсовыми синхронизировать. Впрочем, с багой разобрался, уже не актуально
Здравствуйте, Kernan, Вы писали:
M>>Есть приложение Win32/MSVC2005, пишет всё в std::cout, и иногда падает. При падении в консоль выводится далеко не всё. Можно как-то сделать, чтобы всё-все вывелось? K>В винде есть функция специальная которую можно переопределить и делать что-то перед тем как свалится в корку, гуглить в МСДН по MiniDump, SetUnhandledExceptionFilter, и статья на SO
А, ну это SEH. Я в итоге с его помощью и разобрался
O>>А fflush(stdout) ? M>Да это вроде разные потоки, и их надо с плюсовыми синхронизировать. Впрочем, с багой разобрался, уже не актуально
Можно предположить что плюсовые выводят через сишные и надо флашить оба — вначале плюсовые, а потом сишные.
Еще можно через setvbuf(stdout, NULL, _IONBF, 0) отключить буферизацию stdout-а.
Как много веселых ребят, и все делают велосипед...
Здравствуйте, ononim, Вы писали:
O>>>А fflush(stdout) ? M>>Да это вроде разные потоки, и их надо с плюсовыми синхронизировать. Впрочем, с багой разобрался, уже не актуально O>Можно предположить что плюсовые выводят через сишные и надо флашить оба — вначале плюсовые, а потом сишные.