Gdb Ghid de pornire rapidă

Un program de depanare este un program care lansează alte programe, care permite utilizatorului să controleze aceste programe, precum și să examineze variabilele atunci când apar probleme.







GNU Debugger, numit și GDB, este cel mai popular program de depanare pentru sistemele UNIX pentru depanarea C și C ++.

GNU Debugger vă ajută să obțineți informații despre următoarele:

Dacă a apărut nucleul dump-ului, este expresia respectivă sau a cedat programul?

În cazul unei erori în execuția unei funcții, ce linie a programului conține apelul la această funcție și ce parametri?

Care sunt valorile variabilelor programului la un anumit punct în timpul execuției programului?

Care este rezultatul unei expresii specifice în program?

Cum se depanează GDB?

GDB vă permite să rulați programul până la un anumit punct și apoi se opri și imprima valorile anumitor variabile în acest moment, sau pas prin programul o linie la un moment dat și imprima valorile fiecărei variabile după fiecare linie.

GDB utilizează o interfață simplă de linie de comandă.

Note de puncte

Deși, GDB vă poate ajuta în găsirea unei erori legate de scurgere de memorie, dar nu este un instrument pentru a detecta pierderi de memorie.

GDB nu poate fi folosit pentru programele colectate cu erori, iar acest lucru nu ajută la remedierea acestor erori.

Înainte de a începe instalarea, verificați dacă aveți deja instalat GDB în sistemul dvs. Unix, executând următoarea comandă:

Dacă este instalat GDB, acesta va afișa toate opțiunile disponibile în GDB. Dacă GDB nu este instalat, continuați cu noua instalare.

Puteți instala GDB pe sistemul dvs. urmând pașii simpli descriși mai jos.

Pasul 1: Asigurați-vă. că aveți condițiile necesare pentru instalarea GDB:

Compilator compatibil ANSI C (se recomandă GCC - rețineți că GDB poate depana codurile generate de alți compilatori)

115 MB de spațiu liber pe partiția pe care veți construi GDB.

20 MB de spațiu liber pe partiție pe care urmează să instalați GDB.

Program de proiect de decompresie GNU, GZIP

Programul de utilitate - versiunea GNU este cunoscută, funcționează fără probleme, altele. probabil. nu mai rău.

Pasul 2: Descărcați distribuția sursă Gdb de la ftp.gnu.org/gnu/gdb

pobj (Am folosit Gdb-6.6.tar.gz pentru aceste instrucțiuni.) Puneți fișierele de distribuție în directorul de colaționare.

Pasul 3: În directorul pentru asamblare, despachetați Gdb-6.6.tar.gz și extrageți fișierele sursă din arhivă. După ce fișierele au terminat extragerea, schimbați directorul de lucru într-un director Gdb-6.6, care a fost creat automat în directorul de asamblare.

Pasul 4: Rulați scriptul de configurare. Pentru a particulariza arborele sursă pentru platforma dvs.

Pasul 5: Creați un GDB utilizând utilitarul Make.

Pasul 6: Conectați-vă ca root și instalați GDB utilizând următoarea comandă.

Pasul 7: Dacă este necesar, spațiul de pe disc poate fi recuperat prin eliminarea directorului de asamblare Gdb și a fișierului de arhivare după finalizarea instalării.

Acum aveți instalat GDB pe sistemul dvs. și este gata de utilizare.

Depanarea Tabela de simboluri afișează instrucțiunile din programele binare compilate ale variabilelor, funcțiilor sau șirurilor lor respective din codul sursă. Această mapare poate fi ceva de genul:

Programul de instrucțiuni ⇒ Numele elementului, tipul elementului, fișierul sursă, numărul liniei, este definit.

Tabelele de simboluri pot fi integrate în program sau stocate ca fișiere separate. Deci, dacă intenționați să depanați un program, trebuie să creați un tabel de simboluri care să conțină informațiile necesare pentru depanarea programului.

Putem concluziona că următoarele fapte despre tabelele cu simboluri:

