GNU Debugger

GNU Debugger Popis obrázku Gdb-7.3-debugging-session.png. Informace
Vyvinul Projekt GNU
První verze 1986
Poslední verze 10,2 (25. dubna 2021)
Vklad sourceware.org/git/gitweb.cgi?p=binutils-gdb.git
Napsáno C a schéma
Operační systém GNU / Linux , BSD ( d ) , Microsoft Windows a macOS
Jazyky Angličtina
Typ Debugger
Licence GPL-3.0 + ( d )
webová stránka www.gnu.org/software/gdb

GNU Debugger , také nazývaný GDB , jestandardní debugger pro projekt GNU . Je přenosný na mnoha unixových systémech a funguje pro několik programovacích jazyků, jako jsou C , C ++ , Fortran , Ada , Objective-C a Go . Autorem byl Richard Stallman v roce 1988. GDB je svobodný software vydaný pod licencí GNU GPL .

Dějiny

GDB byl nejprve napsán podle Richarda Stallmana v roce 1986 po boku svého GNU systému , po GNU Emacs byl považován za „rozumně stabilní“. GDB je bezplatný software vydávaný na základě GNU General Public License (GPL). Je inspirován debuggerem DBX , který byl součástí unixové distribuce Berkeley .

V letech 1990 až 1993 ji udržoval John Gilmore . Nyní je udržován řídícím výborem GDB, který byl založen Free Software Foundation .

Vlastnosti

GDB pracuje na mnoha různých architekturách procesorů a umožňuje vzdálené ladění (běžící přes sériové nebo IP připojení) aplikací běžících na cílové platformě odděleně od vývojové platformy. To možná na dvou různých typech procesorů.

GDB umožňuje ladění spuštěného programu (odvíjením instrukce instrukcí nebo zkoumáním a úpravou jeho dat), ale také umožňuje posmrtné ladění analýzou souboru jádra, který představuje obsah dokončeného programu.

Uživatelská rozhraní

Rozhraní GDB je jednoduchý příkazový řádek, ale existují front-end aplikace, které mu dávají mnohem uživatelsky přívětivější grafické rozhraní. Obslužný program ddd například umožňuje kliknout na řádek kódu přímo v seznamu a umístit tam zarážku, zatímco samotný GDB vyžaduje zadání čísla řádku. Všimněte si také, že GDB je často vyvoláván na pozadí integrovanými vývojovými prostředími, jako je Eclipse .

Vzdálené ladění

GDB nabízí „vzdálený“ režim, který lze často použít při ladění na integrovaných systémech. Vzdálená operace je, když GDB běží na jednom počítači a laděný program běží na jiném počítači . GDB může také komunikovat se vzdáleným „stubem“, který rozumí protokolu GDB, přes sériové zařízení nebo přes protokol TCP / IP . Náhradní program lze vytvořit propojením s příslušnými stub soubory dodávanými s GDB, které implementují cílovou stranu komunikačního protokolu. Je také možné použít gdbserver ke vzdálenému ladění programu, aniž byste jej museli upravovat.

KGDB také používá stejný režim k ladění běžícího linuxového jádra na zdrojové úrovni pomocí gdb. S KGDB mohou vývojáři jádra ladit jádro stejným způsobem, jakým ladí aplikační programy. Umožňuje vám umístit zarážky do kódu jádra, projít kódem a také sledovat proměnné. Na některých architekturách, kde jsou k dispozici registry ladění hardwaru, je možné definovat kontrolní body, které spouštějí zarážky při provádění zadaných adres paměti. KGDB vyžaduje, aby byl pomocí sériového nebo ethernetového kabelu odladěn další počítač připojený k počítači . V operačním systému FreeBSD je také možné ladit pomocí přímého přístupu k paměti Firewire.

Příklady příkazů

gdb program spusťte gdb s programem "program"
spustit -v spusťte program načtený s parametrem "-v"
bt zobrazí trasování hovorů (užitečné v případě selhání programu)
informační registry zobrazí všechny registry
řekni ruku rozebrat hlavní funkci

Příklad použití

Zvažte následující zdrojový kód napsaný v jazyce C:

//Bibliothèques standard du C #include <stdio.h> #include <stdlib.h> #include <string.h> size_t foo_len( const char *s ) { return strlen( s ); } int main( int argc, char *argv[] ) { const char *a = NULL; printf( "size of a = %lu\n", foo_len(a) ); return 0; }

