Foros del Web » Programación para mayores de 30 ;) » Programación General »

Comenzando a programar: 9- El depurador de Free Pascal

Estas en el tema de Comenzando a programar: 9- El depurador de Free Pascal en el foro de Programación General en Foros del Web. Programando desde 0: 9- Lección extra: El DEPURADOR. Bien, antes de continuar aprenderemos a utilizar el DEBUGER (depurador). Esta es una herramienta del compilador especialmente ...
  #1 (permalink)  
Antiguo 22/11/2011, 11:32
 
Fecha de Ingreso: enero-2011
Mensajes: 51
Antigüedad: 13 años, 11 meses
Puntos: 21
Comenzando a programar: 9- El depurador de Free Pascal

Programando desde 0: 9- Lección extra: El DEPURADOR.

Bien, antes de continuar aprenderemos a utilizar el DEBUGER (depurador). Esta es una herramienta del compilador especialmente pensada para detectar errores lógicos en nuestros códigos y que, si la aprendemos a utilizar bien, resultará super útil.

En inglés bug significa insecto o gusano. En programación, se le atribuye el término bug a los errores lógicos que un programa pueda tener. Es común, cuando se lanzan las fases beta (fases de prueba) de un gran programa, encontrarse con bugs que luego serán corregidos hasta que se lancen las versiones completas (full).
El gran problema de los bugs es que son especialmente difíciles de detectar. Por ejemplo, en nuestro programa que dividía dos números todo funcionaba bien hasta que alguien ingresara como denominador el número 0, con lo cual nuestro programa caería. Si al momento de crear dicho programa no nos dábamos cuenta de que justo en ese caso fallaría, habría un bug. Tal vez, un usuario se daría cuenta de eso más tarde y pues, el programa podría corregirse.

En un programa sencillo es bien fácil detectar los posibles bugs que se podrían generar y pues, depurarlo a tal punto de que quede perfecto y funcione bien para cualquier caso de entrada. Sin embargo, a medida que la complejidad aumenta, los posibles problemas también y se vuelve imposible literalmente hacer que el programa quede perfecto. Sin embargo, lo que se hace es analizar la mayoría de los posibles casos y corregir al máximo de modo que los errores sufridos sean los mínimos posibles. A su vez se incluyen sistemas de guardado automático y demás para que, aunque el programa se caiga, no se pierda la información.

Por ejemplo, yo utilizo OppenOffice.org Writer para escribir estas lecciones, digamos que es la competencia del Microsoft Word. Ambos son procesadores de texto muy potentes y con muchísimas cosas incluidas, lo cual hace que no sean perfectos y que alguna vez puedan trancarse o cerrarse. Sin embargo, cualquiera de ellos tienen implementados sistemas de recuperación de archivos, de modo que aunque nosotros mismos no hayamos guardado la información, el programa sí lo hace en una copia temporal que es posible abrir en caso de fallas; esto se hace automáticamente.

Bien, pero todo esto es muy avanzado aún para nosotros. Sin embargo tenemos una herramienta que nos ayuda a detectar los bugs, más aún cuando nuestros programas no hacen lo que queremos y no podemos darnos cuenta de por qué. Es común que en los bloques de un WHILE o un REPEAT (lo veremos pronto), no se cumplan nunca condiciones de finalización y pues, el bucle se repita infinitamente quedando nuestro programa colgado.

Veamos un ejemplo en el que nuestro WHILE funcione bien en algunos casos y en otros se quede colgado. El ejemplo que mostraré a continuación esperará como entrada un número entero positivo menor que 50. El programa hará la suma de todos los números comprendidos entre el número ingresado y 50. Por ejemplo, si ingresamos el número 30 el programa calculará

30 + 31 + 32 + 33 + 34 + 35 + 36 + 37 + 38 + 39 + … + 50.

Si ustedes ejecutan ese programa e ingresan números mayores o iguales a 25 todo funcionará bien, pero ¿qué pasa si ingresan un número menor que 25? Hagan la prueba.

Código Pascal:
Ver original
  1. PROGRAM WHILEinfinito;
  2.  
  3. VAR
  4.    x, suma: INTEGER;
  5.  
  6. BEGIN
  7.     Write('Ingrese un número entero positivo menor que 50: ');
  8.     ReadLn(x);
  9.     WriteLn;
  10.     suma:= 0;
  11.  
  12.     WHILE (x<=50) DO
  13.     BEGIN
  14.         suma:= suma + x;
  15.         x:= x+1;
  16.  
  17.         IF x=25 THEN
  18.         BEGIN
  19.            x:= 0;
  20.            suma:= 0;
  21.         END;
  22.     END;
  23.  
  24.     Write('La suma es: ',suma);
  25.     ReadLn;
  26.  
  27. END.

Veremos este programa con el Depurador. Esta herramienta nos permite ejecutar el programa paso por paso e ir viendo lo que hace a cada momento, incluso los valores que van tomando las variables. Primero debemos acondicionar las ventanas de modo que veamos todo como funciona a la vez.

