That's why the debug build config one uses during development only does little to no optimizations.
My point is that even that little can sometimes lead to less pleasant experiences, like stepping half a function's body ahead.
Hmm, I've only seen that in some 'new-ish' languages sometimes (like currently Zig), which I think is a compiler bug when generating debug info. In C/C++ I see such random stepping only when trying to debug an optimized program.