La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

VISUALIZADOR DIDÁCTICO DE EJECUCIÓN PARA LC99 Tutores: Miguel Ángel Pérez Aguiar José Fortes Gálvez Facultad de Informática Universidad de Las Palmas de.

Presentaciones similares


Presentación del tema: "VISUALIZADOR DIDÁCTICO DE EJECUCIÓN PARA LC99 Tutores: Miguel Ángel Pérez Aguiar José Fortes Gálvez Facultad de Informática Universidad de Las Palmas de."— Transcripción de la presentación:

1 VISUALIZADOR DIDÁCTICO DE EJECUCIÓN PARA LC99 Tutores: Miguel Ángel Pérez Aguiar José Fortes Gálvez Facultad de Informática Universidad de Las Palmas de G.C. Autor: Daniel Bautista de Cabo

2 31/10/2013Visualizador Didáctico de Ejecución2 El proceso de la ejecución

3 31/10/2013Visualizador Didáctico de Ejecución3 El Visualizador de Ejecución

4 31/10/2013Visualizador Didáctico de Ejecución4 Contenidos Introducción Estado inicial del tema Metodología seguida Recursos utilizados Planificación y desarrollo del proyecto Resultados y conclusiones Trabajo futuro

5 31/10/2013Visualizador Didáctico de Ejecución5 ¿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

6 ESTADO INICIAL

7 31/10/2013Visualizador Didáctico de Ejecución7 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

8 31/10/2013Visualizador Didáctico de Ejecución8 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

9 31/10/2013Visualizador Didáctico de Ejecución9 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)

10 31/10/2013Visualizador Didáctico de Ejecución10

11 31/10/2013Visualizador Didáctico de Ejecución11 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

12 METODOLOGÍA

13 31/10/2013Visualizador Didáctico de Ejecución13 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

14 31/10/2013Visualizador Didáctico de Ejecución14 Metodología (II)

15 RECURSOS UTILIZADOS

16 31/10/2013Visualizador Didáctico de Ejecución16 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

17 PLANIFICACIÓN Y TIEMPOS

18 31/10/2013Visualizador Didáctico de Ejecución18 Planificación (300 horas)

19 31/10/2013Visualizador Didáctico de Ejecución19 Tiempos y porcentajes (300 horas)

20 ANÁLISIS

21 31/10/2013Visualizador Didáctico de Ejecución21 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 31/10/2013Visualizador Didáctico de Ejecución22 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

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

24 31/10/2013Visualizador Didáctico de Ejecución24 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)

25 31/10/2013Visualizador Didáctico de Ejecución25 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?

26 31/10/2013Visualizador Didáctico de Ejecución26 Los STABs 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.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

27 31/10/2013Visualizador Didáctico de Ejecución27 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

28 DISEÑO

29 31/10/2013Visualizador Didáctico de Ejecución29 Diseño (I)

30 31/10/2013Visualizador Didáctico de Ejecución30 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

31 31/10/2013Visualizador Didáctico de Ejecución31 Diseño (III)

32 31/10/2013Visualizador Didáctico de Ejecución32 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

33 IMPLEMENTACIÓN

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

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

36 31/10/2013Visualizador Didáctico de Ejecución36 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

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

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

39 31/10/2013Visualizador Didáctico de Ejecución39 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

40 31/10/2013Visualizador Didáctico de Ejecución40 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

41 31/10/2013Visualizador Didáctico de Ejecución41 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

42 31/10/2013Visualizador Didáctico de Ejecución42

43 31/10/2013Visualizador Didáctico de Ejecución43 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.)

44 31/10/2013Visualizador Didáctico de Ejecución44 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

45 31/10/2013Visualizador Didáctico de Ejecución45 Scripts adaptadores (III) C (gcc) C++ (g++) Fortran (g77) Ada (gnat) Pascal (gpc) LC99 (lc99) script

46 PRUEBAS

47 31/10/2013Visualizador Didáctico de Ejecución47 Pruebas (I) Se plantearon varias pruebas: Batería de programas Pruebas de usuario Pruebas de sistema o entorno Pruebas de memoria

48 31/10/2013Visualizador Didáctico de Ejecución48 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

49 31/10/2013Visualizador Didáctico de Ejecución49 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

50 RESULTADOS

51 31/10/2013Visualizador Didáctico de Ejecución51 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

52 31/10/2013Visualizador Didáctico de Ejecución52

53 31/10/2013Visualizador Didáctico de Ejecución53

54 31/10/2013Visualizador Didáctico de Ejecución54 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

55 31/10/2013Visualizador Didáctico de Ejecución55 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

56 TRABAJO FUTURO

57 31/10/2013Visualizador Didáctico de Ejecución57 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

58 FIN

59 31/10/2013Visualizador Didáctico de Ejecución59 Referencias (I) [PER 98] Traductores e Intérpretes. E.U.I.-U.L.P.G.C., Miguel Ángel Pérez Aguiar, [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, [PEM 82] "P4. Pascal Implementation: Compiler and Assembler/Interpreter", Steven Pemberton and Martin Daniels, [ROS 96] "How Debuggers Work", Jonathan Rosenberg, [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, [TRU 97] Apuntes de Fundamentos Gráficos por Computador. E.U.I.- U.L.P.G.C., Agustín Trujillo Pino, [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.

60 31/10/2013Visualizador Didáctico de Ejecución60 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:


Descargar ppt "VISUALIZADOR DIDÁCTICO DE EJECUCIÓN PARA LC99 Tutores: Miguel Ángel Pérez Aguiar José Fortes Gálvez Facultad de Informática Universidad de Las Palmas de."

Presentaciones similares


Anuncios Google