Kuinka käyttää GNU Debuggeria Linuxissa

GNU Debuggeria käytetään ohjelman virheenkorjaukseen, kaatumisen analysointiin tai sen näkemiseen, mitä ohjelma tekee tietyssä kohdassa. Sen kehitti GNU Project 1980-luvulla, ja se on ollut yksi yleisimmin käytetyistä komentorivin virheenkorjausohjelmista sekä yksi suosituimmista GNU-ohjelmistoista.

Kirjoitetaan ensin pieni C-ohjelma, jonka jälkeen teemme virheenkorjauksen. Aloita luomalla uusi .c tiedostoa käyttämällä vim tai mikä tahansa valitsemasi editori:

vim testi.c

Luo seuraava C-ohjelma:

#include int main() { int i = 5; float f = 5,5 i = i + 3; f = f + 2,2; printf("I:n ja f:n arvot ovat: %d ja %f\n", i, f); paluu 0; }

Lehdistö Paeta siirtyäksesi vim-komentotilaan. Kirjoita sitten :wq tallentaaksesi ohjelman ja poistuaksesi.

Käännä ja katso, toimiiko ohjelma:

gcc test.c -o testi ./test Arvot i ja f ovat: 8 ja 7,700000

Voit ottaa virheenkorjaustuen käyttöön ohjelmassa kokoamme sen kanssa -g lippu. Jos lippua ei käytetä, käyttäjä voi silti tehdä ohjelman virheenkorjauksen, vaikkakin rajoitetuin vaihtoehdoin.

gcc test.c -g -o -testi

Aloita virheenkorjaus suoritustiedostomme testata sisään gdb, me juoksemme:

gdb testi

Se avaa gdb konsoli, johon voit kirjoittaa gdb komentoja. Näet komentoluettelon käyttämällä auta komento.

$(gdb) help Luettelo komentoluokista: aliakset -- Muiden komentojen aliakset keskeytyspisteet -- Ohjelman pysäyttäminen tietyissä pisteissä data -- Datatiedostojen tutkiminen -- Tiedostojen sisäisten ominaisuuksien määrittäminen ja tutkiminen -- Huoltokomennot epäselviä -- Epäselviä ominaisuuksia käynnissä -- Ohjelmapinon suorittaminen -- Pinon tilan tutkiminen -- Tilakyselyiden tuki -- Tukitilojen jäljityspisteet -- Ohjelman suorituksen jäljitys pysäyttämättä ohjelmaa käyttäjän määrittämä -- Käyttäjän määrittämät komennot Kirjoita "help" ja luokan nimi saadaksesi luettelon kyseisen luokan komentoista. Kirjoita "help all" nähdäksesi luettelon kaikista komennoista. Kirjoita "help" ja sen jälkeen komennon nimi saadaksesi täydelliset asiakirjat. Kirjoita "apropos sana" etsiäksesi "sanaan" liittyviä komentoja. Komentojen nimien lyhenteet ovat sallittuja, jos ne ovat yksiselitteisiä.

Sitten voit kirjoittaa ohje luokan_nimi nähdäksesi kyseiseen luokkaan kuuluvat komennot. Jos haluat etsiä komentoja alimerkkijonon avulla, käytä apropos osamerkkijono.

Voit asettaa keskeytyskohdan, kun ohjelma siirtyy funktioon, juosta:

$(gdb) break main

Tässä asetamme keskeytyskohdan koodimme ainoalle funktiolle, ts. pää. Käytä komentoa juosta suorittaaksesi ohjelman seuraavaan keskeytyskohtaan tai poistumiseen asti.

$(gdb) suorita

Jos haluat asettaa keskeytyskohdan funktion tiettyyn kohtaan, käyttää:

tauko *pää + 4

Tämä asettaa keskeytyskohdan funktion main 4. riville.

Nyt, siirtyäksesi ohjelman kulun yli seuraavalle koodiriville, yksinkertaisesti ajaa askel komento.

$(gdb) vaihe 5: float f = 5,5;

Jos haluat näyttää muuttujan sisällön, juosta näyttö .

$(gdb) näyttö i 6: i = 5

Jos haluat muuttaa muuttujan sisältöä, jota saatetaan tarvita ohjelman ajon analysoimiseksi muuttujan tietyillä arvoilla, run set variable =Lauseke.

$(gdb) aseta muuttuja i=10 $(gdb) näyttö i 7: i = 10

Tässä 'lauseke' voi olla mikä tahansa kelvollinen (aritmeettinen / looginen) lauseke. Yksinkertaisuuden vuoksi annamme muuttujalle toisen arvon (10). i.

Tulostaaksesi ohjelman kokoonpanokoodin, käytä komentoa purkaa toiminnon nimi:

Käytä vain purkaa tulostaa koko ohjelman kokoonpanokoodi. Huomaa kokoonpanokoodin tietyllä rivillä oleva nuoli. Se osoittaa, että virheenkorjausistunto on tällä hetkellä keskeytetty kyseisessä muistipaikassa (eli kyseisellä koodirivillä).

Voit siirtyä debuggerin tietylle koodiriville juosta:

$(gdb) hyppy *main + 2 Jatkuu numerosta 0x400528. Katkopiste 2, 0x000000000040052a in main () at test.c:3 3 int main() { 1: i = 2: f = 3: h = (void *) 0x0 4: main = {int ()} 0x400526 5: i = 

Tämä saa debuggerin hyppäämään toiminnon 2. koodirivin muistipaikkaan pää. Huomaa, että tässä hyppäsin pääkohdan alusta suoraan toiseen paikkaan. Muuttuva siis i ei koskaan asetettu, mikä johtaa virheenkorjausvirheeseen, että se ei voi käyttää muistin sisältöä muuttujan osoitteessa i.

Nämä ovat joitain peruskomentoja, jotka voivat auttaa sinua pääsemään alkuun suoritettavan tiedoston virheenkorjauksessa Linuxissa. Toivomme, että tämän sivun tiedoista on sinulle apua.