Я тоже считаю, что деление на отладочную и релизную версию нежелательно. Но с другой стороны, ситуацию можно представить так, что есть разрыв между тем в каких терминах думает программист и тем, как программа реально исполняется на компьютере. Программист, как мне кажется, больше думает в терминах кода и строк кода, а оптимизированный код может перемешивать части этих строк кода и выполнять их в другом порядке и по частям. Если отлаживать оптимизированную программу, то программист может быть нагружен ненужными для него деталями того, как программа реально исполняется (это, конечно, тоже может быть необходимо, если, допустим, есть ошибка в оптимизаторе или же в процессоре), но если у программиста есть довольно очевидные ошибки уже на уровне кода, то думаю, что привычная пошаговая отладка будет лучше. То, есть разделение все же необходимо.