GNU Debugger

GNU Debugger A Gdb-7.3-debugging-session.png kép leírása. Információ
Fejlesztette GNU Project
Az első verzió 1986
Utolsó verzió 10,2 (2021. április 25)
Letét sourceware.org/git/gitweb.cgi?p=binutils-gdb.git
Beírva C és a reakcióvázlat
Operációs rendszer GNU / Linux , BSD ( d ) , Microsoft Windows és macOS
Nyelvek angol
típus Hibakereső
Engedély GPL-3.0 + ( d )
Weboldal www.gnu.org/software/gdb

A GNU Debugger , más néven GDB , a GNU Project szokásos hibakeresője . Számos Unix- szerű rendszeren hordozható,és számos programozási nyelvhez használható, például C , C ++ , Fortran , Ada , Objective-C és Go . Richard Stallman írta1988-ban. A GDB ingyenes szoftver , amelyet a GNU GPL licenc alatt bocsátottak ki.

Történelem

A GDB-t először Richard Stallman írta 1986-ban a GNU rendszere mellett , miután a GNU Emacs- ot "meglehetősen stabilnak" tartották. A GDB egy ingyenes szoftver, amelyet a GNU General Public License (GPL) alatt bocsátottak ki . A DBX hibakereső ihlette , amely a Berkeley Unix terjesztésének része volt .

1990 és 1993 között John Gilmore tartotta fenn . Most a GDB irányító bizottsága tartja fenn, amelyet a Szabad Szoftver Alapítvány hozott létre .

Jellemzők

A GDB sokféle processzorarchitektúrán dolgozik , és lehetővé teszi az alkalmazások távoli hibakeresését (soros vagy IP kapcsolaton keresztül) a fejlesztői platformtól külön célplatformon futó alkalmazások számára. Ez valószínűleg két különböző típusú processzoron.

GDB lehetővé teszi a hibakeresés egy futó programot (a lazításhoz azt utasításról utasításra vagy vizsgálata és módosítása az adatok), hanem azt is lehetővé kórbonctani hibakeresés elemzésével a core fájlt , amely képviseli a tartalmát egy kész program. Rendellenesen.

Felhasználói felületek

A GDB felülete egyszerű parancssor, de vannak olyan front-end alkalmazások, amelyek sokkal felhasználóbarátabb grafikus felületet adnak neki. A ddd segédprogram például lehetővé teszi a kódsorra kattintást közvetlenül a listában, hogy ott töréspontot helyezzen el, míg a GDB önmagában megköveteli a sorszám megadását. Vegye figyelembe azt is, hogy a GDB-re a háttérben gyakran olyan integrált fejlesztői környezetek hivatkoznak, mint az Eclipse .

Távoli hibakeresés

A GDB egy "távoli" módot kínál, amely gyakran használható integrált rendszerek hibakeresésekor. A távoli működés akkor történik, amikor a GDB egy számítógépen fut, a hibakeresés alatt álló program pedig egy másik számítógépen fut . A GDB kommunikálhat a távoli "csonkkal" is, amely érti a GDB protokollt soros eszközön vagy a TCP / IP protokollon keresztül . Csereprogram hozható létre a GDB-vel szállított megfelelő csonkfájlokhoz kapcsolva, amelyek megvalósítják a kommunikációs protokoll céloldalát. Az is lehetséges, hogy a gdbserver segítségével távolról hibakeresést végezzen a programon anélkül, hogy módosítania kellene.

A KGDB ugyanazt a módot használja a futó Linux kernel forrásszintű hibakeresésére a gdb-vel. A KGDB segítségével a rendszermag-fejlesztők ugyanúgy hibakeresést végezhetnek egy kernelben, mint az alkalmazás-programok. Lehetővé teszi töréspontok elhelyezését a kernel kódjában, a kód bejárását és a változók megfigyelését. Néhány olyan architektúrán, ahol hardveres hibakeresési regiszterek állnak rendelkezésre, lehetőség van olyan ellenőrzőpontok definiálására, amelyek töréspontokat váltanak ki, amikor a megadott memóriacímeket végrehajtják. A KGDB megköveteli egy további számítógéphez csatlakoztatott számítógép hibakeresését soros vagy Ethernet kábellel . A FreeBSD operációs rendszeren lehetőség van hibakeresésre is a Firewire memóriához való közvetlen hozzáférés segítségével.

Példák parancsokra

gdb program futtassa a gdb-t a "program" programmal
futás -v indítsa el a "-v" paraméterrel feltöltött programot
bt megjeleníti a hívás nyomát (hasznos, ha a program összeomlik)
info regiszterek megjeleníti az összes regisztert
mondj kezet szerelje szét a fő funkciót

Példa felhasználásra

Tekintsük a következő C-ben írt forráskódot:

//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; }

Ha a GCC fordító a Linux , a fenti kódot kell összeállítani a -g zászlót tartalmazza a megfelelő hibakeresés információt a generált bináris, lehetővé téve, hogy ellenőrizni kell a GDB. Feltételezve, hogy a fenti kódot tartalmazó fájlt example.c-nek hívják, a fordítás parancsa a következő lehet:

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

És a bináris fájl most végrehajtható:

$ ./exemple Segmentation fault

A bináris végrehajtásakor szegmentálási hibát generál, a GDB segítségével a probléma megvizsgálható annak megoldása érdekében.

$ 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

A probléma a 8. vonalon van, és a strlen függvény meghívásakor jelentkezik (mert az argumentuma, s, NULL). A strlen (online vagy nem) megvalósításától függően az eredmény eltérő lehet, például:

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

A probléma megoldásához az a változónak (a fő függvényben) érvényes karakterláncot kell tartalmaznia. Például :

//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; }

Most, ha újrafordítjuk és újra futtatjuk a bináris fájlt a GDB-vel, az eredmény helyes:

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]

A GDB a normál kimeneten azt jeleníti meg, hogy a program normálisan véget ért.

Bibliográfia

  • (en) Richard Stallman , Roland Pesch , Stan Shebs et al. , Hibakeresés a GDB-vel: A GNU forrásszintű hibakereső , Free Software Foundation,2012, 10 th  ed. , 616  p. ( ISBN  978-0-9831592-3-0 )
  • en) Arnold Robbins, GDB Pocket Reference , O'Reilly Media,2005. május, 1 st  ed. , 78  p. ( ISBN  978-0-596-10027-8 , online olvasás )

Lásd is

Megjegyzések és hivatkozások

  1. „  Richard Stallman előadás a svéd Királyi Műszaki Intézetben (1986-10-30)  ” (hozzáférés  : 2019. október 9. ) : „  Aztán miután a GNU Emacs meglehetősen stabil volt, ami összességében körülbelül egy évet vett igénybe, és félig kezdtem visszatérni a rendszer más részeihez. Kidolgoztam egy hibakeresőt, amelyet GDB-nek hívtam, ami egy szimbolikus hibakereső a C kódhoz, amely nemrégiben lépett terjesztésbe. Ez a hibakereső nagyrészt a DBX szellemében van, amely egy hibakereső, amely a Berkeley Unix-szal érkezik.  "
  2. (in) Joel Brobecker, GDB 10.2 megjelent!  " ,2021. április 25(elérhető : 2021. május 4. )
  3. (in) "  GDB Irányító Bizottság  " (hozzáférés: 2008. május 11. )
  4. (in) Norman Matloff és Peter Jay Salzman , The Art of Hibakeresés GDB, DDD, és az Eclipse , No Starch Press,2008, 264  p. ( ISBN  978-1-59327-174-9 , online olvasás ).

Külső linkek