15 votos

¿Es realmente una buena práctica deshabilitar optimizaciones durante el desarrollo y las fases de depuración?

He leído la Programación de 16 Bits Microcontroladores PIC en C, y no es esta afirmación en el libro:

Durante el desarrollo y la depuración fases de un proyecto, sin embargo, es siempre es una buena práctica para deshabilitar todos los optimizaciones, ya que podría modificar la la estructura del código que está siendo analizado y render solo-paso a paso y breakpoint de la colocación de la problemática.

Confieso que estaba un poco confundido. Yo no entiendo si el autor dijo que debido a la C30 período de evaluación o si es realmente una buena práctica.

Me gustaría saber si realmente el uso de esta práctica, y por qué?

13voto

Zaz Puntos 148

En general, me gustaría depuración con cualquier configuración que planeaba lanzar. Si me iba a liberar el código optimizado, me gustaría depuración con el código optimizado. Si me iba a liberar unoptimized código, me gustaría depuración con unoptimized código. Yo hago esto por dos razones. En primer lugar, optimizadores puede hacer lo suficientemente significativas diferencias en los tiempos a causa de la final del producto a comportarse de forma diferente que unoptimized código. Segundo, aunque la mayoría son bastante buenos, compilador de los vendedores cometen errores y optimizado código puede producir resultados distintos de unoptimized código. Como resultado de ello, me gustaría conseguir el tanto de la prueba tiempo como sea posible con cualquier otra opción que tengo el plan de liberación.

Dicho esto, optimizadores puede dificultar la depuración como se observó en las respuestas anteriores. Si me encuentro a una determinada sección de código que es difícil de depurar, voy a desactivar temporalmente el optimizador, hacer la depuración para obtener el código de trabajo, a continuación, activar el optimizador de nuevo y probar una vez más.

7voto

David Sykes Puntos 9683

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.

5voto

Kieron Puntos 5096

Si utiliza al depurador entonces quisiera deshabilitar optimizaciones y habilitar depuración.

Personalmente creo que el depurador de la PIC causa más problemas de los me ayuda a fijar.
Yo sólo uso printf() a USART para depurar mis programas escritos en C18.

4voto

El uso de cualquier forma que se van a lanzar con, depuradores y la compilación para la depuración de ocultar mucho (MUCHO) de los errores que no ves hasta que se compila para la liberación. Por entonces es mucho más difícil encontrar esos errores, vs la depuración de la marcha. 20 años ahora y nunca he tenido un uso para un gdb o otros como depurador, no hay necesidad de ver las variables o de un solo paso. Cientos de miles de líneas por día. Así que es posible, no se llevan a pensar lo contrario.

Compilación de depuración, a continuación, después de compilar para la liberación puede y va a tomar dos veces más de dos veces el esfuerzo. Si te metes en un problema y tiene que usar una herramienta como un depurador, a continuación, compile para que el depurador de trabajo a través del problema específico, a continuación, volver a la operación normal.

Otros problemas también son verdaderos como el optimizador hace el código más rápido así que para incrustados en su momento los cambios con las opciones del compilador y que pueden afectar a la funcionalidad de su programa, aquí de nuevo el uso de la entrega de la compilación de elección durante toda la fase. Los compiladores son programas demasiado y tiene bugs y optimizadores de cometer errores y algunos no tienen ninguna fe en que. Si ese es el caso no hay nada de malo con que compile sin optimización, sólo lo hacen de esa manera todo el tiempo. El camino que yo prefiero es la compilación para la optimización entonces si sospecho que un compilador problema desactivar la optimización, si que lo fija suelen ir de ida y vuelta, a veces, el examen de la ensamblador de salida de averiguar por qué.

3voto

Sixty4Bit Puntos 2664

Mi estrategia es desarrollar con la optimización final ( max para el tamaño o la velocidad según corresponda), pero la vuelta la optimización off temporalmente si necesito depurar ot traza de algo. Esto reduce el riesgo de errores de la superficie como resultado de los cambios de niveles de optimización.

Un típico modo de fallo es que al aumentar la optimización de las causas inéditos errores de la superficie debido a no haber declarado las variables como la volatilidad en caso necesario, esto es esencial para decirle al compilador que las cosas no deberían ser 'optimizado'.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X