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 - web.fi.uba.arweb.fi.uba.ar/~bortega/algoritmos_I/descargas/Compilando en Pascal.pdf · Su llamada es (gdb) print param, donde param es el nombre variable a

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Compilando en Pascal - web.fi.uba.arweb.fi.uba.ar/~bortega/algoritmos_I/descargas/Compilando en Pascal.pdf · Su llamada es (gdb) print param, donde param es el nombre variable a

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

Page 2: Compilando en Pascal - web.fi.uba.arweb.fi.uba.ar/~bortega/algoritmos_I/descargas/Compilando en Pascal.pdf · Su llamada es (gdb) print param, donde param es el nombre variable a

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

Page 3: Compilando en Pascal - web.fi.uba.arweb.fi.uba.ar/~bortega/algoritmos_I/descargas/Compilando en Pascal.pdf · Su llamada es (gdb) print param, donde param es el nombre variable a

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 varıan; 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

Page 4: Compilando en Pascal - web.fi.uba.arweb.fi.uba.ar/~bortega/algoritmos_I/descargas/Compilando en Pascal.pdf · Su llamada es (gdb) print param, donde param es el nombre variable a

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 lınea la proxima lınea a ser ejecutada.

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

4

Page 5: Compilando en Pascal - web.fi.uba.arweb.fi.uba.ar/~bortega/algoritmos_I/descargas/Compilando en Pascal.pdf · Su llamada es (gdb) print param, donde param es el nombre variable a

Cuando tenemos codigos largos y no encontramos un error, puede ser muymolesto tener que ejecutar todo el programa lınea por lınea; 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 lınea sobre la cual ustedes estaban parados se col-oreara de rojo, indicando que ahı hay un breakpoint.

5

Page 6: Compilando en Pascal - web.fi.uba.arweb.fi.uba.ar/~bortega/algoritmos_I/descargas/Compilando en Pascal.pdf · Su llamada es (gdb) print param, donde param es el nombre variable a

Despues hay que correr el programa, para lo cual debemos ir al menu ’Run’y 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

Page 7: Compilando en Pascal - web.fi.uba.arweb.fi.uba.ar/~bortega/algoritmos_I/descargas/Compilando en Pascal.pdf · Su llamada es (gdb) print param, donde param es el nombre variable a

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, lınea 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 lınea 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

Page 8: Compilando en Pascal - web.fi.uba.arweb.fi.uba.ar/~bortega/algoritmos_I/descargas/Compilando en Pascal.pdf · Su llamada es (gdb) print param, donde param es el nombre variable a

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 lınea 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 lınea 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 compilarıamos 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

Page 9: Compilando en Pascal - web.fi.uba.arweb.fi.uba.ar/~bortega/algoritmos_I/descargas/Compilando en Pascal.pdf · Su llamada es (gdb) print param, donde param es el nombre variable a

2.2.2. Iniciar el GDB

Como dijimos en el resumen, el GDB se usa por lınea 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 lınea en particular; pero sinterminar la ejecucion. El break puede llamarse de las siguientes formas:

• (gdb) break n. Inserta un breakpoint en la n-esima lınea del fuenteque estamos ejecutando.

• (gdb) break fuente.pas:n. Inserta un breakpoint en la n-esimalınea del archvio fuente.pas.

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

delete N : 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

Page 10: Compilando en Pascal - web.fi.uba.arweb.fi.uba.ar/~bortega/algoritmos_I/descargas/Compilando en Pascal.pdf · Su llamada es (gdb) print param, donde param es el nombre variable a

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

Page 11: Compilando en Pascal - web.fi.uba.arweb.fi.uba.ar/~bortega/algoritmos_I/descargas/Compilando en Pascal.pdf · Su llamada es (gdb) print param, donde param es el nombre variable a

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