1 / 60

VISUALIZADOR DIDÁCTICO DE EJECUCIÓN PARA LC99

Tutores: Miguel Ángel Pérez Aguiar José Fortes Gálvez. VISUALIZADOR DIDÁCTICO DE EJECUCIÓN PARA LC99. Autor: Daniel Bautista de Cabo. Facultad de Informática Universidad de Las Palmas de G.C. El proceso de la ejecución. El Visualizador de Ejecución. Contenidos. Introducción

bree-kemp
Download Presentation

VISUALIZADOR DIDÁCTICO DE EJECUCIÓN PARA LC99

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. El proceso de la ejecución Visualizador Didáctico de Ejecución

  3. El Visualizador de Ejecución Visualizador Didáctico de Ejecución

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

  5. ¿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” Visualizador Didáctico de Ejecución

  6. ESTADO INICIAL

  7. 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 Visualizador Didáctico de Ejecución

  8. 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 Visualizador Didáctico de Ejecución

  9. 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) Visualizador Didáctico de Ejecución

  10. 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 Visualizador Didáctico de Ejecución

  12. METODOLOGÍA

  13. 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 Visualizador Didáctico de Ejecución

  14. Metodología (II) Visualizador Didáctico de Ejecución

  15. RECURSOS UTILIZADOS

  16. 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 Visualizador Didáctico de Ejecución

  17. PLANIFICACIÓN Y TIEMPOS

  18. Planificación (300 horas) Visualizador Didáctico de Ejecución

  19. Tiempos y porcentajes (300 horas) Visualizador Didáctico de Ejecución

  20. ANÁLISIS

  21. 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) Visualizador Didáctico de Ejecución

  22. 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 Visualizador Didáctico de Ejecución

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

  24. 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) Visualizador Didáctico de Ejecución

  25. 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? 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 Visualizador Didáctico de Ejecución

  27. 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 Visualizador Didáctico de Ejecución

  28. DISEÑO

  29. Diseño (I) Visualizador Didáctico de Ejecución

  30. 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 Visualizador Didáctico de Ejecución

  31. Diseño (III) Visualizador Didáctico de Ejecución

  32. 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 Visualizador Didáctico de Ejecución

  33. IMPLEMENTACIÓN

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

  35. Implementación (II): fork VDE fork • En Windows: Win32 API • CreateProcess() • Anonymous Pipes VDE (hijo) VDE exec pipe GDB dup 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 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 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 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 Visualizador Didáctico de Ejecución

  40. 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 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 Visualizador Didáctico de Ejecución

  42. 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.) 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 Visualizador Didáctico de Ejecución

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

  46. PRUEBAS

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

  48. 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 Visualizador Didáctico de Ejecución

  49. 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 Visualizador Didáctico de Ejecución

  50. RESULTADOS

More Related