VISUALIZADOR DIDÁCTICO DE EJECUCIÓN PARA LC99

Slides:



Advertisements
Presentaciones similares
SIES – SISTEMA INTEGRADO DE EDUCACIÓN SUPERIOR
Advertisements

1 Datos sobre webloggers Datos extraidos de la encuesta a webloggers disponibles en la web de los autores.
SISTEMAS II CICLO DE VIDA.
Los números del 0 al cero uno dos tres cuatro cinco 6 7 8
Universidad San Martín de Porres
1 LA UTILIZACION DE LAS TIC EN LAS MICROEMPRESAS GALLEGAS. AÑO mayo 2005.
1 LA UTILIZACION DE LAS TIC EN LAS PYMES GALLEGAS AÑO de Junio de 2005.
1 INFORME RESUMEN SOBRE EL NIVEL DE UTILIZACION DE LAS TIC EN LAS EMPRESAS GALLEGAS ( Resumen PYMES ) Noviembre de 2004.
AYUDA A LA FUNCIÓN DOCENTE Internet
TEMA 5.- 1ª PARTE. EL A.O. Y SUS APLICACIONES
TEMA 2 MÚLTIPLOS Y DIVISORES
02- Plan Organización Docente v.2 Noviembre 2009 SIES – SISTEMA INTEGRADO DE EDUCACIÓN SUPERIOR.
02- PLAN DOCENTE Febrero 2009 SIES – SISTEMA INTEGRADO DE EDUCACIÓN SUPERIOR.
01- OFERTA FORMATIVA v.2 Noviembre 2009 SIES – SISTEMA INTEGRADO DE EDUCACIÓN SUPERIOR.
Aladdín-respuestas 1.Vivía 2.Era 3.Amaba 4.Quería 5.Gustaban 6.Se sentía 7.Salía 8.Tenía 9.Decidió 10.escapó 11. Se vistió 12. Conoció 13. Vio 14. Pensó
Respuestas Buscando a Nemo.
Clase 16 Jairo y su hija. La mujer con flujo de sangre. Dos ciegos.
SIMATICA V2.0. Automatización de Viviendas con Simatic S7-200
Introduccion a UML Wilson Peláez Hernández
Mulán /75 puntos. 1.Querían 2.Gustaban 3.Escuchó 4.Dijo 5.Tenía 6.Ayudaron 7.Maquillaron 8.Arreglaron 9.Dio 10.Estaba 11.Iba 12.Quería 13.Salió 14.Gritó
CLASE 3 SOFTWARE DEL MICROPROCESADOR
Prototipo de compilador didáctico del lenguaje LC99
1 XML Extensible Markup Language HTML HyperText Markup Language normas06_01.xml.
1 MEJORA DE UN ANALIZADOR AUTOMÁTICO DE ESTILOS PARA TEXTOS EN INGLÉS TÉCNICO: DESARROLLO DE LA AYUDA DE USUARIO. Madrid 2001Pilar Santamaría Rebollo.
60 razones para seguir vivo
Campus virtual Autoevaluaciones Teletutorías Salas de estudio Clases en línea Contratos didácticos Proyecto E.D.U.F. Universidad Universidad.
1 Reporte Componente Impacto Por Orden Territorial Por Departamento No Disponible ND *Los indicadores para el año 2008 no fueron calculados.
Funciones Excel. Parte 1. Introducción 2 Una función Excel es una fórmula o un procedimiento que se realiza en el ambiente de Visual Basic, fuera de.
Phone2Wave-Server Manual de Operación.
Ing. Enrique Meneses. Son las instrucciones detalladas que controlan el funcionamiento de un sistema de computación. Funciones: 1. Administrar los recursos.
Parte 3. Descripción del código de una función 1.
Trascendencia de este curso Curso Introducción a la Computación 1
EL OSO APRENDIZ Y SUS AMIGOS
Introducción al lenguaje de especificación JML
1 PROYECTO DE PRESUPUESTO DE EGRESOS DE LA FEDERACION 2002 COORDINACIÓN DE POLITICA ECONOMICA GP-PRD.
Técnico en programación de Software
Ecuaciones Cuadráticas
C REACIÓN DE B LOGS EN ESPOL Profesora: Eva María Mera Intriago Escuela Superior Politécnica del Litoral Impulsando la sociedad del conocimiento Instituto.
¡Primero mira fijo a la bruja!
Sintaxis básica del lenguaje
Modelos de Proceso del Software
¿Qué es un conjunto? Un conjunto es una colección de objetos considerada como un todo. Los objetos de un conjunto son llamados elementos o miembros del.
Proyecto Fin de Carrera E.T.S. Ingeniería Informática 26 de Septiembre de 2006 DESARROLLO DE UN COMPONENTE TECLADO ALUMNO: Fco. Javier Sánchez Ramos TUTORES:
Ingeniería del Software
Ingeniería del Software
INTRODUCCIÓN A LA PROGRAMACIÓN
UNIDAD 1: “ Introducción al Lenguaje Unificado de Modelado ”
© Manuel ColladoHerramientas software-1 Herramientas software Clasificación. Integración de herramientas.
Aspectos Avanzados de la Tecnología de Objetos
0 1 ¿Qué hora es? By: Craig Tillmann Revised by: Malinda Seger Coppell High School Coppell, TX.
INGENIERÍA TÉCNICA EN INFORMÁTICA DE GESTIÓN PROYECTO FIN DE CARRERA
Módulo 2: Condiciones Generales de Trabajo
Desarrollo Orientado a Objetos con UML
Introducción al Software
Con fines prácticos se puede clasificar al software en tres tipos: Software de sistema Software de programación Software de aplicación.
Realimentacion de la salida
Unified Modeling Language (Lenguaje de Modelamiento unificado)
FACULTAD DE DERECHO PROTAGONISTAS PROMOCIÓN aniversario
Estructuras de control
FUNDAMENTOS DE CALIDAD EN LA GESTIÓN PÚBLICA
TRADUCTOR DE UN PROGRAMA
Prácticas de Organización de la Información y Redes
SOFTWARE DE PROGRAMACIÓN
Programación de Sistemas
TIPOS DE SOFTWARE Se denomina software a un programa, equipamiento lógico o soporte lógico necesario para hacer posible la realización de una tarea con.
LENGUAJES DE PROGRAMACIÓN
INGENIERÍA TÉCNICA EN INFORMÁTICA DE GESTIÓN PROYECTO FIN DE CARRERA
INTRODUCCIÓN A LA INGENIERÍA DEL SOFTWARE
Roles de Open UP.
Unified Modeling Language (Lenguaje de Modelamiento unificado)
Transcripción de la presentación:

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.

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

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

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

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

