La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

VISUALIZADOR DIDÁCTICO DE EJECUCIÓN PARA LC99

Presentaciones similares


Presentación del tema: "VISUALIZADOR DIDÁCTICO DE EJECUCIÓN PARA LC99"— Transcripción de la presentación:

1 VISUALIZADOR DIDÁCTICO DE EJECUCIÓN PARA LC99
Buenos días. Mi nombre es Daniel Bautista y el título del proyecto que les voy a presentar a continuación es “Visualizador Didáctico de Ejecución”. Los tutores de este proyecto han sido Miguel Ángel Pérez y José Fortes. Autor: Daniel Bautista de Cabo Tutores: Miguel Ángel Pérez Aguiar José Fortes Gálvez Facultad de Informática Universidad de Las Palmas de G.C.

2 El proceso de la ejecución
El proceso normal de compilación y ejecución es el siguiente: dado un programa fuente en un cierto lenguaje (normalmente imperativo) se procede a una compilación del mismo (que puede darse en una serie de pasos más o menos complicados) y se obtiene un fichero llamado “ejecutable”. Este no es el único camino para ejecutar un programa (existen otras vías como los intérpretes y las máquinas virtuales); sin embargo, es la más usual dentro del conjunto de los lenguajes imperativos y es en la que nos hemos centrado en este proyecto. Una vez obtenido el ejecutable, el siguiente paso es cargarlo en memoria y que comience su ejecución. El mostrar cómo se organiza la memoria en tiempo de ejecución es el objetivo principal del proyecto. Tradicionalmente, ha existido un conjunto de programas y aplicaciones que realizan la tarea de inspeccionar la memoria en tiempo de ejecución: los depuradores. Sin embargo, los depuradores siguen una filosofía radicalmente opuesta a la de este proyecto: están enfocados a la búsqueda de errores (por tanto, presentan la información de un modo “crudo”), y no a mostrar la memoria de un modo estructurado, legible y, en definitiva, didáctico. Es aquí donde arranca este proyecto. 22/03/2017 Visualizador Didáctico de Ejecución

3 El Visualizador de Ejecución
Lo que se propone es un cierto entorno visual que tiene como base todas las características de un depurador (ejecutar procesos, poner breakpoints, ejecutar instrucciones paso a paso, <click> poder visualizar el código ensamblador asociado al lenguaje fuente, etc). La principal diferencia con los entornos de depuración actuales estará en la visualización de lo que ocurre en la memoria <click>: deberá hacerse de un modo tal que facilite la comprensión de lo que está ocurriendo por parte del usuario final, y que muestre todos los aspectos típicos como son las áreas de datos asociadas a las funciones del programa fuente, variables locales y temporales, argumentos, registros, y conceptos específicos de la gestión de la memoria tales como los enlaces estático y dinámico, las direcciones de retorno, y otros; todos etiquetados mediante un código de colores que facilite su comprensión, usando flechas para ver a dónde apunta cada uno, pudiendo cambiar los valores de todos los elementos durante la propia ejecución. Y además deberá ser, en principio, independiente de ciertos aspectos como son el lenguaje fuente (aunque este proyecto estaba pensado para aceptar un solo lenguaje fuente de entrada) y la máquina donde se ejecuta el programa (que de nuevo en el proyecto sólo estaba planteada una máquina). Dado el diseño de la aplicación, se verá que son objetivos que han quedado cubiertos en su mayor parte (aunque no eran el objetivo principal del proyecto), aceptando lenguajes tales como C/C++, Pascal, Fortran, Java, Modula-2 y LC99. 22/03/2017 Visualizador Didáctico de Ejecución

