11
Compilando en Pascal Gonzalo Soriano gsorianob@gmail.com 28 de marzo de 2009 Resumen Este apunte no tiene la intensi´ on de ense˜ narles a usar un compilador, sino mostrales como compilar y algunas herramientas como el debugger y los breakpoints que pueden serles ´ utiles al momento de realizar un TP o un programa extenso. 1. Turbo Pascal 7.0 1.1. Compilar un programa Para mostrar c´ omo se compila un programa, primero tendremos que tener el programa. Motivo por el cual se eligi´ o uno sencillo y que tiene como ´ unico prop´ osito la suma de dos n´ umeros. El c´ odigo es el siguiente: Program ejemplo; Uses CRT; { Bloque de declaraci´ on de unidades. } Var { Bloque de declaraci´ on de variables. } num1, num2, resultado: integer; Begin { Comienzo del Programa Principal. } { Limpio la pantalla. } ClrScr; { Pido que ingrese un n´ umero y lo leo por pantalla. } write (’Ingrese un numero entero: ’); readln (num1); writeln; write (’Ingrese el segundo numero entero: ’); readln (num2); writeln; { Hago la suma de num1 + num2. } resultado := num1 + num2; { Imprimo por pantalla el resultado de la suma. } writeln (’El resultado de la suma es: ’,resultado); writeln; { Hago la resta sin guardarla en ninguna variable e imprimo el resultado. } 1

Compilando en Pascal

Embed Size (px)

DESCRIPTION

Ejemplos de compilacion en pascal

