debugging - ver - que es un punto de interrupcion en programacion
¿Cómo funciona un punto de interrupción en el depurador? (2)
El compilador no necesita "modificar" el binario de ninguna manera para admitir los puntos de interrupción. Sin embargo, es importante que:
- El compilador incluye suficiente información en el ejecutable (que no está en el código en sí, sino en secciones especiales en el mismo archivo), de modo que el depurador puede relacionar la fuente que el usuario quiere depurar con el código de la máquina. Una cosa típica que el depurador debe saber para poder establecer puntos de interrupción (a menos que especifique direcciones directamente), es dónde (en qué dirección) comienzan las funciones del programa y las líneas del código fuente (dentro del código de la máquina).
- El compilador no optimiza el código de ninguna manera, lo que hace que sea imposible relacionar el código fuente y el código de la máquina. Por lo general, querrá código de depuración que no se optimizó o código donde solo se realizaron optimizaciones cuidadosamente seleccionadas.
El resto del trabajo lo realiza el propio depurador.
- Los puntos de interrupción del software no necesariamente necesitan características especiales de hardware. El depurador aquí se basa en modificar el binario original (es la copia que se carga en la memoria). Cuando establece un punto de interrupción, el depurador colocará instrucciones especiales en la ubicación del punto de interrupción. Esta instrucción especial debe permitir de alguna manera que el depurador detecte cuándo se está ejecutando (esta instrucción especial). Esto puede ser alguna instrucción que cause algún tipo de interrupción / excepción, que el depurador pueda conectar o alguna instrucción que maneje el control para depurar la unidad. Si esto se ejecuta bajo algún sistema operativo, ese sistema operativo debe admitir la modificación del programa en ejecución (con algo como ptrace poke / peek). La desventaja de los puntos de interrupción de SW es que el depurador debe poder modificar el programa en ejecución, lo que no es posible si el programa se ejecuta desde algún tipo de memoria de solo lectura (bastante común en el mundo integrado).
- Los puntos de interrupción de hardware (que deben ser compatibles con la CPU) implementan un comportamiento similar sin modificar el programa binario. Esto es específico de la CPU, pero generalmente le permite al menos definir una dirección de programa en la que la ejecución debe alcanzar un punto de interrupción. La CPU compara continuamente la PC actual con estas direcciones de punto de interrupción y una vez que se cumple la condición, rompe la ejecución. Número de estos puntos de interrupción siempre es limitado.
Los puntos de interrupción son una de las funciones más geniales admitidas por los depuradores más populares como GDB. ¿Pero cómo funciona un punto de ruptura? ¿Qué modificaciones de código hace el compilador para lograr el punto de interrupción? ¿Hay alguna característica de hardware especial utilizada para soportar puntos de interrupción?
Para poner un punto de ruptura primero, tenemos que agregar alguna información especial al binario. Usamos la bandera -g al compilar los archivos fuente de c para incluir esta información. El depurador de software realmente usa esta información para poner puntos de ruptura. El mejor ejemplo para el hardware, el soporte de punto de interrupción está en VxWorks, como lo he experimentado. Básicamente, en el punto de interrupción, el procesador se detiene. Por lo tanto, internamente, cualquier paso que dé una excepción al procesador se puede usar para poner un punto de interrupción del software. Mientras que un punto de interrupción de hardware funciona al hacer coincidir la dirección almacenada en los registros de hardware para generar una excepción. El punto de ruptura del hardware es muy poderoso pero depende en gran medida de la arquitectura.
Una muy buena explicación está aquí. ¿Cuál es la diferencia entre los puntos de interrupción de hardware y software? Aquí se ofrece una buena introducción con información relacionada con el procesador http://processors.wiki.ti.com/index.php/How_Do_Breakpoints_Work