Kaip naudoti „GNU Debugger“ sistemoje „Linux“.

GNU Debugger naudojamas programai derinti, gedimams analizuoti arba pamatyti, ką programa veikia tam tikru momentu. Jis buvo sukurtas GNU projekto devintajame dešimtmetyje ir buvo vienas iš plačiausiai naudojamų komandų eilutės derinimo priemonių, taip pat viena populiariausių GNU programinės įrangos.

Pirmiausia parašykime nedidelę C programą, kurią tada derinsime. Norėdami pradėti, sukurkite naują .c failą naudojant vim arba bet kuris jūsų pasirinktas redaktorius:

vim testas.c

Sukurkite šią C programą:

#include int main() { int i = 5; plūdė f = 5,5 i = i + 3; f = f + 2,2; printf("I ir f reikšmės yra: %d ir %f\n", i, f); grąžinti 0; }

Paspauskite Pabegti norėdami pereiti į vim komandų režimą. Tada įveskite :wq norėdami išsaugoti programą ir išeiti.

Sukompiliuokite ir pažiūrėkite, ar programa veikia:

gcc test.c -o test ./test i ir f reikšmės yra: 8 ir 7,700000

Norėdami įjungti derinimo palaikymą programoje, kompiliuojame su -g vėliava. Jei vėliavėlė nenaudojama, vartotojas vis tiek gali derinti programą, nors ir su ribotomis parinktimis.

gcc testas.c -g -o testas

Norėdami pradėti derinti mūsų vykdomąjį failą bandymas in gdb, mes bėgame:

gdb testas

Jis atidarys gdb konsolę, kur galite įvesti gdb komandas. Norėdami pamatyti komandų sąrašą, naudokite padėti komandą.

$(gdb) help Komandų klasių sąrašas: slapyvardžiai -- Kitų komandų lūžio taškai slapyvardžiai -- Programos sustabdymas tam tikruose duomenų taškuose -- Duomenų failų tyrimas -- Failų vidinių duomenų nurodymas ir tyrimas -- Priežiūros komandos neaiškios -- Neaiškios funkcijos -- Programos stekelio paleidimas -- Krūvos būsenos tyrimas -- Būsenos užklausų palaikymas -- Pagalbinių įrenginių sekimo taškai -- Programos vykdymo sekimas nesustabdant programos vartotojo nustatytos -- Vartotojo nustatytos komandos Įveskite "help" ir klasės pavadinimą tos klasės komandų sąrašui. Norėdami pamatyti visų komandų sąrašą, įveskite „help all“. Norėdami gauti visą dokumentaciją, įveskite „help“ ir komandos pavadinimą. Įveskite „apropos word“, kad ieškotumėte komandų, susijusių su „žodžiu“. Komandos pavadinimo santrumpos leidžiamos, jei jos nedviprasmiškos.

Tada galite rašyti pagalbos klasės_pavadinimas norėdami pamatyti tai klasei priklausančias komandas. Norėdami ieškoti komandų naudodami poeilelę, naudokite apropos poeilutė.

Norėdami nustatyti pertraukos tašką, kai programa įveda funkciją, paleisti:

$(gdb) break main

Čia mes nustatome lūžio tašką vienintelėje mūsų kodo funkcijoje, t.y. pagrindinis. Naudokite komandą paleisti paleisti programą iki kitos pertraukos taško arba iki išėjimo.

$(gdb) paleisti

Norėdami nustatyti pertraukos tašką tam tikroje funkcijos vietoje, naudoti:

pertrauka *pagrindinis + 4

Tai nustatys pertraukos tašką 4-oje pagrindinės funkcijos eilutėje.

Dabar norėdami pereiti per programos eigą į kitą kodo eilutę, tiesiog paleiskite žingsnis komandą.

$(gdb) 5 žingsnis: float f = 5,5;

Norėdami parodyti kintamojo turinį, paleisti ekranas .

$(gdb) ekranas i 6: i = 5

Norėdami pakeisti kintamojo turinį, kurių gali prireikti norint analizuoti programos vykdymą pagal konkrečias kintamojo reikšmes, paleisti nustatyti kintamąjį =Išraiška.

$(gdb) nustatyti kintamąjį i=10 $(gdb) ekranas i 7: i = 10

Čia „Išraiška“ gali būti bet kokia tinkama (aritmetinė / loginė) išraiška. Paprastumo dėlei kintamajam tiesiog priskiriame kitą reikšmę (10). i.

Norėdami atspausdinti programos surinkimo kodą, naudoti komandą išardyti funkcijos pavadinimą:

Naudokite tik išardyti spausdinti visos programos surinkimo kodą. Atkreipkite dėmesį į rodyklę konkrečioje surinkimo kodo eilutėje. Tai reiškia, kad derinimo seansas šiuo metu pristabdytas toje konkrečioje atminties vietoje (t. y. toje kodo eilutėje).

Norėdami pereiti prie tam tikros kodo eilutės derintuvo, paleisti:

$(gdb) šuolis *main + 2 Tęsiamas 0x400528. 2 lūžio taškas, 0x000000000040052a pagrindiniame () at test.c:3 3 int main() { 1: i = 2: f = 3: h = (tuščia *) 0x0 4: main = {int ()} 0x400526 5: i = 

Tai privers derintuvą peršokti į 2-osios funkcijos kodo eilutės atminties vietą pagrindinis. Atkreipkite dėmesį, kad čia aš perėjau iš pagrindinės vietos į tiesiai į antrąją vietą. Vadinasi, kintamasis i niekada nebuvo nustatytas, todėl derinimo priemonė išmeta klaidą, nes ji negali pasiekti atminties turinio kintamojo adresu i.

Tai yra keletas pagrindinių komandų, kurios gali padėti jums pradėti derinti vykdomąjį failą sistemoje „Linux“. Tikimės, kad šiame puslapyje pateikta informacija jums bus naudinga.