Además de la gran información de @BenVoigt, permítame hacer algunas adiciones:
El depurador establece un punto de interrupción al reemplazar un valor de código de máquina (una instrucción o parte de una instrucción) en el proceso que se está depurando con una instrucción de captura particular en la ubicación en el código que corresponde a la línea (fuente) deseada para romper. Esta instrucción de captura en particular está diseñada para usarse como un punto de interrupción: el depurador lo sabe y el sistema operativo también.
Cuando el proceso / subproceso que se está depurando llega a la instrucción trap, se activa el proceso que @Ben está describiendo, que incluye la mitad de un intercambio de contexto que suspende el subproceso que se está ejecutando actualmente (que incluye guardar su estado de CPU en la memoria) para una posible reanudación posterior. Dado que esta trampa es una trampa de punto de interrupción, el sistema operativo mantiene el proceso que se está depurando suspendido utilizando quizás un mecanismo que @Ben describe, y notifica y finalmente reanuda el depurador.
El depurador usa llamadas del sistema, entonces, para acceder al estado guardado del proceso / hilo suspendido que se está depurando.
Para ejecutar (reanudar) la línea de código que se rompió (que ahora tiene la instrucción de captura particular), el depurador restaurará el valor del código de máquina original que sobrescribió con la instrucción de captura de punto de interrupción, posiblemente establezca otra trampa en otro lugar (por ejemplo, si se realiza un solo paso, o el usuario crea nuevos puntos de interrupción), y marca el proceso / hilo como ejecutable, tal vez usando un mecanismo como lo describe @Ben.
Los detalles reales pueden ser más complicados, ya que mantener un punto de interrupción de larga duración que se alcanza significa hacer algo como cambiar la trampa del punto de interrupción por código real para que la línea pueda ejecutarse, y luego volver a cambiar el punto de interrupción nuevamente ...
¿No están los registros usados constantemente por otros procesos del sistema operativo? ¿Cómo no se sobrescriben?
Como @Ben describe, el uso de la función de suspensión / reanudación de subprocesos ya existente (el cambio de contexto / intercambio de multitarea ) que permite que los procesadores sean compartidos por múltiples procesos / subprocesos utilizando el corte de tiempo.
¿Es solo una instantánea del contenido y no datos en vivo?
Son ambos. Dado que el subproceso que alcanzó el punto de interrupción se suspende, es una instantánea de los datos en vivo (registros de la CPU, etc.) en el momento de la suspensión, y el maestro autorizado de los valores de registro de la CPU para restaurar en el procesador si se reanuda el subproceso . Si utiliza la interfaz de usuario del depurador para leer y / o cambiar los registros de la CPU (del proceso que se está depurando), leerá y / o cambiará esta instantánea / maestra usando las llamadas al sistema.