Tabela de simboluri funcționează pentru o versiune specifică a programului - în cazul în care programul este modificat, trebuie creat un nou tabel.

Debugging-ul se construiește adesea din ce în ce mai lent decât clădirile de retail (non-debugging); Construcția de depanare conține o tabelă cu simboluri și alte informații auxiliare.

Pentru ca GDB să poată citi toate aceste informații, line-line din tabelul cu simboluri, trebuie să-l compilam puțin diferit. De obicei, ne compunem programele noastre cum ar fi:

În loc de a face acest lucru, trebuie să compilați cu steagul -g, după cum se arată mai jos:

GDB oferă o listă mare de comenzi, cu toate acestea următoarele comenzi sunt cele care sunt utilizate cel mai des:

b main - Pune un breakpoint la începutul programului







b - Punctul de întrerupere în linia curentă

b N - Pune punctul de întrerupere în linia N

b + N - Pune liniile N de rupere în jos de linia curentă

b n - Pune punctul de întrerupere la începutul funcției "Fn"

d N - Șterge punctele de întrerupere cu numărul N.

Pauză de informații - lista punctelor de întrerupere

r - rulează programul la punctul de întrerupere sau eroare

c - Continuă executarea programului la următoarea punct de întrerupere sau eroare

e - Lucrări. până când funcția curentă este completă

s - Pornește următoarea linie a programului

s N - executați următoarele linii N ale programului

n - Ca și cu, dar acest lucru nu este un pas în funcție

U N - Lucrări. Până când veți obține linii N înainte de linia curentă

p var - Afișează valoarea curentă a variabilei "variable"

BT - Trasare stivuită

și - nivelul în stivă se ridică

d - Nivelul în stivă este redus

d - completează activitatea GDB

Noțiuni de bază: Pornirea și oprirea

GCC-g myprogram.c

Myprogram.c este o opțiune de depanare (-g). Încă obține a.out, dar încercarea conține informații de depanare care vă permite să utilizați variabile și numele de funcții în GDB, mai degraba decat celulele de memorie prime (nu este distractiv).

Deschide GDB cu fișierul a.out, dar nu rulează programul. Veți vedea o sugestie (GDB) - toate exemplele de pe această linie.

Cele trei moduri de pornire a "a.out" sunt încărcate mai devreme. Puteți rula direct (d), arata argumentele (r arg1 arg2) sau feed-ul într-un fișier. În mod normal, veți stabili puncte de oprire înainte de a începe.

h puncte de oprire

Listează secțiunile de ajutor (ajutor) sau obține ajutor pe un anumit subiect (h) punct de întrerupere. GDB este bine documentat.

e - Ieșiți din GDB

Un cod pas-cu-pas

Pasul vă permite să urmăriți calea programului dvs. și zero la codul care rupe sau întoarce intrarea nevalidă.

Afișează 10 linii de cod sursă pentru linia curentă (L), o linie specifică (50 litri) sau pentru funcția (l MyFunction).

Rulează programul la următoarea linie, apoi se oprește. Dacă linia curentă este o funcție, aceasta efectuează toate funcțiile și apoi întrerupe. Următorul lucru este bun pentru mersul rapid în jurul codului.

Rulează următoarea comandă, nu liniile. Dacă comanda curentă stabilește o variabilă, este aceeași. ca în următorul. Dacă aceasta este o funcție, aceasta va sari în funcție, va executa prima instrucțiune și apoi o va întrerupe. Pasul este bun pentru scufundări în detaliile codului.

Terminați executarea funcției curente, apoi opriți-o (numită și pasul din). Utile dacă ați intrat accidental într-o funcție.

Fragmente sau observații