4 Visualizador Didáctico de Ejecución
Contenidos Introducción Estado inicial del tema Metodología seguida Recursos utilizados Planificación y desarrollo del proyecto Resultados y conclusiones Trabajo futuro Dividiremos esta presentación en los siguientes apartados: Primero haremos una pequeña introducción a ciertos aspectos que rodean a este proyecto y que son el motivo de su realización. Luego haremos un rápido paseo por los distintos entornos visuales de depuración actuales más conocidos, para ver por qué hace falta desarrollar un visualizador que estructure la información. Explicaremos cuál ha sido la metodología seguida. Nombraremos los recursos utilizados. Después entraremos a discutir qué fases tenía el proyecto y cómo se han llevado a cabo. Por último, veremos qué resultados (es decir, la aplicación visualizadora) y conclusiones se pueden extraer de la realización de este proyecto... ...amén de las posibles ampliaciones que se pudieran realizar. 22/03/2017 Visualizador Didáctico de Ejecución

5 Visualizador Didáctico de Ejecución
¿Qué es LC99? Lenguaje inspirado en Algol y Pascal Desarrollado en la E.U.I. de la ULPGC Características interesantes para la gestión de memoria (didáctico) Existe un compilador y actualmente no acepta todo el lenguaje El compilador genera “código P” 22/03/2017 Visualizador Didáctico de Ejecución

6 ESTADO INICIAL

7 Visualizador Didáctico de Ejecución
Estado inicial (I) Proyecto muy relacionado con un depurador (gráfico): Depuradores capaces de controlar flujo de un programa Depuradores pueden consultar estado de un programa (variables, argumentos, registros, memoria) Pero, ¿es un depurador lo suficientemente didáctico para estudiar el modelo de gestión de la memoria? Estudio de los depuradores actuales 22/03/2017 Visualizador Didáctico de Ejecución

8 Visualizador Didáctico de Ejecución
GDB (GNU DeBugger) El GDB es un depurador conocido Puede depurar programas en C, C++, Pascal, Fortran, Modula2, Ada y otros Modo texto (consola)  “crudo”, no didáctico Sin embargo, cubre todas nuestras necesidades de contenidos 22/03/2017 Visualizador Didáctico de Ejecución

9 Visualizador Didáctico de Ejecución
DDD Depurador gráfico más conocido en Linux Sólo una GUI, su motor es el GDB Permite interacción directa con el GDB Potencia GDB + Amigabilidad visual Sin embargo, sigue siendo “crudo” con la visualización de la memoria (simplemente encierra el texto del GDB en ventanas) 22/03/2017 Visualizador Didáctico de Ejecución

10 Visualizador Didáctico de Ejecución
22/03/2017 Visualizador Didáctico de Ejecución

11 Estado inicial (II): Conclusión
Mismo problema en todos los depuradores estudiados: visualización pobre de la memoria Esto es lógico, dado el fin de un depurador: un programador no suele estar interesado en el modelo de gestión de la memoria No encontraremos un depurador que funcione como visualizador didáctico Detalle interesante: potencia y capacidad del GDB de aceptar varios lenguajes 22/03/2017 Visualizador Didáctico de Ejecución

12 METODOLOGÍA

13 Visualizador Didáctico de Ejecución
Metodología (I) Se ha seguido un ciclo de vida en cascada Se ha utilizado UML para diseñar y documentar Documentación durante el desarrollo Otras metodologías (PUD, …) eran excesivas para este proyecto 22/03/2017 Visualizador Didáctico de Ejecución

14 Visualizador Didáctico de Ejecución
Metodología (II) 22/03/2017 Visualizador Didáctico de Ejecución

15 RECURSOS UTILIZADOS

16 Visualizador Didáctico de Ejecución
Recursos utilizados Se ha tratado de usar software libre cuando ha sido posible: Borland Kylix 3 Open Edition, IDE Builder (en Windows: Borland C++ Builder) Herramientas GNU: GDB, GCC, GPC, GNAT, G++, G77 GNU para Windows: MinGW, Cygwin 22/03/2017 Visualizador Didáctico de Ejecución

17 PLANIFICACIÓN Y TIEMPOS

18 Visualizador Didáctico de Ejecución
Planificación (300 horas) 22/03/2017 Visualizador Didáctico de Ejecución

19 Visualizador Didáctico de Ejecución
Tiempos y porcentajes (300 horas) 22/03/2017 Visualizador Didáctico de Ejecución

20 ANÁLISIS

21 Visualizador Didáctico de Ejecución
Análisis (I) Qué queríamos: Herramienta con potencia de depurador: control del programa, recuperación de valores, etc. Herramienta que visualice la memoria de forma didáctica Herramienta que acepte el LC99 (completo) Herramienta extensible (que pueda aceptar otros lenguajes) 22/03/2017 Visualizador Didáctico de Ejecución

22 Visualizador Didáctico de Ejecución
Análisis (II) Identificación de elementos de visualización: Código fuente Código máquina (ensamblador) Pila Registros Resto de la memoria Inspiración: depuradores + apuntes de gestión de memoria 22/03/2017 Visualizador Didáctico de Ejecución

23 Visualizador Didáctico de Ejecución
Análisis (III) Estudio de los depuradores Dos hechos interesantes: Potencia del GDB al aceptar varios lenguajes Que DDD (y otros) utilizaran al GDB 22/03/2017 Visualizador Didáctico de Ejecución

24 Visualizador Didáctico de Ejecución
Análisis (IV) Idea: Diseñar e implementar un visualizador que use GDB (como el DDD) Problema: GDB no acepta código generado por compilador de LC99 (genera “código P”) Solución: cambiar código generado por compilador de LC99 (backend) 22/03/2017 Visualizador Didáctico de Ejecución

25 Visualizador Didáctico de Ejecución
Estudio del GDB ¿Cómo obtiene el GDB información semántica sobre un programa? Entrada GDB: ejecutable Hay que compilar con la opción “-g” ¿Qué ocurre cuando se especifica esa opción? 22/03/2017 Visualizador Didáctico de Ejecución

26 Los STABs .stabs “c(0,1)”,128,0,2,-4 Indica que hay una variable “c” entera en la posición -4 a partir del registro %ebp Con opción “-g”, el compilador añade más líneas al código generado (ensamblador) Cada una de esas líneas se llama STAB STAB=Symbol TABle: codifican información semántica Los STABs especifican los nombres de las variables, argumentos, funciones; línea fuente en que han sido declarados; de qué tipo son; y su lugar en memoria 22/03/2017 Visualizador Didáctico de Ejecución

27 Visualizador Didáctico de Ejecución
Nuevo compilador de LC99 Habrá que cambiar el código generado: De “código P” a código ensamblador AT&T i386 (parecido a Intel pero con pequeñas diferencias) Añadir líneas de STAB al código i386 generado 22/03/2017 Visualizador Didáctico de Ejecución

28 DISEÑO

29 Visualizador Didáctico de Ejecución
Diseño (I) 22/03/2017 Visualizador Didáctico de Ejecución

30 Visualizador Didáctico de Ejecución
Diseño (II) “Intermediario” entre el GDB y el visualizador (VDE) Principio de diseño: encapsular lo que cambia El intermediario envía órdenes y recoge respuestas del GDB y se las pasa al VDE 22/03/2017 Visualizador Didáctico de Ejecución

31 Visualizador Didáctico de Ejecución
Diseño (III) 22/03/2017 Visualizador Didáctico de Ejecución

32 Visualizador Didáctico de Ejecución
Diseño (IV) Realimentación entre diseño e implementación: nuevas ideas que han hecho necesario rediseñar Patrones de diseño: Mediator, Singleton 22/03/2017 Visualizador Didáctico de Ejecución

33 IMPLEMENTACIÓN

34 Visualizador Didáctico de Ejecución
Implementación (I) Lenguaje utilizado: C++ Experiencia Se usa la librería LibC GUI (Kylix/Builder) Propuesta inicial: Delphi Productividad 22/03/2017 Visualizador Didáctico de Ejecución

