2010-02-11 25 views
7

Me preguntaba si puedo obtener una lista de la opción gcc que pueda hacer que gdb se comporte de forma extraña.Opción GCC que puede causar problemas al depurar con GDB

Por supuesto, todos sabemos que usar opciones de optimización (-O3, por ejemplo) causa un comportamiento extraño en gdb, pero ¿cuáles son las otras opciones que pueden tener tal impacto?

(actualmente estoy tratando de ejecutar un decodificador MPEG2 en el BGF y me sale el comportamiento extraño, incluso después de la eliminación de parámetros de optimización ...)

+0

Describa raro. ¿Agregaste -ggdb? Y lo más importante: escriba qué opciones todavía usa. – ebo

+0

Solo usó -g y -g3 ya. El comportamiento raro en mi caso es algo así: una definición de función comienza en la línea 654, 'n' luego salta a la línea 765, otro 'n' salta a la línea 654 y así sucesivamente durante 4 o 5 veces, por supuesto, línea 765 no es el que debería ser el próximo ... Pero incluso si estoy buscando la bandera que causa este problema en este momento, tengo curiosidad de las diferentes opciones que pueden causar un comportamiento extraño en general. – claf

+0

Para la opción que sigo usando, hay mucho silencio, no los publiqué en mi pregunta y, por lo tanto, los hice más generales. – claf

Respuesta

9

Creo que es difícil decir lo que DEBERÍAMOS banderas utiliza al llamar gcc para la depuración. El gcc docs tenga en cuenta que los indicadores de depuración predeterminados son -g y -O2, y que usa -g -O0 -fno-inline deshabilita cualquier optimización y función en línea.

En mi opinión, si realmente quieres garantizar que nada arruine tu proceso de depuración, solo tienes que compilar con -g -O0 -fno-inline flags.

+0

¿Qué pasa si tienes al mismo tiempo -O3 bandera, alguna otra bandera, y "-g -O0 -fno-inline"? – user65636

+0

Hice un programa simple y uso -O3 -g -O0 -fno-inline -S y tuve el mismo resultado de -g -O0 -fno-en línea -S. Pero con -g -O0 -fno-inline -O3 -S la salida fue diferente, en este caso, el código de ensamblaje con -O3 era más grande que el código generado sin -O3. Aún no sé las implicaciones de este resultado. – coelhudo

+2

No sorprende, el -O0 sobrescribe el -O3 en el primer caso. La página de manual de gcc dice: "Si usa varias opciones -O, con o sin números de nivel, la última opción es la que es efectiva". – bug313

0

Como se indica en GCC documentation, se debe utilizar -og:

-og

experiencia Optimizar la depuración. -Og habilita optimizaciones que no interfieren con la depuración. Debería ser el nivel de optimización de elección para el ciclo de edición-compilación-depuración estándar, ofreciendo un nivel razonable de optimización, manteniendo una compilación rápida y una buena experiencia de depuración.

También describe cada indicador de optmización y cómo podría afectar a la depuración.

+1

En principio sí, en la práctica '-O0' podría ser preferible –

Cuestiones relacionadas