Sök…


Anmärkningar

GDB (GNU Project debugger) är en kommandoradsbasfelsökare som är bra på att analysera körda och cored program. Enligt bruksanvisningen stöder GDB C, C ++, D, Go, Objekt-C, Fortran, Java, OpenCL C, Pascal, Rust, montering, Modula-2 och Ada.

GDB har samma funktionsuppsättning som de flesta felsökare men skiljer sig från de flesta som jag har använt i det är allt baserat på att skriva kommandon istället för att klicka på GUI-element. Några av dessa funktioner inkluderar:

  • Ställa in brytpunkter
  • Skriva ut värdet på variabler.
  • Ställa in värdet på variabler för att testa saker.
  • Visa stacken

Vad är GDB?

GDB, kort för GNU Debugger, är den mest populära felsökaren för UNIX-system att felsöka C- och C ++ -program. GNU Debugger, som också kallas gdb, är den mest populära felsökaren för UNIX-system att felsöka C- och C ++ -program.

GNU Debugger hjälper dig att få information om följande:

  • Om en kärndump inträffade, då vad uttalande eller uttryck kraschade programmet på?

  • Om ett fel uppstår vid körning av en funktion, vilken linje i
    programmet innehåller samtalet till den funktionen och vad är det
    parametrar?

  • Vilka är värdena på programvariabler vid en viss punkt under körning av programmet?

  • Vad är resultatet av ett visst uttryck i ett program?

Starta GDB

För att starta GDB i terminalen,

gdb <executable name>

För exemplet ovan med ett program som heter huvud, blir kommandot

gdb main

Ställa in brytpunkter

Du vill förmodligen att ditt program ska stanna vid någon tidpunkt så att du kan granska villkoren för ditt program. Raden där du vill att programmet ska stoppas tillfälligt kallas brytpunkten.

break <source code line number>

Kör ditt program

För att köra ditt program är kommandot, som du gissat,

run

Öppna en kärna

gdb -c coreFile pathToExecutable  

Arbeta med en kärnfil

Skapade detta riktigt dåliga program

 #include <stdio.h>
 #include <ctype.h>

// forward declarations


void bad_function()
{

   int *test = 5;

   free(test);

}


int main(int argc, char *argv[])
{
   bad_function();
   return 0;
}


gcc -g ex1.c

./a.out   //or whatever gcc creates
Segmentation fault (core dumped)

gdb -c core a.out

Core was generated by `./a.out'.

Program avslutat med signal SIGSEGV, Segmenteringsfel. # 0 __GI___libc_free (mem = 0x5) på malloc.c: 2929 2929 malloc.c: Ingen sådan fil eller katalog.

(gdb) where

# 0 __GI___libc_free (mem = 0x5) på malloc.c: 2929 # 1 0x0000000000400549 i bad_function () vid ex1.c: 12 # 2 0x0000000000400564 i huvudsak (argc = 1, argv = 0x7fffb825bd68) vid ex1.c: 19

Eftersom jag sammanställt med -g kan du se att samtalet säger till mig att det inte gillade koden på rad 12 av bad_function ()

Sedan kan jag undersöka testvariabeln som jag försökte frigöra

(gdb) up

# 1 0x0000000000400549 i bad_function () vid ex1.c: 12 12 gratis (test);

(gdb) print test

$ 1 = (int *) 0x5

(gdb) print *test

Det går inte att komma åt minnet på adress 0x5

I det här fallet är felet ganska uppenbart. Jag försökte frigöra en pekare som bara tilldelades adressen 5 som inte skapades av malloc så gratis har ingen aning om vad jag ska göra med den.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow