Enrere Mòdul 4
Fonaments de Programació. Llenguatge C/C++---
Pràctica  Resum teòric Exercicis
Pràctica d'ampliació

 

Annex

 

La depuració

Abans de produir la versió definitiva d'un programa hem de procurar que aquest estigui lliure d’errors. En el moment de la compilació, aquest ens pot avisar d’alguns errors de sintaxi, confusió de tipus, etc. Aquests errors que pot detectar el compilador s’anomenen errors de compilació, i gairebé sempre són fàcils de detectar.

Si per al compilador la sintaxi del programa és correcta, però aquest no fa exactament el que hauria de fer, pot ser degut, segurament, a un error lògic o error d’execució. Aquests tipus d'errors són els realment difícils de detectar. Per ajudar a detectar-los es fa imprescindible una eina que ens permeti supervisar l'execució dels nostres programes i acorralar l'error fins la localització en el codi font. Nosaltres utilitzarem el gdb sota llicencia GNU..

Errors i advertiments de compilació

Una vegada acabada l'escriptura del codi del programa es construeix l'aplicació. Ja hem vist que tots els errors detectats pel compilador, així com altres advertiments, es mostren a la finestra de sortida, particularment a la pestanya Build d'aquesta finestra.

El compilador ens pot donar dos tipus de missatges: els errors i els advertiments (warnings).

Els advertiments (warnings) son problemes lleus o alertes sobre possibles problemes. Encara que el compilador acabarà creant el programa executable és important corregir aquest errors que originen els advertiments, perquè segur que seran l'origen de futurs problemes més greus.

Un error impedeix la construcció de l'executable. El compilador ens informa del tipus d'error i la línia en la qual es produeix l'error. S'ha de tenir en compte que no tots els errors són independents, això vol dir que és probable que un mateix error produeixi més d'un missatge d'error, per exemple, si no declarem una variable, el compilador detectarà un error cada vegada que aparegui en el codi aquesta variable.

Els errors més freqüents que es sol cometre i que detecta el compilador són:

  • oblidar tancar parèntesis de funcions.
  • canviar () per [].
  • oblidar un punt i coma darrera d'una instrucció.
  • oblidar tancar les claus d'un bloc.
  • errors de sintaxi, per exemple escriure print() en lloc de printf().
  • fer servir funcions de biblioteca sense incloure els corresponents fitxers de capçalera.
  • en les operacions, oblidar-se del símbol de multiplicar, és a dir, escriure 2x en lloc de 2*x.
  • etc.

A més d'aquests errors que obliguen a corregir el codi i tornar a compilar o construir l'aplicació, el compilador ens avisa d'algunes circumstàncies que, encara que no impedeixen la construcció de l'aplicació, poden ser errors que s'han de corregir. Per exemple, el compilador ens avisarà si:

  • fem servir una variable local abans d'inicialitzar-la.
  • fem conversions automàtiques de tipus que poden fer perdre informació.
  • etc.

Si tot a anat bé i el compilador ha fet la seva tasca sense detectar cap error, ja és pot crear  l'executable  ( munta  F11 ).

Exemple de depuració amb el Terminal

Perque un programa pugui ser depurat correctament, el seu executable haura de contenir certa informació que ho associï al codi font del qual va derivar. Per contenir aquesta informació hem de compilar el programa amb l'opció -g.

Algunes de les funcions del depurador ens permetra fer:

  • Executar el programa linia a linia.
  • Posar punts de parada en l'execució del programa ( punts de ruptura o breakpoints ).

  • Hi ha certs moments que ens pot interessar el contingut de les variables.

Ordres per controlar la depuració:

  • help    Donar accés al menú d'ajuda.

  • run     Arranca l'execució del programa.

  • break Estableix un punt de ruptura.

  • list     Mostra les línies del programa.

  • print   Mostra el contingut d'una variable.

  • next   Executa la següent línia. Si aquesta és la crida a una funció l'executa completament.

  • step   Executa la següent línia. Si es tracta d'una crida a una funció, només executa la crida i es parara en la primera línia de la funció.

  • quit   Termina l'execució del depurador..

Agafem la pràctica 1 d'aquest mòdul per provar el depurador. En les següents captures de pantalla podeu observar algunes de les comandes.

Primer de tot recordeu de compilar amb l'opció -g  gcc -g m4p01.c -o m4p01. Cridem al depurador, gdb m4p01 ( nom de l'executable ) i hem de tenir una finestra mes o menys com la següent:

Comprovem el comando list

Comprovem les ordres  break, run, i  print.

Exemple de depuració amb Anjuta

Si volem utilitzar el Depurador des de l'EID Anjuta recordeu de escollir del menú principal l'opció Paràmetres/Ordres i dins Ordres específiques del llenguatge  afegiu -g al llenguatge C i al C++.

Les opcions per depurar es troben sota Depura del menú principal. Explicar-les totes les possibiltats de depuració comportaria molt temps, però això només provarem alguns dels comandos més habituals.

Agafeu la pràctica 1 d'aquest mòdul m4p01.c per fer les següents proves:

             - Trieu del menú principal Depura/Inicia

             - Trieu del menú principal Depura/carrega executable

            - Per exemple anem a posar un punt de ruptura en la línia 18 per mirar el  contingut  de les variables. Trieu Depura/Punts de ruptura/Defenix punt de ruptura i tindreu en la pantalla la següent finestra. Si teniu el cursor en la línia 20 ja us apareixerà en Ubicació:   m4p01.c:20

   - Trieu Depura/Execució/ i dins els submenu Executa/continua

 

Com veus en l'anterior captura de pantalla, l'execució del programa s'aturat en la línia 20.

 

 

 

     - Si Volem coneixer en aquest punt concret quins son el contingut de les variables trieu del menú principal  Depura/Informació/informació de variables locals

 

 

Acabeu l'execució i atureu el depurador ( Depura/Atura el depurador )

Si us trobeu en la pantalla d'edició i premeu el botó dret del ratoli tindreu accés més ràpid a certs comandos de la depuració.

--- ---