Citation preview

  • Compilando en Pascal

    Gonzalo [email protected]

    28 de marzo de 2009

    Resumen

    Este apunte no tiene la intension de ensenarles a usar un compilador,sino mostrales como compilar y algunas herramientas como el debugger ylos breakpoints que pueden serles utiles al momento de realizar un TP oun programa extenso.

    1. Turbo Pascal 7.0

    1.1. Compilar un programa

    Para mostrar como se compila un programa, primero tendremos que tenerel programa. Motivo por el cual se eligio uno sencillo y que tiene como unicoproposito la suma de dos numeros.El codigo es el siguiente:

    Program ejemplo;Uses CRT; { Bloque de declaracion de unidades. }Var { Bloque de declaracion de variables. }

    num1, num2, resultado: integer;Begin { Comienzo del Programa Principal. }

    { Limpio la pantalla. }ClrScr;{ Pido que ingrese un numero y lo leo por pantalla. }write (Ingrese un numero entero: );readln (num1);writeln;write (Ingrese el segundo numero entero: );readln (num2);writeln;{ Hago la suma de num1 + num2. }resultado := num1 + num2;{ Imprimo por pantalla el resultado de la suma. }writeln (El resultado de la suma es: ,resultado);writeln;{ Hago la resta sin guardarla en ninguna variable e imprimoel resultado. }

    1

  • writeln (La resta del primero menos el segundo es de: ,num1-num2);

    writeln;{ Espero hasta que el usuario apriete una tecla para salirdel programa. }

    writeln (Presione una tecla para continuar.);readkey;

    End. { Fin del Programa Principal. }

    Ahora que tenemos el programa, debemos compilarlo, pero antes tenemos queasegurarnos que lo compilaremos en disco. Razon por la cual vamos al menu Com-pile y, en caso de que no diga Disk en Destination le hacemos clic.

    Una vez que nos aseguramos de esto, volvemos a ir al menu Compile, peroesta vez elegimos Compile; o presionamos las teclas Alt+F9, como lo indica alcostado.

    2

  • Y ahora ya se compilo el programa, solo queda buscarlo en la PC y ejecutarlocuando desee.

    A continuacion veremos el uso de una herramienta muy util, que se utilizapara encontrar y solucionar problemas en codigos largos. Esta herramienta con-siste en ir ejecutando el codigo paso a paso, y ver en un cuadro de texto comose van modificando las variables; y recibe el nombre de debugger.

    Lo primero que tenemos que hacer es poner las variables que queremos vercomo varan; para esto debemos ir al menu Debug, y dentro de el, a Add match...o presionar las teclas Ctr+F7.

    Al hacer esto, les aparecera un cuadro de texto donde ustedes deben ingresarel nombre de la variable.

    Para observar mas variables deben repetir el procedimiento anterior paracada una.

    3

  • Despues pueden presionar la tecla F7 o F8 para que el programa se valla eje-cutando de a un solo paso. Empezara desde el begin donde empieza el programay seguira hacia abajo. Pinta de verde lnea la proxima lnea a ser ejecutada.

    En las siguientes dos imagenes se puede ver como varia el valor de num1cuando el usuario ingresa el numero 5.

    4

  • Cuando tenemos codigos largos y no encontramos un error, puede ser muymolesto tener que ejecutar todo el programa lnea por lnea; y mas si sabemosque en las primeras 200 (por decir un numero) no se encuentra el error. Y aca esdonde aparecen los breakpoints.Lo que tenemos que hacer es decir supongo que de aca para atras no esta elerror, as que voy a correr el programa hasta este punto y de aca en adelantelo seguire paso a paso. Como hacemos para decirle eso al compilador?, muysencillo, agregamos un breakpoint. Para lo cual tenemos que ir a Debugg yluego a Add breakpoint....

    Al hacer esto, les aparecera cuadro de texto que les preguntara si deseanponer alguna condicion para que el compilador detenga la corrida. En caso deque deseen, pueden modificar ese campo, y aceptar con OK.

    Una vez que aceptan, la lnea sobre la cual ustedes estaban parados se col-oreara de rojo, indicando que ah hay un breakpoint.

    5

  • Despues hay que correr el programa, para lo cual debemos ir al menu Runy nuevamente a Run, como indica la figura, o presionando las teclas Ctrl+F9.

    De esta manera, el programa se ejecutara hasta ese punto, y a partir de all,correra como si lo hubieramos hecho paso a paso.Obviamente que si deseamos, tambien podemos empezar a ejecutar el programapaso a paso y terminar corriendolo como recien.

    2. Free Pascal y GDB

    2.1. Compilando en Linux

    Para compilar un programa en Linux, al igual que en cualquier plataforma,necesitamos un codigo fuente y un compilador.El compilador que vamos a usar es el Free Pascal, el cual tiene la ventaja de sermultiplataforma y lo podemos obtener de http://www.freepascal.org/download.var.Ahora lo que nos falta es el programa, de lo cual nos tenemos que encargar

    6

  • nosotros :). Para escribirlo podemos usar una IDE1 como el Anjuta [4]; ocualquier editor de texto.Usaremos como ejemplo el siguiente programa:

    Programa ejemplo.pas

    program ej1;uses crt;var

    int : integer;begin

    writeln(Funciona!!!!);readln(int);writeln(ingresastes el ,int);readkey;

    end.

    Ahora que tenemos el codigo fuente del programa a compilar (ejemplo.pas) y elcompilador (Free Pascal), simplemente tenemos que abrir una terminal, lnea decomandos o consula y pararnos en el directorio donde esta guardado el archivoejemplo.pas. Una vez ubicados en la posicion correcta, escribimos:

    user$ fpc ejemplo.pas

    Si no tubimos problemas al momento de compilar, la salida sera de la forma:

    Free Pascal Compiler version 2.0.0 [2005/09/09] for i386Copyright (c) 1993-2005 by Florian KlaempflTarget OS: Linux for i386Compiling ejemplo.pasLinking ejemplo10 Lines compiled, 0.6 sec

    Si al mismo programa le agregamos una variable que no se usa, por ejemplo:int, aux : integer;

    Free Pascal nos lo informara de la siguiente forma (ver lnea 5):

    Free Pascal Compiler version 2.0.0 [2005/09/09] for i386Copyright (c) 1993-2005 by Florian KlaempflTarget OS: Linux for i386Compiling ejemplo.pasejemplo.pas(4,7) Note: Local variable "aux" not usedLinking ejemplo10 Lines compiled, 0.2 sec

    Si ahora cambiamos el programa usando una variable sin inicializar de la forma:

    program ej1;uses crt;

    1Integrated Development Environment, o Entorno de Desarrollo Integrado

    7

  • varint : integer;

    beginwriteln(Funciona!!!!, de entrada int vale, int);readln(int);writeln(ingresastes el ,int);readkey;

    end.

    Free Pascal nos lo informara de la siguiente forma (ver lnea 5):

    Free Pascal Compiler version 2.0.0 [2005/09/09] for i386Copyright (c) 1993-2005 by Florian KlaempflTarget OS: Linux for i386Compiling ejemplo.pasejemplo.pas(6,2) Warning: Variable "int" does not seem to be initializedLinking ejemplo10 Lines compiled, 0.1 sec

    Si nos hubieramos olvidado de declarar la variable int, Free Pascal de la sigu-iente forma:

    Free Pascal Compiler version 2.0.0 [2005/09/09] for i386Copyright (c) 1993-2005 by Florian KlaempflTarget OS: Linux for i386Compiling ejemplo.pasejemplo.pas(7,9) Error: Wrong number of parameters specifiedejemplo.pas(7,13) Error: Illegal expressionejemplo.pas(8,28) Error: Wrong number of parameters specifiedejemplo.pas(8,32) Error: Illegal expressionejemplo.pas(11) Fatal: There were 4 errors compiling module, stoppingejemplo.pas(11) Error: Compilation abortedError: /usr/bin/ppc386 returned an error exitcode (normal if you did notspecifiy a source file to be compiled)

    Notar que en la ultima lnea nos indica que el programa no fue compilado.

    2.2. Primeros pasos con el GDB

    2.2.1. Compilar el fuente

    Si suponemos que nuestro programa se llama ejemplo.pas entonces usual-mente lo compilaramos de la forma:

    user$ fpc ejemplo.pas

    Pero para informarle ahora tenemos que informarle al compilador que lo tieneque compilar de una forma particular para que despues podamos usar el GDB;y eso lo hacemos con el flag -g antes del nombre del programa.

    user$ fpc -g ejemplo.pas

    8

  • 2.2.2. Iniciar el GDB

    Como dijimos en el resumen, el GDB se usa por lnea de comandos, y unavez parados en ella con solo poner user$ gdb ejemplo.pas 2 iniciamos el GDB.Si queremos pasarle parametros al programa que vamos a ejecutar, este es elmomento de pasarlos con el comando

    set args param1 param2 ... paramN

    Para empezar a ejecutar el codigo fuente del programa que queremos depurar,tenemos que usar el comando start. Una vez que empezamos a debuggeartenemos distintos comandos, que usaremos en funcion de nuestras necesidades;los mas comunes son:

    start: Inicia la ejecucion del programa, pero no ejecuta ninguna sentencia.Su llamada es (gdb) start.

    step: Ejecuta la proxima instruccion (equivalente al Trace into [F7] dePascal). Su llamada es (gdb) step n. Donde n es la cantidad de pasosque tiene que seguir, si no se lo

    next: Ejecuta la proxima instruccion, pero si es un procedimiento o unafuncion la ejecuta en un solo paso. Equivalente al Step over [F8] de Pascal.Su llamada es simplemente (gdb) next.

    list: Muestra la proxima instruccion a ejecutarse y su contexto. Su llamadaes simplemente (gdb) list.

    print: Muestra el valor de una variable, una expresion logica, o la llamadaa una funcion. Su llamada es (gdb) print param, donde param es elnombre variable a observar, la llamada a la funcion o la expresion.

    break: Es el equivalente a los breakpoints del Turbo Pascal. Su funciones de detener la corrida del programa en una lnea en particular; pero sinterminar la ejecucion. El break puede llamarse de las siguientes formas:

    (gdb) break n. Inserta un breakpoint en la n-esima lnea del fuenteque estamos ejecutando.

    (gdb) break fuente.pas:n. Inserta un breakpoint en la n-esimalnea del archvio fuente.pas.

    (gdb) break funcion. Inserta un breakpoint al comienzo de la fun-cion indicada.

    deleteN : Borra el breakpoint N. Su llamada es simplemente (gdb) delete N.

    continue: Continua la ejecucion del programa hasta el proximo breakpointo el fin del programa. Su llamada es simplemente (gdb) continue.

    run: Corre, desde el principio, el programa hasta encontrar un breakpointo el fin del programa. Su llamada es simplemente (gdb) run.

    help: Muestra la ayuda del GDB. Su llamada es simplemente (gdb) help.2Siendo ejemplo.pas el nombre del programa a debuggear.

    9

  • help running: Muestra los comandos basicos de GDB para debuggearun programa. Su llamada es simplemente (gdb) help running.

    help command: Muestra una breve descripcion del comando. Su llamadaes simplemente (gdb) help command.

    q/quit: Sale del GDB. Su llamada es simplemente (gdb) q.

    Referencias

    [1] http://sourceware.org/gdb/

    [2] http://www.gnu.org/software/ddd/

    [3] http://www.freepascal.org/

    [4] http://www.anjuta.org/

    10

  • Indice

    1. Turbo Pascal 7.0 1

    2. Free Pascal y GDB 62.1. Compilando en Linux . . . . . . . . . . . . . . . . . . . . . . . . 62.2. Primeros pasos con el GDB . . . . . . . . . . . . . . . . . . . . . 8

    2.2.1. Compilar el fuente . . . . . . . . . . . . . . . . . . . . . . 82.2.2. Iniciar el GDB . . . . . . . . . . . . . . . . . . . . . . . . 9

    11