Articulo de referencia

Paso a paso (depuración)

La depuración paso a paso se refiere al método de ejecución de código que consiste en ejecutar una instrucción o línea a la vez. El programador puede examinar el estado del prog...

La depuración paso a paso se refiere al método de ejecución de código que consiste en ejecutar una instrucción o línea a la vez. El programador puede examinar el estado del programa, la máquina y los datos relacionados antes y después de la ejecución de una línea de código específica. Esto le permite evaluar los efectos de cada instrucción de forma aislada y, por lo tanto, comprender mejor el comportamiento (o el mal comportamiento) del programa en ejecución. Casi todos los entornos de desarrollo integrados (IDE ) y depuradores modernos admiten este modo de ejecución.

Historia

Consola del operador del sistema/360 (modelo 65) , con lámparas de valor de registro , interruptores y botones (en el centro de la imagen).

El avance de instrucciones o ciclo único se refería originalmente a la técnica de detener el reloj del procesador y avanzarlo manualmente un ciclo a la vez. Para que esto sea posible, se requieren tres cosas:

  • Un control que permite detener el reloj (por ejemplo, un botón de "Parar").
  • Un segundo control que permite avanzar manualmente un ciclo el reloj detenido (por ejemplo, un interruptor de "paso de instrucción" y un botón de "Inicio").
  • Algún método para registrar el estado del procesador después de cada ciclo (por ejemplo, indicadores de registro y memoria).

En la gama de procesadores IBM System 360 , anunciada en 1964, estas funciones se proporcionaban mediante interruptores, botones y grupos de luces de neón en el panel frontal. Otros sistemas, como el PDP-11 , ofrecían funciones similares.

En los procesadores más nuevos, que pueden no admitir la detención física del reloj y tener demasiado estado interno para mostrarlo razonablemente en un panel, se puede proporcionar una funcionalidad similar a través de una bandera de interrupción , que cuando está habilitada le indica al procesador que se detenga después de cada instrucción de manera similar a un punto de interrupción .

A medida que el procesamiento paralelo se generalizó, estas técnicas resultaron poco prácticas, ya que muchos procesos independientes se detenían simultáneamente. Esto impulsó el desarrollo de software propietario por parte de varios proveedores independientes que ofrecían funcionalidades similares, pero restringían deliberadamente los puntos de interrupción y la ejecución paso a paso a programas de aplicación específicos en espacios de direcciones e hilos determinados . El estado del programa (según corresponda a la aplicación/hilo seleccionado) se guardaba para su análisis en cada paso y se restauraba antes de la reanudación, lo que daba la impresión de un entorno de usuario único. Esto suele ser suficiente para diagnosticar problemas en la capa de aplicación.

En lugar de usar un botón físico para detener la ejecución y luego comenzar a recorrer el programa paso a paso, normalmente se debe establecer un punto de interrupción o una solicitud de "Pausa" con anticipación, generalmente en una instrucción o sentencia específica del programa (elegida de antemano o, por defecto, en la primera instrucción).

Para permitir la visualización a pantalla completa de un programa, normalmente se requiere un dispositivo de E/S adecuado, como un monitor de vídeo, que pueda mostrar una sección razonable del código (por ejemplo, en código máquina desensamblado o en formato de código fuente ) y proporcionar un puntero (por ejemplo, <==) a la instrucción o línea de código fuente actual. Por este motivo, el uso generalizado de estos animadores a pantalla completa en el mundo de los mainframes tuvo que esperar a la llegada de los sistemas de procesamiento de transacciones , como CICS a principios de la década de 1970, y en un principio se limitaba a la depuración de programas de aplicación que operaban dentro de ese entorno. Las versiones posteriores de estos mismos productos permitieron la monitorización y depuración entre regiones de programas por lotes y otros sistemas operativos y plataformas.

Con la posterior introducción de los ordenadores personales, a partir de 1980 aproximadamente, los depuradores integrados pudieron incorporarse de forma más generalizada a este dominio de usuario único y proporcionaron una animación similar dividiendo la pantalla del usuario y añadiendo una "consola" de depuración para facilitar la interacción del programador.

Borland Turbo Debugger fue un producto independiente lanzado en 1989 que proporcionaba animación de programas a pantalla completa para PC. Las versiones posteriores añadieron soporte para combinar la animación con líneas de código fuente reales extraídas durante la compilación.

Técnicas para la animación de programas

Existen al menos tres técnicas de software distintas para crear "animaciones" durante la ejecución de un programa.

  • La instrumentación implica añadir código fuente adicional al programa en tiempo de compilación para llamar al animador antes o después de cada instrucción y detener la ejecución normal. Esta funcionalidad puede formar parte de la biblioteca de tiempo de ejecución , como en pdbel módulo de Python, o puede consistir en insertar una instrucción de punto de interrupción que active un depurador externo si está conectado.
  • Interrupción inducida: Esta técnica consiste en forzar un punto de interrupción en determinados puntos del programa durante su ejecución, generalmente modificando la instrucción del código máquina en ese punto (por ejemplo, insertando una llamada al sistema o realizando una operación inválida deliberada) y esperando la interrupción. Cuando se produce la interrupción, la herramienta de prueba la gestiona e informa al programador sobre su estado. Este método permite la ejecución del programa a máxima velocidad (hasta que se produce la interrupción), pero tiene la desventaja de que la herramienta no supervisa la mayoría de las instrucciones previas a la interrupción.
  • Simulador de conjunto de instrucciones Esta técnica trata el código máquina del programa compilado como sus "datos" de entrada y simula completamente las instrucciones de la máquina anfitriona, supervisando el código en busca de puntos de interrupción condicionales o incondicionales o solicitudes de animación de "ciclo único" solicitadas por el programador entre cada paso.

Comparación de métodos

La ventaja del último método es que no se realizan cambios en el programa compilado para proporcionar el diagnóstico y existe un alcance casi ilimitado para diagnósticos extensos ya que la herramienta puede ampliar los diagnósticos del sistema host con funciones adicionales de rastreo de software. También es posible diagnosticar (y prevenir) muchos errores de programa automáticamente usando esta técnica, incluyendo violaciones de almacenamiento y desbordamientos de búfer . La detección de bucles también es posible usando el rastreo automático de instrucciones junto con umbrales de conteo de instrucciones (por ejemplo, pausa después de 10,000 instrucciones; mostrar las últimas n instrucciones) El segundo método solo modifica la instrucción que se detendrá antes de ser ejecutada y también puede luego restaurarla antes de la reanudación opcional por parte del programador. Algunos animadores permiten opcionalmente el uso de más de un método dependiendo de los requisitos. Por ejemplo, usar el método 2 para ejecutar hasta un punto particular a máxima velocidad y luego usar la simulación del conjunto de instrucciones a partir de ahí.

Características adicionales

El animador puede, o no, combinar otras funciones de prueba/depuración, como el seguimiento del programa , el volcado de memoria, los puntos de interrupción condicionales y la alteración de la memoria , la alteración del flujo del programa , el análisis de la cobertura del código , la detección de "puntos críticos", la detección de bucles o similares.

Referencias

  • Introducción a la programación (Visual Studio) Descripción general de la compatibilidad con la programación paso a paso en el IDE de Microsoft Corporation , Visual Studio
  • Tarraingim - Un entorno de animación de programas
  • La animación de programas como método para enseñar y aprender sobre diseño y análisis de programas.
  • Información estructurada sobre pruebas de software (como la Historia de las Pruebas de Software) publicada por Testing references