Kuidas kasutada GNU silurit Linuxis

GNU silurit kasutatakse programmi silumiseks, krahhi analüüsimiseks või programmi tegevuste vaatamiseks konkreetses punktis. Selle töötas välja 1980. aastatel GNU Project ja see on olnud üks enim kasutatavaid käsurea silujaid ja üks populaarsemaid GNU tarkvara.

Kirjutame esmalt väikese C-programmi, mille seejärel silume. Alustamiseks looge uus .c faili kasutades vim või mõni teie valitud toimetaja:

vim test.c

Looge järgmine C-programm:

#include int main() { int i = 5; ujuki f = 5,5 i = i + 3; f = f + 2,2; printf("I ja f väärtus on: %d ja %f\n", i, f); tagasi 0; }

Vajutage Põgenemine vim käsurežiimi minekuks. Seejärel tippige :wq programmi salvestamiseks ja väljumiseks.

Kompileerige ja vaadake, kas programm töötab:

gcc test.c -o test ./test i ja f väärtused on: 8 ja 7,700000

Silumistoe lubamiseks programmis me koostame selle koos -g lipp. Kui lippu ei kasutata, saab kasutaja siiski programmi siluda, ehkki piiratud valikutega.

gcc test.c -g -o test

Silumise alustamiseks meie käivitatav fail katsetada sisse gdb, me jookseme:

gdb test

See avab gdb konsool, kuhu saate sisestada gdb käske. Käskude loendi vaatamiseks kasutage nuppu abi käsk.

$(gdb) abi Käsuklasside loend: aliased -- Muude käskude aliased murdepunktid -- Programmi peatamine teatud punktide andmetes -- Andmefailide uurimine -- Failide sisemiste andmete täpsustamine ja uurimine -- Hoolduskäsud varjatud -- Varjatud funktsioonid töötavad -- Programmivirna käitamine -- Pinu oleku uurimine -- Olekupäringute tugi -- Tugirajatiste jälgimispunktid -- Programmi täitmise jälgimine ilma programmi peatamata kasutaja määratud -- Kasutaja määratud käsud Tippige "help", millele järgneb klassi nimi selle klassi käskude loendi jaoks. Kõigi käskude loendi kuvamiseks tippige "help all". Täieliku dokumentatsiooni saamiseks tippige "help", millele järgneb käsu nimi. Sisestage sõnaga "sõna" seotud käskude otsimiseks "apropos word". Käsunimede lühendid on lubatud, kui need on üheselt mõistetavad.

Seejärel saate tippida abi klassi_nimi et näha sellesse klassi kuuluvaid käske. Käskude otsimiseks alamstringi abil kasutage apropos alamstring.

Katkestuspunkti määramiseks, kui programm funktsiooni sisestab, jooksma:

$(gdb) break main

Siin seame katkestuspunkti meie koodi ainsale funktsioonile, st. peamine. Kasutage käsku jooksma programmi käivitamiseks kuni järgmise katkestuspunktini või väljumiseni.

$(gdb) käivitada

Katkestuspunkti määramiseks funktsiooni teatud asukohas kasuta:

paus *peamine + 4

See loob katkestuspunkti funktsiooni Main 4. real.

Nüüd et liikuda üle programmivoo järgmisele koodireale, lihtsalt käivitage samm käsk.

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

Muutuja sisu kuvamiseks jooksma kuva .

$(gdb) ekraan i 6: i = 5

Muutuja sisu muutmiseks mida võib vaja minna programmi käitamise analüüsimiseks muutuja, käivitamise, konkreetsete väärtuste all set muutuja =Avaldis.

$(gdb) seatud muutuja i=10 $(gdb) kuva i 7: i = 10

Siin võib "avaldis" olla mis tahes kehtiv (aritmeetiline / loogiline) avaldis. Lihtsuse huvides omistame muutujale veel ühe väärtuse (10). i.

Programmi koostekoodi printimiseks kasuta käsku demonteeri funktsiooninimi:

Kasutage lihtsalt lahti võtta kogu programmi montaažikoodi printimiseks. Pange tähele koostekoodi konkreetse rea noolt. See näitab, et silumisseanss on hetkel selles konkreetses mälukohas (st selles koodireas) peatatud.

Siluri käivitamiseks kindlale koodireale jooksma:

$(gdb) hüpe *main + 2 Jätkub 0x400528 juures. Katkestuspunkt 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 = 

See paneb siluri funktsiooni 2. koodirea mälukohta hüppama peamine. Pange tähele, et siin hüppasin põhipunkti algusest otse teise asukohta. Seega muutuv i ei olnud kunagi seatud, mille tulemuseks on siluri tõrketeade, et see ei pääse juurde muutuja aadressi mälu sisule i.

Need on mõned põhikäsud, mis aitavad teil Linuxis käivitatava faili silumist alustada. Loodame, et sellel lehel olev teave on teile kasulik.