Differences

This shows you the differences between two versions of the page.

Link to this comparison view

programare:debugging [2016/10/31 08:45]
laura.vasilescu [Pun printf dar nu apare, iar apoi crapă programul]
programare:debugging [2016/10/31 08:57] (current)
laura.vasilescu [Warning-uri de compilare]
Line 30: Line 30:
  
 Warning-urile pot duce la rezultate eronate. Exemplu de posibile warning-uri:​ Warning-urile pot duce la rezultate eronate. Exemplu de posibile warning-uri:​
 +  * folosirea unei variabile neinițializate
   * atribuirea de număr cu semn unui întreg fără semn   * atribuirea de număr cu semn unui întreg fără semn
   * cast-uri de la int la char (deci cu diminuare de spațiu)   * cast-uri de la int la char (deci cu diminuare de spațiu)
Line 41: Line 42:
 ==== Segmentation fault / stack smashing detected ==== ==== Segmentation fault / stack smashing detected ====
  
 +Erorile de genul aceasta înseamnă, pe scurt, că undeva faceți un acces nevalid de memorie. Cel mai frecvent, cauza poate să fie una din următoarele:​
 +  * accesați printr-un indice un element într-un vector nealocat (exemplu: dacă vectorul a fost declarat //int v[100]//, iar voi accesați //v[100]// sau chiar cu un indice mai mare sau cu unul negativ)
 +  * folosiți o funcție recursivă care nu are condiție de oprire, sau condiția acesteia nu funcționează corect sau nu acoperă cazul din testul rulat
 +  * apelați funcția //free// pe o zonă de memorie nealocată sau pe una care a fost eliberată anterior
 +  * etc.
 +
 +Pentru a identifica problemele în cazul acesta puteți să folosiți [[http://​ocw.cs.pub.ro/​courses/​programare/​debugging?&#​other|printf stylel debugging]],​ cu mențiunea de [[http://​ocw.cs.pub.ro/​courses/​programare/​debugging?&#​pun_printf_dar_nu_apare_iar_apoi_crapa_programul|a fi atenți cum folosiți afișarea]].
 +
 +Pentru a identifica mai ușor punctul în care se întâmplă eroarea recomandăm folosirea [[https://​www.cs.cmu.edu/​~gilpin/​tutorial/​|gdb]] sau [[http://​valgrind.org/​docs/​manual/​QuickStart.html|valgrind]].
 +
 +Pentru ambele tool-uri vom avea nevoie să adăugăm la compilare flag-ul **-g** pentru a activa simbolurile de debugging. Astfel:
 +<​code>​
 +gcc -g -Wall ex1.c -o exe 
 +</​code>​
 +
 +Spre exemplu, o rulare simplă cu //​valgrind//​ ar arăta așa (dacă programul are argumente le adăugați în continuare):​
 +<​code>​
 +valgrind ./exe
 +</​code>​
 +
 +Urmăriți output-ul generat. Ar trebui să vă spună exact linia pe care se întâmplă eroarea și cauza acesteia. Mai multe detalii în tutoriale.
 ==== Pun printf dar nu apare, iar apoi crapă programul ==== ==== Pun printf dar nu apare, iar apoi crapă programul ====
  
programare/debugging.1477896308.txt.gz · Last modified: 2016/10/31 08:45 by laura.vasilescu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0