Da biste pripremili program za debagovanje morate ga kompajlirati sa -g flagom. Npr: > gcc -g main.c myAssemblyFunc.s Potom pokrecemo gdb i prosledjujemo mu ime izvrsnog fajla koji smo napravili: > gdb a.out Komande (za vecinu komandi postoje skracenice, dovoljno je ukucati prvih nekoliko slova kako bi se jednoznacno mogla odrediti zeljena komanda. Na primer, sve naredne komande rade istu stvar: 'n', 'ne', 'nex', 'next') tui enable ex1. > tui enable - ukljucuje se Text-User-Interface, iznad komandne linije se pravi prozor u kojem se prati tok izvrsavanja programa kroz izvorni kod tui disable - iskljucuje TUI tui reg general ex1. > tui reg general - pravi se novi prozor u kojem se prate vrednosti svih osnovnih registara start ex1. > run - pokrece program, zaustavlja se na prvoj liniji koda pri pozivu main funkcije run ex1. > run - pokrece program, zaustavlja se na prvom breakpointu koji ste postavili, ako takav ne postoji, program se izvrsava kao uobicajeno break ex1. > break 16 ex2. > b 22 ex3. > b main.c:22 - postavlja se breakpoint na liniji izvornog koda koja je prosledjena kao argument - takodje se moze proslediti i ime izvornog fajla u kojem zelimo da postavimo breakpoint ako u projektu postoji vise fajlova next ex1. > next ex1. > n - izvrsava se trenutna linija koda, ako je u pitanju funkcija ulazimo u nju step ex1. > step ex1. > s - izvrsava se trenutna linija koda, ako je u pitanju funkcija izvrsava se cela i prelazi se na sledecu liniju koda nexti ex1. > nexti ex2. > ni - isto kao za next, samo sto radi sa instrukcijama stepi ex1. > stepi ex2. > si - isto kao za step, samo sto radi sa instrukcijama print variableName ex1. > print varName - ispisuje vrednost promenljive "examine" ex1. > x addr ex2. > x $rax # gde je rax registar ex3. > x &value # gde je value labela koja oznacava adresu podataka(npr. u okviru .bss sekcije) - ispisuje vrednost memorije na adresi prosledjenoj kao argument finish ex1. > finish - zavrsi trenutnu funkciju i zaustavi se na sledecoj liniji koda posle povratka iz nje