Стал замечать за собой такую особенность -- отладчиком пользуюсь всё реже и реже. Специально никакой "философии" вокруг этого не выстраивал, всё как-то само собой получилось.
Сейчас пишу в основном на C++, Python и JS, и вместо debugger'а прибегаю к отладочной печати в Release-сборке (ну, это если мы про C++, например, говорим).
Сейчас, когда задумался, вроде бы и плюсы нашёл:
Банально меньше проверять. Так мы должны протестировать Debug-сборку, а потом ещё и Release.
Нет необходимости привыкать к особенностям работы какого-то отладчика. Вывод в лог / stdout универсален, т.к. реализуется обычно средствами языка или его стандартной библиотеки.
Легче "отлаживать" многопоточные приложения. Во-первых, меньше вероятность изменить поведение программы из-за уменьшения "производительности" приложения в Debug-сборке (да, логгирование тоже может повлиять, но, как показывает практика, гораздо меньше, чем запущенный отладчик или бряки). Во-вторых, в логах явно будет прослеживаться параллельная работа потоков, легче отследить взаимосвязь и меньше контекста придётся запоминать самостоятельно.
???
Есть, конечно, у такого подхода и минусы. Если сходу, то на ум приходит:
Если надо часто узнавать контекст приложения в какие-то моменты времени (значения переменных, элементов коллекций и т.д.), то окно "Variables" в отладчике гораздо удобнее и быстрее реализуется. Да, если перегружать операторы вывода / преобразования к строке для каждого имеющегося объекта, то ещё ничего, но я так обычно не делаю.
Отладочную печать надо убирать из кода после проведения тестов. Следовательно, тратим лишнее время. Ну, или оставлять в коде, но отключать каким-то препроцессингом (например, макросами в случае C++), но тогда код может получиться неслабо так "засорённым".
На Debug-сборке могут проявиться какие-то баги, которые бы, возможно, не всплыли в случае Release.
???
А вы что думаете?