Полная программа не моя, я использую её как библиотеку shared .dll (если это важно). Проект в Visual Studio, в режиме сборки Debug вывод std::cout в этой библиотеке работает как положено, в консоль выводит текст. А в режиме сборки Release не выводит ничего, никакого текста. Помогите разобраться? Посмотрел настройки компилятора и линкера - не нашёл ничего особенного.
В режиме Debug выводится и 1 и 2, а в режиме Release, только 1. Причём я сделал тестовое консольное приложение в Visual Studio 2022 и в нём выводится 1 и 2 и в режиме Debug и в режиме Release.
Сейчас перевожу свои сообщения на printf и это меня вполне устраивает, т.к. сообщения клиенту всё равно формируются в exception-ах. Консольные сообщения больше нужны для "визуального" анализа в процессе работы, не хотелось париться в форматированием в printf.
Alex XYZ, Действительно - не легче.
Если никаких #if нет, то этот участок кода должен отрабатывать и cout должен выводить текст.
Можно в конце сделать flush для stdout.
Запускаете программу через IDE? Попробуйте просто в отдельной консоли ее стартовать без IDE, будет какой-нибудь эффект от этого?
Разность в поведении между сборками может быть обусловлена двумя причинами:
1) в коде есть ifdef и часть функциональности просто отключена в релизной сборке. Довольно часто так намеренно отключают отладочный вывод.
2) В коде есть ошибка, какое-то undefined behavior и при оптимизации в релизной сборке часть кода вырезается компилятором.
Какой-то другой причины чтобы cout не работал в релизной сборке я не вижу.
printf вы наверное сами куда-то добавили. Если заменить в коде библиотеки отсутствующий cout на printf оно так же работает? Или у вас нет доступа к коду?
Wataru,
Спасибо за подсказку, не знал такого способа, но ничего подобного не нашёл. Есть ли ещё способ как-то переключить вывод? (Я понял прикол, попробую ещё что-то поискать).