[C++] ¿Cómo sabe GDB que tiene que romperse en un punto de quiebre específico?


Answers

De la misma manera que si su programa se detiene o se bloquea en un punto particular, el depurador puede indicarle en qué punto del programa se encuentra ese punto.

Para que ambos funcionen, el binario del programa debe contener información de depuración adicional que asocie direcciones en la imagen del programa con ubicaciones en el código fuente (archivo fuente y número de línea).

Para agregar un punto de interrupción en una línea particular, el depurador encuentra la dirección del programa más cercana a esa línea, modifica la copia del ejecutable en la memoria para insertar una instrucción especial de "interrupción" en esa ubicación que causará la interrupción de la ejecución del programa, luego " rastrea "la ejecución del programa y espera a que llegue al punto de interrupción y se detenga".

Para obtener más información, consulte http://eli.thegreenplace.net/2011/01/23/how-debuggers-work-part-1/ y http://www.howzatt.demon.co.uk/articles/SimplePTrace.html

Question

Una pregunta básica y soy muy nuevo en C / C ++ y GDB.

Usamos GDB para depurar un proceso. Adjuntamos GDB a un proceso y luego especificamos filename.c junto con el número de línea para poner punto de corte.

Mi pregunta es "¿Cómo sabría GDB o OS o posiblemente otra cosa que tiene que romperse en un número de línea específico (en filename.c) después de conectar GDB al proceso en ejecución?"

¿Qué está entrando en la imagen de que, por ejemplo, el proceso actual se ejecuta en modo de depuración y se aplica un punto de interrupción y la ejecución del proceso debe interrumpirse (esperar la entrada del usuario) en ese punto?




Si utilizó la opción -g en gcc / g ++, los números de línea de cada archivo fuente se adjuntan a las instrucciones en los archivos de objeto resultantes.