That&#x27;s likely because with C#, the debugger can use deoptimization and on-stack replacement to get expressions evaluated in the order they happen in the code, as long as the instruction re-ordering happens only in the bytecode to native code compilation.  Even though the debugging symbols just have line numbers, the debugger could potentially regenerate they bytecode to figure out which operations correspond to which expressions.<p>In C++ optimized builds, you might be jumping back and forth between lines due to the compiler re-ordering instructions, and there isn&#x27;t an easy way to get back code that&#x27;s in-order.