35 Implementación (II): fork
VDE fork En Windows: Win32 API CreateProcess() Anonymous Pipes VDE VDE (hijo) exec pipe GDB dup 22/03/2017 Visualizador Didáctico de Ejecución

36 Implementación (III): GDB
Intermediario analiza y estructura repuestas de salida estándar del GDB Respuestas del GDB fijas Posibilidad de usar GDB MI (Machine Interface), pero sólo disponible a partir de GDB 5.0 22/03/2017 Visualizador Didáctico de Ejecución

37 Implementación (IV): hilos
Proceso de comunicación: respuesta (visual) VDE GUI acción respuesta petición Intermediario Usuario respuesta comando GDB 22/03/2017 Visualizador Didáctico de Ejecución

38 Implementación (V): hilos
Para evitar bloqueos se utiliza concurrencia (hilos): respuesta (visual) VDE GUI acción respuesta VDE::Hilo petición Intermediario Usuario respuesta comando GDB 22/03/2017 Visualizador Didáctico de Ejecución

39 Implementación (VI): bugs
VDE soluciona bugs del GDB Información incorrecta si paramos el GDB en entrada o salida de función VDE detecta esos casos y, con la información del instante anterior, construye visualización correcta Si no hubo paso anterior, simplemente no etiqueta valores críticos 22/03/2017 Visualizador Didáctico de Ejecución

40 Visualizador Didáctico de Ejecución
Implementación (VII) Sentido de la pila: ¿Hacia dónde crece la pila? Literatura muestra ambos sentidos Ningún argumento concluyente: se deja elegir al usuario 22/03/2017 Visualizador Didáctico de Ejecución

41 Implementación (VIII)
No se puede ir hacia atrás en el flujo de ejecución Sin lo anterior, es difícil comparar la pila en dos estados diferentes Solución: poder capturar estado de pila (snapshot), para comparar más tarde 22/03/2017 Visualizador Didáctico de Ejecución

42 Visualizador Didáctico de Ejecución
22/03/2017 Visualizador Didáctico de Ejecución

43 Scripts adaptadores (I)
Para algunos lenguajes, el visualizador no se comporta adecuadamente Sería más correcto decir que el GDB no se comporta correctamente Enlace estático no se etiqueta como STAB (el LC99 sí lo hace; GPC y GNAT, obviamente, no) Esto provoca que el enlace estático no se etiquete (aunque sí aparece su valor, adónde apunta, etc.) 22/03/2017 Visualizador Didáctico de Ejecución

44 Scripts adaptadores (II)
Implementación de scripts en Perl que modifican código generado (GPC y GNAT) GPC no funciona con GDB, script logra que funcione 22/03/2017 Visualizador Didáctico de Ejecución

45 Scripts adaptadores (III)
C (gcc) C++ (g++) Fortran (g77) Ada (gnat) script Pascal (gpc) script LC99 (lc99) 22/03/2017 Visualizador Didáctico de Ejecución

46 PRUEBAS

47 Visualizador Didáctico de Ejecución
Pruebas (I) Se plantearon varias pruebas: Batería de programas Pruebas de usuario Pruebas de sistema o entorno Pruebas de memoria 22/03/2017 Visualizador Didáctico de Ejecución

48 Visualizador Didáctico de Ejecución
Pruebas (II) Batería de programas: Procedimientos anidados (Pascal, Ada, LC99) Recursividad Estructuras complejas (arrays, structs) Clases y objetos (C++) Hilos, tareas (Ada) Punteros (C) Distintos pasos de parámetros (valor, referencia) Varios fuentes (uses, include) Optimización (gcc)  No optimizar 22/03/2017 Visualizador Didáctico de Ejecución

