¿Por qué es necesario detener la ejecución del programa para que el punto de interrupción sea efectivo?

1

Cuando estoy siguiendo este procedimiento, la ejecución del programa se detiene correctamente cuando se ejecuta el programa de carga útil:

  1. Al establecer el punto de interrupción en el inicio del programa, el cargador de arranque lo carga posteriormente. El punto de interrupción se establece con el comando GDB break *0x2000001c . Como OpenOCD me dice que la CPU tiene 6 puntos de interrupción de harware al conectarse, supongo que se usa uno de ellos.
  2. Restablecimiento de Mikrocontroller con el comando GDB monitor reset run
  3. Cargando programa por gestor de arranque en la región SRAM.
  4. Detener y luego continuar la ejecución mediante los comandos GDB monitor halt y continue .
  5. Indicar al cargador de arranque que ejecute el programa cargado.

Sin embargo, cuando estoy intercambiando los pasos 3 y 4, la ejecución del programa no se detiene al llegar al punto de interrupción.

¿Alguien puede decirme por qué? A mi parecer, el núcleo "pierde" el punto de interrupción cuando el registro en el que se establece el punto de interrupción se sobrescribe.

Este es el equipo que estoy usando:

  • STM32F4 mikrocontroller
  • ST-Link
  • OpenOCD
  • GDB
pregunta Multisync

1 respuesta

1

El hecho de que el intercambio de los pasos 3 y 4 no funcione (no interrumpa el programa) sugiere que la operación 3 tiene el efecto de eliminar los puntos de interrupción del hardware y que se ha producido una interacción "trivial" entre el depurador y el programa. el efecto de reinstalar los puntos de interrupción.

Si en su entorno no tiene una forma de cargar el programa en un estado detenido, instale los puntos de interrupción e inícielo, y si necesita esto para depurar algo que sucede incondicionalmente, al principio de la ejecución, es posible que pueda insertar algún tipo de punto de interrupción de software en el programa, en un código que se ejecuta incluso antes de la situación que está intentando depurar.

    
respondido por el Kaz

Lea otras preguntas en las etiquetas