stst.elia.pub.rostst.elia.pub.ro/.../2_palagaco_vladmaal_debugging_3.docx · web viewtestarea pe...

17
Universitatea Politehnica Bucuresti Facultatea de Electronica, Telecomunicatii si Tehnologia Informatiei Tema IS Debugging: Analiza si aplicatii Vlad Matei-Alexandru 442A Palaga Cosmin 442A

Upload: others

Post on 28-Dec-2019

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: stst.elia.pub.rostst.elia.pub.ro/.../2_PalagaCo_VladMaAl_Debugging_3.docx · Web viewTestarea pe parcursul dezvoltarii unei aplicatii sau a unui produs reprezinta una din cele mai

Universitatea Politehnica BucurestiFacultatea de Electronica, Telecomunicatii si Tehnologia

Informatiei

Tema IS

Debugging: Analiza si aplicatii

Vlad Matei-Alexandru 442APalaga Cosmin 442A

Bucuresti 2014

Page 2: stst.elia.pub.rostst.elia.pub.ro/.../2_PalagaCo_VladMaAl_Debugging_3.docx · Web viewTestarea pe parcursul dezvoltarii unei aplicatii sau a unui produs reprezinta una din cele mai

Curpins

1. Introducere

2. Principii de testare aplicate in IS

3. Analiza a catorva debuggere:kernel + Visual Studio

4. Metode generale si specifice de testare si eliminare de buguri

5. Bibliografie

Page 3: stst.elia.pub.rostst.elia.pub.ro/.../2_PalagaCo_VladMaAl_Debugging_3.docx · Web viewTestarea pe parcursul dezvoltarii unei aplicatii sau a unui produs reprezinta una din cele mai

Vlad Matei: Introducere

Debugging-ul este un proces metodologic de gasire si eliminare a erorilor (bugs) dintr-un program sau componenta a unui calculator.

Testarea pe parcursul dezvoltarii unei aplicatii sau a unui produs reprezinta una din cele mai importante metode de prevenire a erorilor inainte ca acestea sa ajunga pe piata, dar natura extrem de complexa a programelor si componentelor din ziua de azi fac testarea pentru toate cazurile nefezabila, astfel incat in ultimii ani au aparut programe de debugging si pentru utilizatorul de acasa, care nu are neaparat puterea de calcul pusa la dispozitie intr-un birou specializat.

Page 4: stst.elia.pub.rostst.elia.pub.ro/.../2_PalagaCo_VladMaAl_Debugging_3.docx · Web viewTestarea pe parcursul dezvoltarii unei aplicatii sau a unui produs reprezinta una din cele mai

Vlad Matei: Principii de testare

Testarea si eliminarea erorilor are loc pe intreaga arhitectura a sistemului, de la piesele hardware si driverele lor, pana la compatibilitatea dintre programe. In aceasta lucrare ne vom concentra pe sectiunea de software, prezentand cateva cauze ale erorilor, si metodologii de eliminare a lor.

Este importand de mentionat ca toate erorile de software, fie ele de compatibilitate cu hardware-ul, de reprezentare grafica, de imposibilitatea unei bune conectari , sau pur si simplu de crashuri frecvente, isi au originea in codul sursa in care au fost scrise. Acestea pot insemna sintaxa gresita, legaturi cu elemente inexistente, sau instructiuni care cauzeaza erori in hardware, ceea ce poate duce la resetarea sistemului de operare. (4)

Exista doua metode principale de testare a unei aplicatii software: White Box (cutie alba) si Black Box (cutie neagra) Testing. (6)

In cazul cutiei albe, testarea se face cunoscand codul din spatele programului, relatiile dintre blocurile si subprogramele codurilor, precum si legaturile programului cu restul calculatorului. Este o metoda eficienta in a detecta si rezolva probleme, deoarece bug-urile pot fi gasite inainte de a cauza erori. Este folosita si pentru a testa securitatea programelor, putand determina daca implementarea codului curespunde cu ce s-a intentionat.

