Vous êtes sur la page 1sur 6

Programacin Algoritmos y Estructuras de Datos ao 2010 Facultad de Ingeniera Universidad acional de !

a Plata

Introduccin al Depurador Code::Blocks


El "ro"sito de un de"urador es "ermitirle al "rogramador o#servar lo $ue ocurre en el %interior& de un "rograma mientras 'ste se est( e)ecutando* Es una a"licacin $ue "ermite colocar "untos de "arada+ ins"eccionar varia#les o e)ecutar un "rograma "aso a "aso+ con el ,in de #uscar errores lgicos* !os errores sint(cticos y-o de e)ecucin "ueden ser ,(cilmente detectados ya sea en el momento de la com"ilacin .a trav's de mensa)es/+ o al e)ecutar el "rograma* 0in em#argo en el caso de los errores lgicos+ se "uede dar $ue las instrucciones se e)ecuten correctamente y $ue la com"ilacin sea e1itosa .sin mensa)es de error ni 2arning/* En este caso el "rogramador 3a "ro"orcionado instrucciones incorrectas .inadecuada im"lementacin del algoritmo/* Para em"lear esta 3erramienta es necesario $ue el cdigo ,uente sea com"ilado sin errores* o o#stante el "rograma a4n "uede tener un com"ortamiento ines"erado+ de#ido a la "resencia de #ugs .mal diseo de un algoritmo/* 5e$uisitos "ara de"urar un "rograma6 7#tencin de un e)ecuta#le *e1e In,ormacin "ara la de"uracin contenida en el e)ecuta#le *e1e* Aadir al menos un "unto de interru"cin o 8rea9"oint* o es "osi#le o#tener un e)ecuta#le en caso de errores de com"ilacin o de enla:ado+ y la de"uracin no tiene sentido 3asta $ue se solucionen estos "ro#lemas* !a siguiente ,igura muestra la con,iguracin "or de,ecto $ue de,ine el com"ortamiento del de"urador* 0e encuentran activas6 Auto construccin del "royecto "ara asegurar $ue siem"re est' actuali:ado* 7#servacin de argumentos de ,uncin1 7#servacin de varia#les locales

Fig. 1 Configuracin del depurador

Programacin Algoritmos y Estructuras de Datos ao 2010 Facultad de Ingeniera Universidad acional de !a Plata
1* 7#)eto de "osterior estudio

De,iniciones6 Debugger: De"urador de cdigo* Proyecto: El entorno de desarrollo o,rece al "rogramador+ una 3erramienta de administracin y organi:acin de todos los arc3ivos ,uente del "rograma* De esta manera el "royecto contar( con una car"eta es"ecial "ara almacenar los arc3ivos de ca#ecera con e1tensin *3+ otra "ara los arc3ivos ,uentes con e1tensin *c+ etc* Esto "odra "arecer de "oca utilidad "ara $uienes reci'n se inician en "rogramacin+ sin em#argo en la "r(ctica es #astante ,recuente encontrar un "rograma com"uesto "or una gran cantidad de arc3ivos ,uente* Es im"ortante mencionar $ue "ara "oder utili:ar el de"urador de#emos crear un "royecto* Breakpoint: Es un "unto de interru"cin en la e)ecucin del "roceso o "rograma en e)ecucin* !os 8rea9"oints "ermiten es"eci,icar detenciones del "rograma+ "ara o#servar valores de memoria+ registros o varia#les durante la e)ecucin* Puntos de interrupcin o Breakpoints E1isten varias ,ormas alternativas de activar un "unto de interru"cin+ 8rea9"oint* U#icar el cursor 3aciendo clic so#re la lnea de cdigo en la $ue deseamos marcar un #rea9"oint+ luego "resionando la tecla F5 o desde el men4 Debug Toggle Breakpoint* 7#servaremos $ue se re"resentan con un crculo de color ro)o en el margen i:$uierdo de la ventana del editor de cdigo*

Fig. 2 Punto de interrupcin Breakpoint ota6 o se de#en u#icar so#re las declaraciones de varia#les de "rograma .o lnea n; < del "rograma de e)em"lo/* Estas instrucciones e,ect4an reserva de memoria est(tica en el momento de la e)ecucin del "rograma* El "rogramador puede a#straerse de estas cuestiones ya $ue los recursos del 3ard2are son administrados "or el sistema o"erativo* Adem(s "odran no ,uncionar si la ruta-arc3ivo donde est( alo)ado el "royecto contiene es"acios en #lanco u otros caracteres es"eciales* 0e recomienda usar solo letras y sm#olos = en lugar de es"acios*

Inicio del depurador Una ve: construido el "royecto+ si el "rograma se a com"ilado sin errores y se 3an marcado los 8rea9"oints+ es "osi#le iniciar la de"uracin desde el men4 Debug Start o "resionando la tecla F8* !a e)ecucin desde el inicio del "rograma 3asta la "rimera lnea de cdigo marcada con el 8re9"oint se e,ect4a de la manera convencional* Una ve: alcan:ado este "unto o#servaremos $ue nuestro "roceso se detiene en la lnea n4mero > del e)em"lo+ corres"ondiente al "unto de interru"cin .#rea9"oint/ "reviamente con,igurado* ?ay de

