Some time ago I\'ve read an article on CLR, where author showed that if a project is compiled in DEBUG mode, before each operator comes a NOP command, thus allowing to debug
Debugging .net code so that you can step through the source code while it is executed usually requires three things:
Symbols are controlled by the /debug:{full | pdbonly} flag. If you specify /debug:full
(even in a release build, with compiler optimizations turned off) you may attach to an already running process and step through code. If you have /debug:pdbonly
, then you must use the debugger to start the program (and cannot view symbols when attaching to an already running process).
Optimization is controlled granularly by the /debug compiler option, but can be further controlled by the /optimize-.
You can debug in Release mode to an extent. Debug and Release are simply build configurations (of which you can create many), the real difference is that Debug configuration doesn't optimize the generated binary code (optimized code complicates debugging). It also generates additional debug data which release does not.
Compiling in release mode optimizes the resulting binary, which makes it harder (but not impossible) for the debugger to know which binary code came from which line line of source code.
Debug mode is designed to make it easier for the debugger to 'follow along', so it separates lines of code with NOP, and does not optimize the resulting binary.