Cutia neagra face testari fara a cunoaste continutul codului din program. Aceasta metoda simuleaza diverse circumstante pentru program, cautand varii surse de crashuri in mediul existent. Este o metoda utila pentru utilizatorii ce detin cunostintele necesare, permitand modificarea aplicatiilor pe caclulatorul personal, astfel incat acestea sa poata rula. Spre exemplu, in majoritatea distributiilor Linux exista comanda “-debug”, ce genereaza un sir de informatii despre procesele de intrare/iesire, ceea ce permite identificarea erorilor si eliminarea acestora.In aceasta categorie intra programele special creeate pentru a analiza algoritmi si a preveni erori, ele operand pe baza unui algoritm similar cu cel din poza de mai jos.

Page 5: stst.elia.pub.rostst.elia.pub.ro/.../2_PalagaCo_VladMaAl_Debugging_3.docx · Web viewTestarea pe parcursul dezvoltarii unei aplicatii sau a unui produs reprezinta una din cele mai

Schema unui debugger: (2)

Un program de analiza competent va afisa mai multe date despre distributia erorilor, si va permite utilizatorului modificarea codului pentru a corecta problemele. Principiul de testare aratat in imagine se regaseste in cadrul fiecarui nivel.

Page 6: stst.elia.pub.rostst.elia.pub.ro/.../2_PalagaCo_VladMaAl_Debugging_3.docx · Web viewTestarea pe parcursul dezvoltarii unei aplicatii sau a unui produs reprezinta una din cele mai

Debuggerele pot fi folosite in aproape orice aplicatie, cum ar fi jocurile video, media-playere sau drivere de componente hardware.In poza urmatoare observam cum un debugger aplicat unei baze de date SQL afiseaza liniile de cod ce cauzeaza erori, si permite utilizatorului sa le modifice in functie de ceea ce se intentioneaza cu aplicatia: (1)

Page 7: stst.elia.pub.rostst.elia.pub.ro/.../2_PalagaCo_VladMaAl_Debugging_3.docx · Web viewTestarea pe parcursul dezvoltarii unei aplicatii sau a unui produs reprezinta una din cele mai

Palaga Cosmin: Exemple de debuggere

Kernel debugger: este un program prezent in unele kernele pentru a ajuta dezvoltarea sistemului. El poate implementa operatii de nivel jos, sau poate genera o linie de comanda ce poate fi apelata direct pe masina analizata, in timpul executiei unui set de instructiuni (in timp real).Acestea opereaza direct asupra memoriei kernelului, unele avand si posibilitatea de a seta breakpoints. Exemple de sisteme de operare al caror kernel prezinta o optione de debug: OS X, DragonFly, majoritatea distributiilor de Linux. Pentru cazurile de debugging dupa o eroare sau crash, este util sa examinam fisierul de crash dump, care arata inregistrarile facute inainte de eroare. Uneori putem forta o eroare de program pentru a vedea cat de grave vor fi urmarile unui eventual crash. In FreeBSD, folosim comanda ‘ # sysctl debug.kdb.panic=1 ‘.

Pentru sistemele Linux, cea mai comuna aplicatie de debug este GDB, care permite inclusiv utilizarea de pe un server pe o masina client. Schema sa de control este descrisa in poza de mai jos: (5)

Visual Studio: Aplicatia de dezvoltare Visual Studio are o

Page 8: stst.elia.pub.rostst.elia.pub.ro/.../2_PalagaCo_VladMaAl_Debugging_3.docx · Web viewTestarea pe parcursul dezvoltarii unei aplicatii sau a unui produs reprezinta una din cele mai

unealta puternica pentru analiza si rectificarea codului scris in mediul sau. Poate introduce breakpoints, conditii si filtre, precum si debugging paralel.

Cea mai noua versiune prezinta caracteristici precum integrare de simboluri, recompilare fara necesitatea restartarii, suport complet pentru C++, suport pentru limbajele .NET si Windows nativ, abilitatea de a controla scripts. Dezavantajul sau consta in inabilitatea de a controla codul din kernel. (3)

Interfata:

Page 9: stst.elia.pub.rostst.elia.pub.ro/.../2_PalagaCo_VladMaAl_Debugging_3.docx · Web viewTestarea pe parcursul dezvoltarii unei aplicatii sau a unui produs reprezinta una din cele mai

Exemplu pe un cod multithread:

