Avlusing (debugging)

For ? enklere kunne forst? hva programmet v?rt gj?r til enhver tid er det ofte praktisk ? kj?re programmet i en avluser (debugger p? engelsk). I en avluser kan vi overv?ke hva programmet v?rt gj?r, ofte, helt ned til hva hvert enkelt register inneholder. Dette gj?r det praktisk mulig ? forst? hvorfor programmet v?rt oppf?rer seg som det gj?r og samtidig se hvilke kodelinjer som f?rte til oppf?rselen.

I dette faget skal vi benytte oss av GDB som er en av de eldste og mest omfattende avluserene som finnes. Uheldigvis for oss s? har ogs? GDB et av de eldste brukergrensesnittene (p? godt og vondt), men det finnes heldigvis flere tredjeparts grensesnitt som vi kan benytte oss av. Et godt alternativ er gdbgui som kobler seg sammen med GDB og presenterer et moderne grensesnitt som burde fungere p? de fleste datamaskiner.

Installasjon

GDB burde allerede v?re installert p? din RPi, men hvis ikke s? kan programmet installeres ved ? kalle p? f?lgende i et terminalvindu.

For ? installere gdbgui kan man kj?re f?lgende kommandoer i et terminalvindu


sudo apt-get update
sudo apt-get upgrade
python3 -m pip install --user pipx
python3 -m userpath append ~/.local/bin/
python3 -m pipx ensurepath

Lukk terminalen, og ?pne en ny terminal. Kj?r s? f?lgende kommando:


pipx install gdbgui

Bruk

For ? illustrere bruken av gdbgui kommer til ? bruke et enkelt “tomt” program for ? vise hovedmomentene som man m? kunne. F?lgende bilde illustrere programmet vi skal avluse.

Geany med programsnutt
Geany med programsnutt

Det neste vi trenger ? gj?re er ? konvertere programmet til maskinkode. Det kan gj?res med f?lgende instruksjon.

Legg merke til at du trenger ? gj?re dette hver gang du gj?r endringer i kildekode filen (i dette tilfellet filen part1.s).

For ? starte avlusing kan vi kj?re f?lgende kommando (merk at -b chromium-browser bare trengs p? RPi fordi to nettlesere er installert og den vanlige ikke st?tter gdbgui).

Som burde gi f?lgende utskrift samt ?pne nettleseren v?r.

Terminalvindu med gdbgui
Terminalvindu med gdbgui

Du vil n? se at nettleseren ?pner seg. Hvis du f?r beskjed om at nettleseren ikke klarer ? koble til s? burde det holde ? vente litt og hvis ikke det skjer noe kan du pr?ve ? laste siden p? nytt (hvis ikke dette fungerer se seksjonen under om feils?king). Neste bilde viser hvordan det burde se ut hvis alt har g?tt som det skal.

Gdbgui oppstartsskjerm
Gdbgui oppstartsskjerm

P? bilde over kan vi se at gdbgui best?r av tre hovedelementer. P? midten, til venstre, ser vi programmet v?rt. P? midten, til h?yre, ser vi informasjon om tilstanden til maskinen. Og nederst ser vi tilstanden til GDB. Hvis vi ser ?verst i h?yre hj?rne ser vi kontrollene som styrer GDB.

N?r programmet starter opp slik som over vil det i hovedsak ikke gj?re s? mye. Vi kan se p? linje 7 i programvinduet at det er uthevet i bl?tt. Dette indikerer at et stoppunkt (breakpoint p? engelsk) er laget p? linjen og programmet v?rt vil stoppe p? denne linjen. N?r vi starter ? avluse er det lurt ? alltid plassere et stoppunkt tidlig slik at GDB ikke kj?rer for mange instruksjoner. Vi kan selv plassere stoppunkter ved ? trykke p? en linje slik at den blir uthevet i bl?tt.

For ? starte avlusing m? vi f?rste gang restarte programmet. I gdbgui gj?res dette ved ? trykke p? run markert i bildet under.

Gdbgui run
Gdbgui run

Du vil n? se at gdbgui arbeider litt f?r den lager en lys utheving p? kj?rende linje i programmet v?rt. I bilde over burde du kunne se en lys utheving p? linje 7.

N?r du skal kj?re programmet ditt anbefaler vi at du kj?rer en linje om gangen. Dette kan gj?res ved ? trykke p? knappen uthevet i neste bilde eller trykke p? , (komma-tasten). Da vil GDB kj?re en og en instruksjon for oss og vi kan veldig enkelt f? en oversikt over hva som skjer.

Gdbgui step
Gdbgui step

N?r du avluser programmet ditt s? m? du passe p? to ting. Hvilken linje av programmet ditt kj?res og hva er tilstanden til maskinen. Det f?rste punktet kan vi enkelt se i programvinduet til gdbgui med uthevet linje (ikke bl? utheving). Mens det andre punktet m? vi unders?ke selv ved ? ?pne registers i tilstandsvinduet, illustrert i bilde under.

Gdbgui tilstandsvindu
Gdbgui tilstandsvindu

I bildet over legg ogs? merke til at “n?v?rende programlinje” er 15.

Dette har v?rt en veldig enkel innf?ring i gdbgui vi anbefaler at du unders?ker ytterligere egenskaper til gdbgui p? egenh?nd. Avlusing og GDB er veldig kraftige verkt?y som man helt klart ser igjen som programmerer.

Feils?king

Hvis gdbgui stopper og fungere kan det v?re n?dvendig ? avslutte GDB. Se f?rst til at du har avsluttet alle gdbgui prosesser (sudo killall gdbgui) deretter kj?r sudo killall gdb for ? passe p? at ingen GDB prosesser har blitt hengende igjen. Pr?v ? starte gdbgui p? nytt.

Hvis ingen av stegene fungerer for deg ta kontakt med gruppel?rere!