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.
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.
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.
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.
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.
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.
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!