ESTADO INICIAL

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

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

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

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

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

METODOLOGÍA

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

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

RECURSOS UTILIZADOS

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

PLANIFICACIÓN Y TIEMPOS

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

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

ANÁLISIS

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

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

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

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

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

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

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

DISEÑO

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

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

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

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

IMPLEMENTACIÓN

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

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

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

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

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

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

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

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

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

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

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

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

PRUEBAS

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

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

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

RESULTADOS

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

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

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

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

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

TRABAJO FUTURO

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

FIN

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

Visualizador Didáctico de Ejecución Referencias (II) Página oficial del depurador GDB: http://www.gnu.org/software/gdb/gdb.html Más información sobre el GDB: http://developer.apple.com/techpubs/macosx/DeveloperTools/ Formato STABS del GDB: http://sources.redhat.com/gdb/onlinedocs/stabs.html Página web del proyecto LC99: http://serdis.dis.ulpgc.es/~itis-ti2/PrototipodeCompiladorDidacticoLC99/ Visualización de la máquina P: http://rw4.cs.uni-sb.de/~martin/COMP/info.html Página de la interfaz gráfica DDD: http://www.gnu.org/software/ddd/ Página oficial del GCC: http://gnuwww.epfl.ch/software/gcc/gcc.html Cómo añadir un front-end al GCC: http://ldp.kernelnotes.de/HOWTO/GCC-Frontend-HOWTO.html#toc5 Página oficial del GPC: http://www.gnu-pascal.de Página oficial del GNAT: http://www.gnat.com Página oficial de MINGW: http://www.mingw.org Página oficial de CYGWIN: http://www.cygwin.com Información sobre el 80386: http://www.alpertron.com.ar/80386.HTM Comunicación entre procesos en Win32: http://bdn.borland.com/article/0,1410,10387,00.html 22/03/2017 Visualizador Didáctico de Ejecución