android debugging gdb kernel

android - ¿Por qué GDB "salta hacia atrás" al depurar con c códigos fuente?



debugging kernel (1)

Cuando llegué a la cláusula if, escribí n y volverá a la parte int. ¿Porqué es eso?

Debido a que su código está compilado con la optimización activada, y el compilador puede (y muchas veces lo hace) reorganizar las instrucciones de su programa de tal manera que las instrucciones "pertenecientes" a diferentes líneas fuente se intercalen (intento de optimizaciones de movimiento del código (entre otras cosas) para mover las instrucciones de carga mucho antes de que se necesiten sus resultados, esto ayuda a ocultar la latencia de la memoria).

Si está utilizando gcc-4.8 o posterior, -Og sus fuentes con -Og . De lo contrario, mira esta respuesta.

Estoy depurando el kernel de goldfish de Android (versión 3.4), con fuentes kernel.

Ahora descubrí que gdb a veces salta de una línea a otra, por ejemplo, considere c el código fuente como el siguiente:

char *XXX; int a; ... if (...) { }

Cuando llegué a la cláusula if , escribí n y volverá a la parte int a . ¿Porqué es eso?

Si ejecuto ese comando nuevamente, ingresará los corchetes en if .

Si es posible, quiero evitar esa parte e ingresar el si directamente (por supuesto, si la condición coincide)