logo

GDB (stapsgewijze introductie)

GDB staat voor GNU Project Debugger en is een krachtige foutopsporingstool voor C (samen met andere talen zoals C++). Het helpt je om rond te snuffelen in je C-programma's terwijl deze worden uitgevoerd, en je kunt ook zien wat er precies gebeurt als je programma crasht. GDB werkt met uitvoerbare bestanden, dit zijn binaire bestanden die worden geproduceerd door het compilatieproces.

Voor demodoeleinden wordt het onderstaande voorbeeld uitgevoerd op een Linux-machine met de onderstaande specificaties.



uname -a>
je naam

naam -a

Laten we leren door te doen: –

Start GDB

Ga naar je Linux-opdrachtprompt en typ gdb.

gdb>

gdb



paaseieren in Android

Gdb open prompt laat u weten dat het klaar is voor opdrachten. Om gdb af te sluiten, typt u quit of q.

quit_gdb

Stoppen

Compileer de code

Hieronder staat een programma dat ongedefinieerd gedrag vertoont wanneer het wordt gecompileerd met C99. lijst-1



Opmerking: Als een object met een automatische opslagduur niet expliciet wordt geïnitialiseerd, is de waarde ervan onbepaald, waarbij de onbepaalde waarde een niet-gespecificeerde waarde of een traprepresentatie is.

Compileer nu de code. (hier test.c). vlag betekent dat u de juiste namen van variabelen en functies in uw stapelframes kunt zien, regelnummers kunt krijgen en de bron kunt zien terwijl u door het uitvoerbare bestand loopt. -std=C99-vlag impliceert het gebruik van standaard C99 om de code te compileren. -o vlag schrijft de build-uitvoer naar een uitvoerbestand.

gcc -std=c99 -g -o test test.C>

gcc -std=c99 -g -o test test.C

Voer GDB uit met het gegenereerde uitvoerbare bestand

Typ de volgende opdracht om GDB te starten met het gecompileerde uitvoerbare bestand.

gdb ./test>

gdb./test

Handige GDB-opdrachten:

Hier zijn een paar handige opdrachten om aan de slag te gaan met GDB.

Commando Beschrijving
rennen of r Voert het programma van begin tot eind uit.
breken of b Stelt een breekpunt in op een bepaalde lijn.
uitzetten Schakelt een onderbrekingspunt uit
inschakelen Schakelt een uitgeschakeld breekpunt in.
volgende of n Voert de volgende regel code uit zonder in functies te duiken.
stap Gaat naar de volgende instructie en duikt in de functie.
lijst of l Geeft de code weer.
afdrukken of blz Geeft de waarde van een variabele weer.
stoppen of q Verlaat GDB.
duidelijk Wist alle breekpunten.
doorgaan Gaat door met de normale uitvoering

Geef de code weer

Typ nu l bij de gdb-prompt om de code weer te geven.

breekpunt

Geef de code weer

Stel een breekpunt in

Laten we een breekpunt introduceren, bijvoorbeeld regel 5.

info_b

Stel een breekpunt in

Als u een breekpunt op verschillende regels wilt plaatsen, kunt u b typen regelnummer Standaard geeft lijst of l alleen de eerste 10 regels weer.

tostring-methode

Bekijk breekpunten

Om de breekpunten te zien, typt u info b.

uitzetten

Bekijk breekpunten

Schakel een breekpunt uit

Nadat u het bovenstaande heeft gedaan, stellen we dat u van gedachten bent veranderd en dat u terug wilt keren. Typ uitschakelen b.

inschakelen-1

Schakel een breekpunt uit

Schakel een uitgeschakeld breekpunt opnieuw in

Zoals aangegeven in de blauwe cirkel wordt Enb n voor gehandicapten. 9. Om het recentelijk uitgeschakelde breekpunt opnieuw in te schakelen. Typ inschakelen b.

eerste loop

Schakel een uitgeschakeld breekpunt opnieuw in

Voer de code uit

Voer de code uit door run of r te typen. Als u geen breekpunten hebt ingesteld, voert de opdracht run eenvoudigweg het volledige programma uit.

print_waarde_x

Voer de code uit

Variabelewaarden afdrukken

Om de waarde van de variabele te zien, typt u print variabele_naam of blz variabele_naam .

Variabelewaarden afdrukken

Het bovenstaande toont de waarden die zijn opgeslagen bij x op het moment van uitvoering.

Variabelewaarden wijzigen

Om de waarde van de variabele in gdb te wijzigen en door te gaan met de uitvoering met de gewijzigde waarde, typt u set variabele_naam .

Uitvoer debuggen

De onderstaande schermafbeelding toont de waarden van variabelen waarvan het heel begrijpelijk is waarom we een afvalwaarde als uitvoer kregen. Bij elke uitvoering van . /test we zullen een andere uitvoer ontvangen.

Oefening: Probeer set x = 0 in gdb te gebruiken bij de eerste keer uitvoeren en bekijk de uitvoer van c.

Uitvoer debuggen

GDB biedt veel meer manieren om uw code te debuggen en te begrijpen, zoals het onderzoeken van de stapel, het geheugen, de threads, het manipuleren van het programma, enz. Ik hoop dat het bovenstaande voorbeeld u op weg helpt met gdb.

Conclusie

In dit artikel hebben we GDB (GNU Debugger) besproken, een krachtig hulpmiddel in Linux dat wordt gebruikt voor het debuggen van C-programma's. We hebben enkele van de volgende stappen besproken, zodat we uw code kunnen compileren met foutopsporingsinformatie, GDB kunnen uitvoeren, breekpunten kunnen instellen, variabelen kunnen onderzoeken en programmagedrag kunnen analyseren. We hebben ook de functies van GDB besproken, zoals codeonderzoek, breekpuntbeheer, manipulatie van variabelen en controle over de programma-uitvoering, waardoor we efficiënt fouten kunnen opsporen en problemen kunnen oplossen.