Depurador de Programas Matlab

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 4

DEPURADOR de programas MATLAB

Ayuda a identificar errores de programacin, tanto en programas como en funciones.


Permite visualizar los contenidos de la memoria de trabajo durante la ejecucin del
programa o la funcin y ejecutar el cdigo del archivo-M lnea a lnea

La depuracin (debugging) es el proceso mediante el cual aislamos y determinamos


cualquier error existente en el cdigo.
Ayuda a corregir dos tipos de errores:
1. Errores de sintaxis: escribir mal el nombre de la funcin, olvidarnos de parntesis,
MATLAB detecta la mayora de los errores de sintaxis y muestra un mensaje
describiendo el error y mostrando su n de lnea en el archivo-M. Normalmente se
pueden corregir los errores de sintaxis fcilmente basndonos en los mensajes de error
de MATLAB.
2. Errores de ejecucin y/o lgicos: Se producen por mala codificacin del algoritmo,
como modificar una variable equivocada o realizar un clculo incorrecto.
Estos errores se hacen patentes cuando el archivo-M produce resultados errneos.

Tcnicas para aislar las causas de los errores de ejecucin:


-

Eliminar los puntos y coma de las sentencias del archivo-M. De este modo se
pueden ir analizando los valores que toman las distintas variables durante la
ejecucin del programa. En estos casos en ocasiones ser conveniente incluir la
sentencia pause, al objeto de poder analizar los valores correspondientes.
Utilizar el depurador de MATLAB.
El depurador es til para corregir errores de ejecucin porque nos facilita el acceso a
las memorias de trabajo de las funciones y a examinar o cambiar los valores que
contienen.
Nos permite poner y quitar puntos de ruptura (breakpoints), en las lneas del
programa, que permiten detener el mismo, analizar los valores de las variables y
continuar con la ejecucin paso a paso.

Ejemplo: Vamos a crear un archivo-M llamado primo.m que indica si un nmero


pedido por teclado es primo o no. Guardaremos dicho archivo en nuestra carpeta actual.
n=input('Digame el nmero: ');
div=0;
k=2;
while k<=n-1
if n/k == fix(n/k)
di=div+1;
end
k=k+1;
end
if div==0

sprintf('%d es primo', n)
else
sprintf('%d NO es primo', n)
end

Ejecutaremos el programa para ver si opera de forma correcta:


EDU primo
Digame el nmero: 4
ans =
4 es primo
La respuesta es incorrecta, por lo que usaremos el depurador para aislar el error en los
archivos-M.

Depuracin en el PC
Para comenzar la depuracin es necesario abrir el programa en el editor de MATLAB.
Los iconos para depuracin en la barra de herramientas son:

Botn de la barra de
herramientas

Descripcin
Set/Clear breakpoint: fija o elimina un punto de ruptura en
la lnea donde est situado el cursor.
Clear all breakpoints: Elimina todos los puntos de ruptura
que estn activos.
Step in: ejecuta la lnea actual el archivo-M y si la lnea es
una llamada a otra funcin, hace step en esa funcin.
Single step: ejecuta la lnea actual del archivo-M.
Continue: contina la ejecucin del archivo-M hasta que
finalice o hasta que encuentre otro punto de ruptura.
Quit Debugging: sale del estado de depuracin.

Si pulsamos el botn derecho del ratn sobre la ventana del Editor/Depurador saldr el
men contextual con algunas de estas opciones. Las mismas opciones de la barra de
herramientas estn disponibles desde el men Debug de la ventana del Editor/Depurador.

Fijar puntos de ruptura


La mayora de las sesiones de depuracin comienzan fijando un punto de ruptura en
alguna/s de las lneas del programa. Estos puntos permiten parar la ejecucin del programa
en dichas lneas, lo que permite ver o cambiar los valores en la memoria de trabajo de la
funcin antes de continuar la ejecucin. Para fijar un punto de ruptura se debe situar el
cursor en la lnea correspondiente y pulsar el botn SET/CLEAR BREAKPOINT, o bien
hacerlo a travs del men contextual. Con ello aparecer un smbolo ( ) a la izquierda de
dicha lnea, lo que indica que el punto de ruptura est activado. Si la lnea seleccionada para

situar el punto de ruptura no es una lnea ejecutable vlida, entonces el punto de ruptura se
sita en la siguiente lnea ejecutable.
El men Debug del editor tambin nos permite parar la ejecucin del archivo M si el
cdigo genera un aviso (warning), un error, o valores NaN (not a number, indeterminacin)
o Inf (infinito).
Al comienzo de la sesin de depuracin, no estamos seguros de dnde est el error, por lo
que pondremos el punto de ruptura en un lugar donde nos parezca oportuno para ir
acotando dicho error. Situaremos el punto de ruptura en la sentencia de la lnea 11:
if div==0
El nmero de lnea est indicado en la parte inferior derecha de la barra de estado. Fijamos
el punto de ruptura posicionando el cursor en la lnea de texto y haciendo click sobre el
botn "Set Breakpoint" de la barra de herramientas. Esto tambin puede hacerse desde el
men Debug, Set Breakpoint o sacando el men contextual y eligiendo Set/Clear
Breakpoint.