49 Visualizador Didáctico de Ejecución
Pruebas (III) Pruebas de usuario: se repartió el VDE a diferentes usuarios Pruebas de sistema: Windows ME, 2k, XP; Linux (entornos KDE, GNOME, …) Pruebas de memoria (C++): se usó MemProof para validar que no se pierde memoria 22/03/2017 Visualizador Didáctico de Ejecución

50 RESULTADOS

51 Visualizador Didáctico de Ejecución
Resultados VDE capaz de visualizar programas LC99 VDE capaz (por usar GDB) de visualizar programas C, C++, Pascal, Ada95 y Fortran77 (probados), y otros Visualización etiquetada y estructurada Potencia de un depurador gráfico Disponible en Linux y Windows 22/03/2017 Visualizador Didáctico de Ejecución

52 Visualizador Didáctico de Ejecución
22/03/2017 Visualizador Didáctico de Ejecución

53 Visualizador Didáctico de Ejecución
22/03/2017 Visualizador Didáctico de Ejecución

54 Visualizador Didáctico de Ejecución
Página web Durante el desarrollo del proyecto se mantuvo una página web para la comunicación alumno-tutores Esa página web se ha ido transformando en la página del proyecto Incluye fuentes, ejecutables, capturas, documentación y enlaces 22/03/2017 Visualizador Didáctico de Ejecución

55 Conocimientos aplicados
Procesadores de Lenguajes Ingeniería del Software Programación Orientada a Objetos, GUI Programación en C, Pascal, Perl, etc. Concurrencia Sistemas Operativos Gráficos por Computador 22/03/2017 Visualizador Didáctico de Ejecución

56 TRABAJO FUTURO

57 Visualizador Didáctico de Ejecución
Ampliaciones Construcción de nuevos compiladores compatibles con el VDE Adaptación de compiladores antiguos GDB/MI Uso de otros depuradores (jdb, …) Gestión interna del heap 22/03/2017 Visualizador Didáctico de Ejecución

58 FIN

59 Visualizador Didáctico de Ejecución
Referencias (I) [PER 98] “Traductores e Intérpretes”. E.U.I.-U.L.P.G.C., Miguel Ángel Pérez Aguiar, 1998. [SAN 99] Proyecto de fin de carrera de la E.U.I.-U.L.P.G.C. "Prototipo de Compilador Didáctico del Lenguaje LC99", Tomos I y II, Orlando Sánchez Montesdeoca, 1999. [PEM 82] "P4. Pascal Implementation: Compiler and Assembler/Interpreter", Steven Pemberton and Martin Daniels, 1982. [ROS 96] "How Debuggers Work", Jonathan Rosenberg, 1996. [UML 99] “El Lenguaje Unificado de Modelado”, Grady Booch, James Rumbaugh, Ivar Jacobson, Ed. Addison-Wesley, 1999 [GAM 95] "Patrones de Diseño", Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides, 1995. [TRU 97] Apuntes de Fundamentos Gráficos por Computador. E.U.I.-U.L.P.G.C., Agustín Trujillo Pino, 1997. [ROD 00] Técnicas y Metodología Orientada a Objetos. C++. Juan Carlos Rodríguez del Pino, Margarita Díaz Roca, José Daniel González Domínguez, 2000. 22/03/2017 Visualizador Didáctico de Ejecución

60 Visualizador Didáctico de Ejecución
Referencias (II) Página oficial del depurador GDB: Más información sobre el GDB: Formato STABS del GDB: Página web del proyecto LC99: Visualización de la máquina P: Página de la interfaz gráfica DDD: Página oficial del GCC: Cómo añadir un front-end al GCC: Página oficial del GPC: Página oficial del GNAT: Página oficial de MINGW: Página oficial de CYGWIN: Información sobre el 80386: Comunicación entre procesos en Win32: 22/03/2017 Visualizador Didáctico de Ejecución


Descargar ppt "VISUALIZADOR DIDÁCTICO DE EJECUCIÓN PARA LC99"

Presentaciones similares


Anuncios Google