Nuestro compilador nos permite trabajar con varias ventanas a la vez, pues veamos como hacerlo para usar el depurador. Básicamente necesitaremos tres ventanas:

*La del código fuente.
*La del usuario (que muestra la entrada y salida del programa).
*La del visor de variables.

La del código fuente ya la tenemos a la vista. Hagamos aparecer al visor de variables, para eso vamos al menú

Debug → Watches.

Con lo que tendremos una pantalla como esta:



En la cual pueden ver tanto la ventana Watches como la venta del código fuente. Es posible cambiar los tamaños de estas ventanas, simplemente hacemos clic sobre una para que quede activa, por ejemplo la del código fuente, y luego vamos al menú Window → Size/Move o presionamos Ctrl + F5. Con eso verán que los bordes de la ventana se hacen verdes, lo cual indica que está activada para modificar tanto su tamaño como su posición. Si ustedes presionan las teclas de dirección verán que mueven la ventana, y si presionan Shift + Teclas de dirección cambiarán su tamaño. Dejen algo parecido a la imagen. Cuando están conformes con el tamaño y la posición simplemente presionan ENTER.



Ya tenemos en nuestra vista dos ventanas. Ahora añadiremos la tercera que necesitamos. Tengan en cuenta que podemos usar el Debuger no hace falta tener todas estas ventanas, una cosa es independiente de la otra, yo les enseño esto para aprovechar al máximo el potencial de esta herramienta.
Necesitamos la pantalla de salida y entrada, ayudará mucho para algunos casos. Para activarla vamos al menú

Debug → Output

Ahora veremos la pantalla de la consola pero dentro del compilador. Sin embargo será tan grande que tapará todo, entonces presionan Ctrl + F5 y modifiquen su tamaño y posición hasta que quede algo parecido a la imagen.



Mi pantalla User screen aparece vacía, la suya puede aparecer llena de texto. Si en algún momento queren quitar una ventana solo la cierran presionando el botoncito verde en la esquina superior izquierda de la misma. Para maximizarla presionan la flecha en la esquina superior derecha, y para restaurarla lo mismo.

Las ventanas están numeradas, como ven, en mi ejemplo la ventana del código tiene el número 1, la del viso tiene el número 2 y la del usuario el número 3.

Ahora tenemos que añadir las variables que queremos visualizar en el visor. En este programa solo hay dos, así que las visualizaremos a ambas. Para eso vamos a Debug → Add Watch o presionan Ctrl + F7. Aparecerá un cuadrito de diálogo donde deben escribir el número de una variable a visualizar, por ejemplo suma. Presionen ENTER y verán que la variable aparece en la ventana Watches con un mensaje que dice Unknown value lo que significa “Valor desconocido”. Repitan esto y agreguen a x también.



Ahora correremos el programa paso a paso. Para eso vamos a Run → Step over o presionamos F8. El programa se recompilará y veremos que el compilador se posará sobre la línea del BEGIN. Ahora veremos paso a paso como es que se realiza una ejecución. Si ustedes hubieran ejecutado este programa de forma normal, esto se haría instantáneamente, sin embargo, ahora el compilador está esperando a que le digamos que avance. Hay dos formas de hacerlo, presionando F8 o presionando F7. Ahora nos quedaremos con F8. La diferencia con la F7 es que esta entrará a los subprogrmas y F8 no lo hará, pero como aún no vimos ese tema no habrá diferencia entre una y otra.

Al presionar alguna de esas teclas verán que el código avanzará una línea y hará lo que tiene que hacer. Cuando se pare sobre la línea del Write, y ustedes presionen F8 o F7, verán aparecer el mensaje en la pantalla del usuario.



Cuando presionen F8 sobre la línea del ReadLn(x) verán que el compilador desaparece para mostrar la consola, esperará que ustedes ingresen la entrada esperada y presionen ENTER, con lo cual volveremos a la pantalla anterior. Ingresen un valor mayor a 25 y menor a 50, por ejemplo 45.

Ahora verán que x se pone en rojo y su valor se modifica por la entrada ingresada. La variable suma vale 0 porque el compilador así la inicializó, pero nosotros nunca nos fiaremos de eso.

Sigan presionando F8 para ver el avance del código y verán como se van modificando las variables. De este modo verán como termina el programa. Al finalizar les aparecerá un mensaje con el código de salida 0, lo cual indica que todo anduvo bien.

Si ustedes quieren terminar la ejecución antes de lo esperado van a Run → Program Reset o presionan Ctrl + F12.

Corran de nuevo el depurador pero esta vez ingresen el número 20 como entrada a ver que pasa.

Saludos a todos, y espero que esto les sea de utilidad de aquí en mas. No lo enseñé antes porque no tenía sentido para los programas que veníamos haciendo.

Etiquetas: depurador, entrada, free, pascal, programa, sistema, variables
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 10:04.