Anlisis de las variables


Para llegar al punto de ruptura y analizar los valores de las variables de inters, en primer
lugar debemos ejecutar el programa desde la ventana de comandos de MATLAB:
primo
introduciendo el valor 4 nuevamente. Cuando la ejecucin del archivo-M alcanza el punto
de ruptura, se muestra en la ventana del editor una flecha amarilla ( ) a la izquierda de la
prxima sentencia en ejecutarse. Cuando aparece una flecha amarilla hacia abajo ( ) a la
izquierda del texto significa que se ha alcanzado el final del programa o funcin. Esto nos
permite examinar las variables antes de volver a la funcin de llamada.
Analizaremos el valor de la variable div (obteniendo div=0), lo que nos indica que el error
se ha producido antes, ya que para n=4 dicha variable debiera tener el valor 1, al ser
divisible 4 entre 2.
Ya que el error se encuentra en alguna sentencia anterior, finalizaremos esta sesin de
depurado (opcin Debug+Quit Debugging), para colocar un nuevo punto de ruptura en
alguna lnea anterior.

Continuacin y ejecucin paso a paso


Eliminaremos el punto de ruptura de la lnea 11 situndonos sobre esa lnea y eligiendo las
opciones de men Debug, Clear Breakpoint o sacando el men contextual y
eligiendo Clear Breakpoint o pulsando el botn Set/Clear Breakpoint de la barra de
herramientas.
Situamos ahora un nuevo punto de ruptura en la lnea 5, y volvemos a repetir la ejecucin
del programa con el valor n=4. De esta manera el programa se detendr en la evaluacin
del mientras, de modo que podremos ejecutar paso a paso todas las iteraciones del lazo.
Para ello, pulsaremos el botn SINGLE STEP, que nos llevar a la lnea 6. En la situacin
actual, n=4 y k=6, se cumplir la condicin del if, con lo cual al ejecutar la sentencia
nuevamente con SINGLE STEP pasaremos a la lnea 7. De este modo se almacena el valor

1 en la variable de la izquierda de la asignacin. Si continuamos ejecutando paso a paso las


sentencias, vemos que para el siguiente valor del lazo k=3 no se cumple la condicin
del if, con lo que las variables quedan con el mismo valor que tenan antes. Para el
valor k=4 no se repite ya el lazo mientras, por lo que el programa saltar a la lnea 11. En
esta situacin vemos que la condicin de dicha lnea se va a cumplir, ya que div=0, pero
si evaluamos la variable de la izquierda de asignacin de la lnea 7 vemos que vale 1. En
esta situacin nos damos cuenta rpidamente que el error est en los nombres de las
variables, ya que en la lnea 7 le hemos llamado div, mientras que en la lnea 11 se
llama div, cuando debiera llamarse igual en ambos sitios.

Fin de la sesin de Depuracin


Antes de modificar el programa para corregir el error, debemos abandonar la opcin de
depuracin con DEBUG+QUIT DEBUGGING (o bien con el botn QUIT
DEBUGGING de la barra de herramientas). Seguidamente corregimos el error, guardamos
el programa y podemos comprobar que tras la correccin ya opera correctamente. Antes de
volver a ejecutarlo, recordad que debis eliminar el punto de ruptura, pues de no hacerlo
nuevamente entraremos en un proceso de depuracin.
Otras alternativas para finalizar la sesin de depuracin son seleccionar la opcin de
men File, Exit Editor/Debugger , o bien cerrar la ventana directamente con el botn
Cerrar ventana de Windows.

Programas que contengan funciones


Para depurar programas que contengan funciones definidas por el usuario se
procede de igual modo, salvo que al llegar a la sentencia que contenga la
llamada a la funcin tenemos dos opciones:
si queremos depurar tambin la funcin, debemos ejecutar la sentencia
utilizando el botn botn STEP-IN en lugar del SINGLE STEP. De este
modo el depurador abrir el fichero que contenga la funcin y permitir
depurarla paso a paso. Cuando el depurador "salte" al fichero de la
funcin podemos seguir depurndola de la forma habitual.
si no queremos depurar la funcin, sino que nos interesa seguir
depurando el programa, ejecutaremos la sentencia usando, como
siempre, el botn SINGLE STEP, con lo que podremos ver el resultado
de la ejecucin de la funcin, pero sin analizarlo paso a paso. Esto es
recomendable cuando estemos seguros que la funcin opera
correctamente.

También podría gustarte