2009-05-13 11 views
5

A veces acumulo una gran cantidad de puntos de interrupción de diferentes sesiones de depuración en diferentes lugares de mi código. ¿Cómo sabe el depurador de manera eficiente cuándo detenerse en un punto de interrupción? No es posible detenerse en cada línea para verificar el número de línea y el nombre del archivo fuente contra una lista potencialmente larga de puntos de corte, ¿o sí?¿Cómo se implementan los puntos de interrupción de depuración de manera eficiente?

Este es el depurador de Java en Eclipse, pero supongo que la pregunta se aplica a cualquier depurador.

Respuesta

7

La estrategia utilizada en muchos depuradores (no sé acerca de Eclipse) es poner un parche en el código en el punto del punto de interrupción, que es esencialmente una llamada de subrutina o una llamada al sistema. El código saltó a tiene la información del punto de interrupción y hace cualquier impresión o aceptación de comandos del usuario, y también tiene el código sobrescrito con el parche, por lo que el código puede ejecutarse para hacer que la ejecución coincida con el código original, sin el punto de interrupción

+0

hombre, eso es un poco de la magia de alta resistencia. Sabía que los depuradores estaban haciendo algunas cosas profundas, ¡pero no sabía que era tan profundo! – skiphoppy

+2

No necesariamente una llamada, incluso. Siempre que sea posible, sobrescriba con una instrucción que genera una interrupción, que maneja el depurador. –

5

para añadir a la buena respuesta de Nadreck:

Hay un artículo here con más detalles, incluyendo algunas de las cosas más exótico (códigos de operación específicos en x86; puntos de ruptura hardware).

2

Los depuradores implementan puntos de interrupción en hardware o software. Esto último requiere guardar la instrucción original, insertar un código especial que genera una excepción y cuando se produce la excepción, reinsertar la instrucción original y dejar que el usuario sepa que se ha alcanzado el punto de interrupción. Lea my article para conocer los detalles sangrientos sobre los puntos de interrupción del software.

Cuestiones relacionadas