Pregunta

Si bien el uso de trace, he encontrado que algunas funciones no se muestran en la fuente mientras trata de encontrar ellos con el fin de poner un punto de interrupción. Estas funciones se parece aparecer sólo cuando veo la fuente en el formato de montaje.

He hablado con mis superiores, me dijeron que si alguna función sólo se llama una vez, se puede optimizar por Trace y aparecerá como en línea, por lo tanto, se puede ver en el montaje.

Mis preguntas son:

  1. ¿Cómo funciona esto sucede a través de la optimización de Lauterbach?
  2. ¿Es esta ventajosa ??
¿Fue útil?

Solución

Hay un par de cosas:

  1. En cuanto a la declaración He descubierto que algunas funciones no se muestran en la fuente al tratar de encontrarlos con el fin de poner unos puntos de interrupción ", simplemente marque la archivo de asignación / archivo de mapa que incluye las diferentes funciones que fueron utilizados en la construcción, su ubicación en la memoria, etc y si usted no encuentra su función no hay que simplemente mirar en la optimización [solo que podría ser el tema].

  2. Como se ha señalado con razón, la optimización no se hace por el Lauterbach pero se hace por el compilador. Normalmente, hay diferentes niveles de optimización [en ARM que han O0-O2], donde O0 es la máxima optimización posible, pero esto sólo se debe utilizar cuando hay una liberación al nivel de optimización otro cliente de O2 se debe utilizar para la depuración.

  3. Si siente que la función podría ser optimizado por el compilador, por lo que es tratar volátil .

  4. Otro punto que podría no ser [directamente] relacionado con esto, pero podría ayudar es saber "¿En qué área de la memoria es el archivo que se encuentra" ya que muchas veces, cuando se quiere depurar algo y que la página es todavía no está en la memoria RAM, usted no será capaz de poner los puntos de interrupción hasta el momento en que se toma la página en la RAM [Básicamente, algo así como On-Demand de paginación si está presente en su sistema]

Espero que esto ayude.

-hjsblogger

Otros consejos

La optimización se realiza por el compilador, no por el Lauterbach. El compilador trata de optimizar su producción de lenguaje ensamblador, y la configuración predeterminada suele inline funciones que se llaman únicamente una vez.

Para anular estas optimizaciones para fines de prueba, puede utilizar la bandera compilador -. No_inline

Inlining una función que sólo se llama una vez puede ser realizado por el compilador.

La ventaja es que ahorra la sobrecarga de una llamada de función (tiempo de ejecución, el espacio de código y espacio de pila), y todavía se puede escribir el código de forma modular agradable como varias funciones.

La desventaja es que la depuración se hace más difícil, ya que durante la función de depuración se mezcla con la persona que llama.

W.r.t. el comportamiento de su herramienta de seguimiento de su pregunta es bastante clara.

Si hay una función llamada que no se puede encontrar en el código fuente que es poco probable que sea debido a las funciones inline por 2 razones:

  1. llamadas a funciones inline no se mostrarán como llamadas a subprogramas en el código de montaje - el código para implementar la función se emite en línea en el punto donde la llamada de función sería de otra manera (eso es lo que inlining es)

  2. cuando el compilador inlines su función llama, el nombre de la función (si se podía ver en la salida de montaje) seguiría siendo parte de su código fuente -. Que es donde el compilador sería conseguir el código de línea

Sin embargo, los compiladores veces insertan misteriosa función llama a funciones de ayuda interna en el código generado para implementar cosas como las operaciones aritméticas que la CPU no soporta directamente (operaciones de división de enteros o de punto flotante, por ejemplo).

¿Cuáles son los nombres de las funciones de misterio ''?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top