Programacin Algoritmos y Estructuras de Datos ao 2010 Facultad de Ingeniera Universidad acional de !a Plata destacar $ue esta lnea de cdigo aun no 3a sido e)ecutada+ lo cual es re"resentado "or una ,lec3a amarilla .muestra cual ser( la siguiente lnea de cdigo a e)ecutar/* !a ventana o consola de nuestro "rograma ya no contiene el ,oco .interaccin con el usuario/+ "or$ue a3ora es la ventana del editor $uien lo tiene* Esto suele ser una ,uente de con,usin+ cuando "or e)em"lo nuestro "rograma es"era $ue ingresemos datos "or teclado* En estos casos la de"uracin no "odr( continuar 3asta $ue el usuario ingrese los datos+ inde"endientemente de lo $ue se intente 3acer dentro de la ventana del entorno de desarrollo o IDE .Integrated Develo"ment Environment/*

Fig. ! "en# de $erra%ientas del depurador

"odos de e&ecucin !as o"ciones $ue se descri#en a continuacin+ "ermiten al "rogramador e)ecutar en modo %manual& las "artes del cdigo donde se "resume $ue e1isten errores lgicos y ameriten un an(lisis detallado* @omo as tam#i'n e)ecutar de manera %autom(tica& las "artes del cdigo $ue se "resumen li#res de errores* !a de"uracin "osi#ilita la e)ecucin "aso a "aso de cada lnea+ "resionando la tecla F7 o desde el men4 Debug Next line* 0i la lnea contiene una llamada ,uncin 1+ la misma se e)ecuta com"letamente sin mostrar "aso a "aso cada una de las instrucciones $ue 3ay 1* 7#)eto de "osterior estudio en ella* Aam#i'n se "uede o"tar "or e)ecutar el "rograma 3asta el siguiente "unto de interru"cin+ de modo $ue el de"urador continuar( la e)ecucin del "rograma 3asta $ue encuentre el "r1imo 8rea9"oint o el ,inal del cdigo+ seleccionando Debug Continue
(Ctrl-F7).

@ontinuar con la siguiente lnea de cdigo y 3acer "aso a "aso dentro de una llamada a ,uncin1+ mediante Debug Step Into (Shi t-F7). 1* 7#)eto de "osterior estudio 5eanudar la e)ecucin "aso a "aso o e)ecutar la siguiente sentencia+ mediante Debug Next Int!tru"tion #lt-F7. o es recomenda#le el uso de 'sta 4ltima de#ido a $ue est(

Programacin Algoritmos y Estructuras de Datos ao 2010 Facultad de Ingeniera Universidad acional de !a Plata diseada "ara instrucciones en lengua)e ensam#lador o lengua)e de m($uina ."rogramacin de #a)o nivel/* Aam#i'n es "osi#le e)ecutar de modo %autom(tico& 3asta la "osicin actual del cursor+ mediante Debug $un to "ur!or (F%). @ontinuar con la e)ecucin 3asta $ue ,inalice la estructura de control actual+ mediante Debug Step out (Shi t-Ctrl-F7). 0i actualmente estuvi'semos de"urando una ,uncin 1+ terminara su e)ecucin y retornara al origen de la llamada* 1* 7#)eto de "osterior estudio 'bser(acin de (ariables !uego desde el men4 Debug Debugging &in'o(!+ de#emos activar )&at"he!* lo cual nos a#rir( una ventana con las varia#les locales $ue 3emos declarado en nuestro cdigo ,uente* !as varia#les locales de nuestro cdigo+ ser(n mostradas en la ventana )&at"he!* y a$uellas recientemente actuali:adas ser(n resaltadas en color ro)o* Esta lista de varia#les "uede ser salvada a un arc3ivo y "osteriormente ser recu"erada* Esto se logra 3aciendo clic con el #otn derec3o del Bouse en la lista de varia#les y seleccionando )Sa+e (at"h ile* y *,oa' (at"h ile* "ara rea#rirla "osteriormente*

Fig. ) *entana de obser(acin de (ariables y argu%entos

El editor de varia#les o#servadas+ o,rece la "osi#ilidad de aadir-$uitar y modi,icar el ,ormato de re"resentacin de los datos contenidos durante la de"uracin* 0e a#rir( esta venta desde el men4 Debug -'it &at"he! .

Fig. 5 +ditor de (ariables obser(adas

Programacin Algoritmos y Estructuras de Datos ao 2010 Facultad de Ingeniera Universidad acional de !a Plata A continuacin se ilustrar( el uso del de"urador con un sencillo "rograma de e)em"lo+ en el cual se "ide mostrar en "antalla los caracteres desde de la A 3asta la C* El "rogramador lo im"lementa de la siguiente manera6
1 2 3 4 5 ' * & / 10 11 12 13 14 15 1' 1* 1& 1/ 20 21 #include <stdio.h> int main() { char a = 'A'; +hile(1) { %utchar(a); i. (a = '5') $rea7; a99; < return 0; < ! "eclara una #aria$le ti%o caracter de & $its ! (niciali)a su #alor con la letra 'A' ! ,ste es un $ucle -in.inito! 1uestra el caracter actual2 en la %antalla. ,m%e)ando %or la letra 'A' se34n #alor inicial ! 6i el contenido del caracter actual 'char a' es i3ual ! a '5' salimos del $ucle -in.inito- e8ecutando $rea7 ! ! ! ! ! !

! Aun :uedan caracteres %or mostrar2 entonces %asamos al si3uiente de la ta$la A6;(( haciendo a = a 9 1 !

A "esar lograr com"ilarlo sin mensa)es de errores ni advertencias+ se o#serva $ue salida no es la es"erada al e)ecutar el "rograma* En la "antalla solo se o#serva la letra A y luego ,inali:a la e)ecucin* El "rogramador 3a cometido un error involuntario y su "rograma tiene un error lgico* Entonces esta#leciendo un #rea9"iont en la lnea n; 10 e iniciando la de"uracin se o#serva $ue la varia#le char a toma el valor C y luego la condicin se eval4a como verdadera "or ser distinta de cero .ver cdigo A0@II/+ lo cual seg4n las instrucciones conduce a la e)ecucin de #rea9 y luego a return 0 "rovocando el ,in del "rograma* @onclusin al o#servar la ventana de varia#les locales+ vemos $ue char a toma el valor C cuando lo $ue se intent codi,icar ,ue $ue6 0i .char a es igual a C/ 0alir del #ucle %in,inito& Fin0i Fin del mdulo "rinci"al* De modo $ue el error est( en la condicin evaluada dentro del "ar'ntesis en la lnea n; 1D+ de#i'ndose reem"la:ar "or6
i. (a == '5') ! 6i el contenido del caracter actual 'char a' es i3ual !

!a di,erencia es sutil y es un error #astante ,recuente el con,undir los sm#olos E con EE .do#le igual/*

Programacin Algoritmos y Estructuras de Datos ao 2010 Facultad de Ingeniera Universidad acional de !a Plata
Pasos para construir un proyecto Ir al men4 File Ne( /ro0e"t . Se abre una +entana 1ue no! o re"e 'i erente! plantilla! (Te2plate!) para "rear pro0e"to!. # "ontinua"i3n !ele""iona2o! pro0e"to +a"io (-2pt0 /ro0e"t)4 luego ha"er "li" en !iguiente4 "on lo "ual !e abrir5 una +entana 'on'e a!ignare2o! el no2bre 'el pro0e"to4 la! ruta! 'on'e !e al2a"enar5n lo! ar"hi+o!.

Vous aimerez peut-être aussi