Punctele de blocare joacă un rol important în depanarea. Ei pauză (rupe) programul atunci când ajunge la un anumit punct. Puteți vizualiza și schimba variabilele și continua execuția. Acest lucru este util atunci când există o intrare de eroare sau trebuie verificate intrările.

  • Setează punctul de întrerupere în linia 45 sau pe MyFunction. Programul se oprește când atinge punctul de întrerupere.
  • Setează punctul de observare pe care programul îl întrerupe atunci când condiția de modificare (pentru x == 3 se modifică). Punctele de control sunt mari pentru anumite intrări (myPtr! = NULL) fără întrerupere prin apelarea funcției.

    Reluă execuția după o pauză cu punct de întrerupere / punct de vedere. Programul va continua până când ajunge la următorul punct de întrerupere / observare.

    • Eliminarea punctului de întrerupere N (punctele de control sunt numerotate la crearea).
  • Setarea variabilelor

    Afișează valoarea curentă a lui x. Fiind capabil să folosească numele variabilei inițiale, astfel încât pavilionul (-g) este necesar; Programele sunt întocmite în mod regulat pentru a elimina aceste informații.

    set x = 3

    • Setează x la o valoare dată (3) sau la o altă variabilă (y)
  • apelarea funcției mele (x)

    apel STRLEN (MyString)

    Apelează funcțiile definite de utilizator sau funcțiile sistemului. Acest lucru este foarte util, dar aveți grijă să apelați funcțiile buggy.

    Afișează constant valoarea variabilei x, care apare după fiecare pas sau pauză. Utile dacă verificați în mod constant o anumită valoare.

    • Elimină afișarea permanentă a variabilei afișate de comanda afișajului.
  • Backtrace și schimbarea cadrului

    O stivă este o listă a apelurilor pentru funcții curente - aceasta vă arată unde vă aflați în program. Cadrul stochează detaliile de apelare a unei funcții, cum ar fi argumentele.

    Imprimă apelul la funcția curentă a stivei. pentru a arăta. unde vă aflați în programul curent. Dacă apelurile de bază către funcția a () care apelează B (), care apelează cu (), atunci aceasta este următoarea

    Mergeți la următorul cadru în sus sau în jos în stiva de funcții. Dacă sunteți în C, puteți merge la b sau puteți explora variabilele locale.

    Procesarea semnalelor

    Semnalele sunt mesaje aruncate după anumite evenimente, cum ar fi un cronometru sau erori. GDB poate întrerupe când detectează un semnal; le puteți ignora.

    mâner [semnal de semnal] [acțiune]

    Mâner SIGUSR1 nostop

    mânerul SIGUSR1 NOPRINT

    procesul ignora SIGUSR1

    Acesta îi spune lui GDB să ignore un anumit semnal (SIGUSR1) când are loc acest lucru. Există nivele diferite de ignorare.

    Treceți prin următoarele exemple pentru a înțelege procedura de depanare a programului și s-a renunțat la kernel.

    Acest exemplu demonstrează modul în care remediați o eroare care apare din cauza unei excepții care apare atunci când se împarte la zero.

    Acest exemplu demonstrează un program care poate reseta kernelul din cauza memoriei neinitializate.

    Ambele programe sunt scrise în C ++ și se creează un depozit de bază din diferite motive. După ce ați trecut prin aceste două exemple, ar trebui să puteți depana programele de generare a dumpurilor de bază C sau C + +.

    După terminarea acestei lecții, ar trebui să aveți o bună înțelegere a depanării unui program C sau C ++ utilizând GNU Debugger. Acum ar trebui să fie foarte ușor pentru tine să înveți funcționalitatea altor debugeri, deoarece sunt foarte asemănătoare cu GDB. Este foarte recomandat să treci prin alte programe de depanare, precum și să se familiarizeze cu caracteristicile lor.

    Există o mulțime de debugeri buni disponibili pe piață:

    DBX Debugger - Acest debugger vine cu Sun Solaris. și puteți obține informații complete despre acest program de depanare. folosind pagina manului DBX, adică omul DBX.

    DDD Debugger - Aceasta este o versiune grafică a DBX și este disponibilă gratuit în Linux. Pentru a avea un detaliu complet, folosiți pagina de ajutor DDD, adică omul DDD.

    Puteți obține detaliile complete despre GNU Debugger la următorul link: Debugging with GDB







    Articole similare

    Trimiteți-le prietenilor: