En esta serie ya hemos hablado sobre los registros de carácter general del procesador en arquitectura x86 y de como funciona la pila o stack. Ambos conceptos son completamente necesarios para lograr entender en profundidad como funciona un depurador.
Hoy vamos a hablar sobre los eventos de depurado. De forma abstracta, un depurador no es más que un bucle sin fin que espera a que sucedan eventos de depurado. Cuando sucede un evento, el bucle se rompe, y se invoca a un manejador o handler de eventos cualificado para procesarlo.
Cuando el manejeador de eventos es invocado, el depurador se detiene y espera instrucciones sobre como debe continuar. Algunos de los eventos más comunes que un depurador debe atrapar son los siguientes:
-
Alcance de punto de ruptura (breakpoints)
-
Violaciones de acceso a memoria (segmentation fault)
-
Excepciones generadas por el programa en depuración
Cada sistema operativo dispone de diferentes métodos para resolver el envío de estos eventos al depurador. En algunos sistemas, otros eventos también pueden ser atrapados como por ejemplo la creación de hilos y procesos o la carga de librerías dinámicas en tiempo de ejecución.
Algunos depuradores soportan la extensión de los manejadores de eventos a través de lenguajes de scripting en la mayoría de los casos y así poder automatizar algunas tareas de depurado como por ejemplo la detección de errores de desbordamiento del buffer.
Hasta aquí todo lo que es necesario saber sobre los eventos de depuración antes de meternos de lleno con los diferentes puntos de interrupción donde además indagaremos en como son manejados de forma interna por el depurador que es la finalidad de esta serie de artículos.