Я видел сообщения о том, что может вызвать различия между сборками Debug и Release, но я не думаю, что кто-то обратился с точки зрения разработки, что является наиболее эффективным способом решения проблемы.
Первое, что я делаю, когда ошибка появляется в сборке Release, но не в Debug, я запускаю свою программу через valgrind в надежде на лучший анализ. Если это ничего не показывает, - и это случилось со мной раньше, - тогда я пробую различные материалы в надежде получить ошибку и на поверхности также в сборке Debug. Если это не удастся, я попытаюсь отслеживать изменения, чтобы найти самую последнюю версию, для которой две сборки расходятся в поведении. И, наконец, я предполагаю, что я прибегаю к заявлениям печати.
Существуют ли лучшие методы разработки программного обеспечения для эффективной отладки, когда отличия от сборки Debug и Release отличаются? Кроме того, какие инструменты существуют на более фундаментальном уровне, чем valgrind, чтобы помочь отладить эти случаи?
EDIT: я замечаю много ответов, предлагающих некоторые общие хорошие практики, такие как модульное тестирование и регрессионное тестирование, что я согласен, отлично подходит для поиска любой ошибки. Однако есть ли что-то, специально адаптированное к этой проблеме Release and Debug? Например, существует ли такая вещь, как инструмент статического анализа, который гласит: "Эй, этот макрос или этот код или эта практика программирования опасна, потому что она может вызвать различия между вашими сборками Debug/Release?"