descargar

Anuncio
Compilando en Pascal
Gonzalo Soriano
[email protected]
28 de marzo de 2009
Resumen
Este apunte no tiene la intensión de enseñarles a usar un compilador,
sino mostrales como compilar y algunas herramientas como el debugger y
los breakpoints que pueden serles útiles al momento de realizar un TP o
un programa extenso.
1.
1.1.
Turbo Pascal 7.0
Compilar un programa
Para mostrar cómo se compila un programa, primero tendremos que tener
el programa. Motivo por el cual se eligió uno sencillo y que tiene como único
propósito la suma de dos números.
El código es el siguiente:
Program ejemplo;
Uses CRT; { Bloque de declaración de unidades. }
Var
{ Bloque de declaración de variables. }
num1, num2, resultado: integer;
Begin
{ Comienzo del Programa Principal. }
{ Limpio la pantalla. }
ClrScr;
{ Pido que ingrese un número 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
writeln (’La resta del primero menos el segundo es de: ’,
num1-num2);
writeln;
{ Espero hasta que el usuario apriete una tecla para salir
del programa. }
writeln (’Presione una tecla para continuar.’);
readkey;
End. { Fin del Programa Principal. }
Ahora que tenemos el programa, debemos compilarlo, pero antes tenemos que
asegurarnos que lo compilaremos en disco. Razón por la cual vamos al menú Compile y, en caso de que no diga Disk en Destination le hacemos clic.
Una vez que nos aseguramos de esto, volvemos a ir al menú Compile, pero
esta vez elegimos Compile; o presionamos las teclas Alt+F9, como lo indica al
costado.
2
Y ahora ya se compilo el programa, solo queda buscarlo en la PC y ejecutarlo
cuando desee.
A continuación veremos el uso de una herramienta muy útil, que se utiliza
para encontrar y solucionar problemas en códigos largos. Esta herramienta consiste en ir ejecutando el código paso a paso, y ver en un cuadro de texto como
se van modificando las variables; y recibe el nombre de debugger.
Lo primero que tenemos que hacer es poner las variables que queremos ver
como varı́an; para esto debemos ir al menú Debug, y dentro de él, a Add match...
ó presionar las teclas Ctr+F7.
Al hacer esto, les aparecerá un cuadro de texto donde ustedes deben ingresar
el nombre de la variable.
Para observar más variables deben repetir el procedimiento anterior para
cada una.
3
Después pueden presionar la tecla F7 o F8 para que el programa se valla ejecutando de a un solo paso. Empezara desde el begin donde empieza el programa
y seguirá hacia abajo. Pinta de verde lı́nea la próxima lı́nea a ser ejecutada.
En las siguientes dos imágenes se puede ver cómo varia el valor de num1
cuando el usuario ingresa el número 5.
4
Cuando tenemos códigos largos y no encontramos un error, puede ser muy
molesto tener que ejecutar todo el programa lı́nea por lı́nea; y más si sabemos
que en las primeras 200 (por decir un número) no se encuentra el error. Y acá es
donde aparecen los breakpoints.
Lo que tenemos que hacer es decir ’supongo que de acá para atrás no esta el
error, ası́ que voy a correr el programa hasta este punto y de acá en adelante
lo seguiré paso a paso’. ¿Como hacemos para decirle eso al compilador?, muy
sencillo, agregamos un breakpoint. Para lo cual tenemos que ir a ’Debugg’ y
luego a ’Add breakpoint...’.
Al hacer esto, les aparecerá cuadro de texto que les preguntara si desean
poner alguna condición para que el compilador detenga la corrida. En caso de
que deseen, pueden modificar ese campo, y aceptar con ’OK’.
Una vez que aceptan, la lı́nea sobre la cual ustedes estaban parados se coloreará de rojo, indicando que ahı́ hay un breakpoint.
5
Después hay que correr el programa, para lo cual debemos ir al menú ’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ı́,
correrá como si lo hubiéramos hecho paso a paso.
Obviamente que si deseamos, también podemos empezar a ejecutar el programa
paso a paso y terminar corriéndolo como recién.
2.
2.1.
Free Pascal y GDB
Compilando en Linux
Para compilar un programa en Linux, al igual que en cualquier plataforma,
necesitamos un código fuente y un compilador.
El compilador que vamos a usar es el Free Pascal, el cual tiene la ventaja de ser
multiplataforma 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
cualquier editor de texto.
Usaremos como ejemplo el siguiente programa:
[4]; o
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 código fuente del programa a compilar (ejemplo.pas) y el
compilador (Free Pascal), simplemente tenemos que abrir una terminal, lı́nea de
comandos o consula y pararnos en el directorio donde esta guardado el archivo
ejemplo.pas. Una vez ubicados en la posición correcta, escribimos:
user$ fpc ejemplo.pas
Si no tubimos problemas al momento de compilar, la salida será de la forma:
Free Pascal Compiler version 2.0.0 [2005/09/09] for i386
Copyright (c) 1993-2005 by Florian Klaempfl
Target OS: Linux for i386
Compiling ejemplo.pas
Linking ejemplo
10 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 informará de la siguiente forma (ver lı́nea 5):
Free Pascal Compiler version 2.0.0 [2005/09/09] for i386
Copyright (c) 1993-2005 by Florian Klaempfl
Target OS: Linux for i386
Compiling ejemplo.pas
ejemplo.pas(4,7) Note: Local variable "aux" not used
Linking ejemplo
10 Lines compiled, 0.2 sec
Si ahora cambiamos el programa usando una variable sin inicializar de la forma:
program ej1;
uses crt;
1 Integrated
Development Environment, o Entorno de Desarrollo Integrado
7
var
int : integer;
begin
writeln(’Funciona!!!!, de entrada int vale’, int);
readln(int);
writeln(’ingresastes el ’,int);
readkey;
end.
Free Pascal nos lo informará de la siguiente forma (ver lı́nea 5):
Free Pascal Compiler version 2.0.0 [2005/09/09] for i386
Copyright (c) 1993-2005 by Florian Klaempfl
Target OS: Linux for i386
Compiling ejemplo.pas
ejemplo.pas(6,2) Warning: Variable "int" does not seem to be initialized
Linking ejemplo
10 Lines compiled, 0.1 sec
Si nos hubieramos olvidado de declarar la variable int, Free Pascal de la siguiente forma:
Free Pascal Compiler version 2.0.0 [2005/09/09] for i386
Copyright (c) 1993-2005 by Florian Klaempfl
Target OS: Linux for i386
Compiling ejemplo.pas
ejemplo.pas(7,9) Error: Wrong number of parameters specified
ejemplo.pas(7,13) Error: Illegal expression
ejemplo.pas(8,28) Error: Wrong number of parameters specified
ejemplo.pas(8,32) Error: Illegal expression
ejemplo.pas(11) Fatal: There were 4 errors compiling module, stopping
ejemplo.pas(11) Error: Compilation aborted
Error: /usr/bin/ppc386 returned an error exitcode (normal if you did not
specifiy a source file to be compiled)
Notar que en la última lı́nea nos indica que el programa no fue compilado.
2.2.
2.2.1.
Primeros pasos con el GDB
Compilar el fuente
Si suponemos que nuestro programa se llama ejemplo.pas entonces usualmente lo compiları́amos de la forma:
user$ fpc ejemplo.pas
Pero para informarle ahora tenemos que informarle al compilador que lo tiene
que compilar de una forma particular para que después 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 lı́nea de comandos, y una
vez parados en ella con solo poner user$ gdb ejemplo.pas 2 iniciamos el GDB.
Si queremos pasarle parámetros al programa que vamos a ejecutar, éste es el
momento de pasarlos con el comando
set args param1 param2 ... paramN
Para empezar a ejecutar el código fuente del programa que queremos depurar,
tenemos que usar el comando start. Una vez que empezamos a debuggear
tenemos distintos comandos, que usaremos en función de nuestras necesidades;
los más comunes son:
start: Inicia la ejecución del programa, pero no ejecuta ninguna sentencia.
Su llamada es (gdb) start.
step: Ejecuta la próxima instrucción (equivalente al Trace into [F7] de
Pascal). Su llamada es (gdb) step n. Donde n es la cantidad de pasos
que tiene que seguir, si no se lo
next: Ejecuta la próxima instrucción, pero si es un procedimiento o una
función la ejecuta en un solo paso. Equivalente al Step over [F8] de Pascal.
Su llamada es simplemente (gdb) next.
list: Muestra la próxima instrucción a ejecutarse y su contexto. Su llamada
es simplemente (gdb) list.
print: Muestra el valor de una variable, una expresión lógica, o la llamada
a una función. Su llamada es (gdb) print param, donde param es el
nombre variable a observar, la llamada a la función o la expresión.
break: Es el equivalente a los breakpoints del Turbo Pascal. Su función
es de detener la corrida del programa en una lı́nea en particular; pero sin
terminar la ejecución. El break puede llamarse de las siguientes formas:
• (gdb) break n. Inserta un breakpoint en la n-esima lı́nea del fuente
que estamos ejecutando.
• (gdb) break fuente.pas:n. Inserta un breakpoint en la n-esima
lı́nea del archvio fuente.pas.
• (gdb) break funcion. Inserta un breakpoint al comienzo de la función indicada.
delete N : Borra el breakpoint N. Su llamada es simplemente (gdb) delete N.
continue: Continúa la ejecución del programa hasta el próximo breakpoint
o el fin del programa. Su llamada es simplemente (gdb) continue.
run: Corre, desde el principio, el programa hasta encontrar un breakpoint
o el fin del programa. Su llamada es simplemente (gdb) run.
help: Muestra la ayuda del GDB. Su llamada es simplemente (gdb) help.
2 Siendo
ejemplo.pas el nombre del programa a debuggear.
9
help running: Muestra los comandos básicos de GDB para debuggear
un programa. Su llamada es simplemente (gdb) help running.
help command: Muestra una breve descripción del comando. Su llamada
es 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
Índice
1. Turbo Pascal 7.0
2. Free Pascal y GDB
2.1. Compilando en Linux . . .
2.2. Primeros pasos con el GDB
2.2.1. Compilar el fuente .
2.2.2. Iniciar el GDB . . .
1
.
.
.
.
.
.
.
.
11
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
6
6
8
8
9
Descargar