Pokud používáte kompilátor GCC v systému Linux , výše uvedený kód by měl být kompilován s příznakem -g, aby zahrnoval příslušné ladicí informace o generovaném binárním souboru, což umožňuje jeho kontrolu pomocí GDB. Za předpokladu, že soubor obsahující výše uvedený kód se nazývá example.c, příkaz pro kompilaci může být:

$ gcc exemple.c -Og -g -o exemple

A binární soubor lze nyní spustit:

$ ./exemple Segmentation fault

Když je binární soubor spuštěn, generuje chybu segmentace, GDB lze použít ke kontrole problému za účelem jeho vyřešení.

$ gdb ./exemple GNU gdb (GDB) Fedora (7.3.50.20110722-13.fc16) Copyright (C) 2011 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "x86_64-redhat-linux-gnu". For bug reporting instructions, please see: <https://www.gnu.org/software/gdb/bugs/>... Reading symbols from /path/exemple...done. (gdb) run Starting program: /path/exemple Program received signal SIGSEGV, Segmentation fault. 0x0000000000400527 in foo_len (s=0x0) at exemple.c:8 8 return strlen (s); (gdb) print s $1 = 0x0

Problém je přítomen na řádku 8 a nastává při volání funkce strlen (protože jeho argument s je NULL). V závislosti na implementaci strlen (online nebo ne) se může výsledek lišit, například:

GNU gdb (GDB) 7.3.1 Copyright (C) 2011 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "i686-pc-linux-gnu". For bug reporting instructions, please see: <https://www.gnu.org/software/gdb/bugs/>... Reading symbols from /tmp/gdb/exemple...done. (gdb) run Starting program: /tmp/gdb/exemple Program received signal SIGSEGV, Segmentation fault. 0xb7ee94f3 in strlen () from /lib/i686/cmov/libc.so.6 (gdb) bt #0 0xb7ee94f3 in strlen () from /lib/i686/cmov/libc.so.6 #1 0x08048435 in foo_len (s=0x0) at exemple.c:8 #2 0x0804845a in main (argc=<optimized out>, argv=<optimized out>) at exemple.c:16

Chcete-li tento problém vyřešit, musí proměnná a (v hlavní funkci) obsahovat platný řetězec. Například :

//Bibliothèques standard du C #include <stdio.h> #include <stdlib.h> #include <string.h> size_t foo_len( const char *s ) { return strlen(s); } int main( int argc, char *argv[] ) { //correction ici const char *a = "Hello World!\n"; printf( "size of a = %lu\n", foo_len(a) ); return 0; }

Nyní, když překompilujeme a znovu spustíme binární soubor s GDB, je výsledek správný:

GNU gdb (GDB) Fedora (7.3.50.20110722-13.fc16) Copyright (C) 2011 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "x86_64-redhat-linux-gnu". For bug reporting instructions, please see: <https://www.gnu.org/software/gdb/bugs/>... Reading symbols from /path/exemple...done. (gdb) run Starting program: /path/exemple size of a = 13 [Inferior 1 (process 14290) exited normally]

GDB zobrazuje na standardním výstupu, že program skončil normálně.

Bibliografie

  • (en) Richard Stallman , Roland Pesch , Stan Shebs et al. , Debugging with GDB: The GNU Source-Level Debugger , Free Software Foundation,2012, 10 th  ed. , 616  s. ( ISBN  978-0-9831592-3-0 )
  • (en) Arnold Robbins, GDB Pocket Reference , O'Reilly Media,Květen 2005, 1 st  ed. , 78  s. ( ISBN  978-0-596-10027-8 , číst online )

Podívejte se také

Poznámky a odkazy

  1. „  Richard Stallman přednáška na Royal Institute of Technology, Švédsko  (1986-10-30) “ (přístupné 09.10.2019 )  : „  Teprve potom GNU Emacs byl poměrně stabilní, což se koneckonců asi rok a půl, začal jsem se vracet k dalším částem systému. Vyvinul jsem debugger, který jsem nazval GDB, což je symbolický debugger pro C kód, který nedávno vstoupil do distribuce. Nyní je tento debugger do značné míry v duchu DBX, což je debugger dodávaný s Berkeley Unix.  "
  2. (in) Joel Brobecker, „  Vydáno GDB 10.2!  " ,25. dubna 2021(zpřístupněno 4. května 2021 )
  3. (in) „  Řídící výbor GDB  “ (zpřístupněno 11. května 2008 )
  4. (in) Norman Matloff a Peter Jay Salzman , The Art of Debugging with GDB, DDD, and Eclipse , No Starch Press,2008, 264  s. ( ISBN  978-1-59327-174-9 , číst online ).

externí odkazy