class ThreadTest { static void Main() { Thread t = new Thread(new ThreadStart(Go)); t.Name = "Thread 1"; Thread t1 = new Thread(new ThreadStart(Go)); t1.Name = "Thread 2"; t.Start(); t1.Start(); Go(); } static void Go() { Console.WriteLine("hello!"); } }

Fereastra de explorare:

Inserarea de breakpoints:

Page 10: stst.elia.pub.rostst.elia.pub.ro/.../2_PalagaCo_VladMaAl_Debugging_3.docx · Web viewTestarea pe parcursul dezvoltarii unei aplicatii sau a unui produs reprezinta una din cele mai

Tehnici uzuale de debug

Vlad Matei:

Folosirea de breakpoints permite rularea codului pana la un punct, tehnica utila pentru a imparti blocul in marimi mai usor de analizat. Astfel putem elimina din discutie bucatile de cod care functioneaza corect. (7)

Putem folosi citirea si scrierea in memorie, pentru a obtine loguri din care sa reiasa ce a cauzat problema. Procedura utila si pentru cazul scurgerilor de memorie, cand memoria este alocata unor procese, dar nu este eliberata mai intai.

Controlul exceptiilor, intreruperilor si al evenimentelor este si el o parte importanta a functionarii corespunzatoare. Exista patru optiuni de control de intrerupere: Break, Second Break, Output si Ignore, fiecare apartiand

Page 11: stst.elia.pub.rostst.elia.pub.ro/.../2_PalagaCo_VladMaAl_Debugging_3.docx · Web viewTestarea pe parcursul dezvoltarii unei aplicatii sau a unui produs reprezinta una din cele mai

unui cod de eveniment ilegal: impartirea la 0, acces nepermis, terminare prematura a unui sir de instructiuni etc.

Controlul exceptiilor in Java

O metoda mai putin ortodoxa este fortarea unui crash si restartarea aplicatiei/calculatorului pentru a verifica daca masurile de siguranta au fost bine implementate si salvate din operatiile precedente. Uneori resetul poate rezolva unele probleme minore fortand sistemul sa se intoarca la starea de default.

Palaga Cosmin:

Exista si metode specializate de debug, pentru BIOS si pentru codul scris in Assembly (printre altele), util cand avem probleme hardware din cauza unor tensiuni prost controlate de exemplu.

Depanarea problemelor de executie necesita o rezolvare ceva mai complicata, datele fiind adunate din indici de performanta, registri, evenimente inregistrate si avertizari.

Page 12: stst.elia.pub.rostst.elia.pub.ro/.../2_PalagaCo_VladMaAl_Debugging_3.docx · Web viewTestarea pe parcursul dezvoltarii unei aplicatii sau a unui produs reprezinta una din cele mai

Testele de stress ajuta la determinarea capacitatilor maxime ale calculatorului, iar daca acesta are performante sub asteptarile proiectantilor, putem cauta erori sau implementari gresite (atat in software cat si in hardware) cu un debugger. (9)

Prime95, un program de testare hardware care poate indica posibile defectiuni ale procesorului.

Page 13: stst.elia.pub.rostst.elia.pub.ro/.../2_PalagaCo_VladMaAl_Debugging_3.docx · Web viewTestarea pe parcursul dezvoltarii unei aplicatii sau a unui produs reprezinta una din cele mai

Bibliografie

https://msdn.microsoft.com/en-us/library/windows/hardware/hh439390(v=vs.85).aspx (1)

https://msdn.microsoft.com/en-us/library/sc65sadd.aspx (2)

http://www.codeproject.com/Articles/79508/Mastering-Debugging-in-Visual-Studio-A-Beginn (3)

http://en.wikipedia.org/wiki/Debugging (4)

http://www.yolinux.com/TUTORIALS/GDB-Commands.html (5)

https://www.freebsd.org/doc/en/books/developers-handbook/kerneldebug.html (6)

http://community.sharpdevelop.net/photos/mattward/images/original/FeatureTourBreakpoint.aspx (7)

http://math.hws.edu/eck/cs124/javanotes2/c8/fig1.gif (8)

http://i1-win.softpedia-static.com/screenshots/Prime95_1.png (9)