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.