Цитата
поставил оптимизацию 0, точки останова появляются везде. Но при этом hex-файл увеличивается практически в 2 раза
если оптимизация 1, то стоят выборочно непонятно по какому принципу
Слишком мало информации по коду. Покажите процедуру/макрос key(), объявление всех переменных/констант, которые здесь используются. А лучше всего прикрепите к сообщению .с и .h - файлы.
Хотя нет, лучше всего посмотрите ассемблерный листинг (для вариантов 1,2,s) на предмет наличия кода внутри while().
Кстати, отлаживать код удобнее и нагляднее всего с оптимизацией 0, если есть такая возможность.