Esto es bastante estándar en la ingeniería de software como un todo, al optimizar el código, el compilador se les permite volver a arreglar las cosas bastante mucho sin embargo se quiera, siempre que no se puede decir cualquier diferencia en la operación. Así, por ejemplo, si usted inicializar una variable dentro de cada iteración de un bucle, y nunca cambio de la variable dentro del bucle, el optimizador puede moverse que la inicialización fuera del bucle, de modo que usted no está perdiendo el tiempo con él.
También podría darse cuenta de que calcular un número que luego no hacer nada antes de que la sobre-escritura. En ese caso, se podría eliminar la inútil de cálculo.
El problema de optimización es que se le quiere poner un breakpoint en un fragmento de código, que el optimizador se ha movido o eliminado. En ese caso, el depurador no puede hacer lo que quiera (por lo general, se colocará el breakpoint en algún lugar cercano). Así que, para hacer que el código generado se asemejan más a lo que usted escribió, apagar las optimizaciones durante la depuración de este modo se garantiza que el código que se desea romper en que realmente está allí.
Usted necesita tener cuidado con esto, sin embargo, dependiendo de tu código, optimización puede romper cosas! En general el código que es roto por el correcto funcionamiento del optimizador es realmente sólo un código erróneo que está haciendo algo, por lo que normalmente quiere averiguar por qué el optimizador se rompe.