# GNU Debugger

De GNU Debugger (GDB) is een debugger voor Unix-achtige systemen met ondersteuning voor een groot aantal programmeertalen, waaronder Ada, assembly, C, C++, D, Objective-C, Free Pascal, Fortran, Modula-2 en Rust.

## Geschiedenis

De ontwikkeling aan GDB werd in 1986 gestart door Richard Stallman als onderdeel van zijn GNU-systeem, nadat hij GNU Emacs (zie Emacs) "relatief stabiel" vond. GDB is vrije software die verspreid wordt onder de GNU General Public License (GPL). De GNU Debugger is ontworpen naar het voorbeeld van de DBX-debugger die meegeleverd werd met Berkeley Unix-distributies.
De GNU Debugger wordt onderhouden door de GDB-stuurgroep (GDB Steering Committee) dat samengesteld wordt door de Free Software Foundation.

## Technische details
### Features

GDB biedt uitgebreide mogelijkheden voor het volgen en aanpassen van de uitvoering van computerprogramma's. De gebruiker kan de interne variabelen van een programma monitoren en aanpassen en functies aanroepen onafhankelijk van het normale gedrag.
GDB werkt op computers met zeer diverse instructiesets.
GDB wordt nog steeds actief ontwikkeld. In versie 7.0 werd onder meer ondersteuning voor Python-scripting toegevoegd. In versie 7.8 werd GNU Guile-scripting toegevoegd. Sinds versie 7.0 is er ook ondersteuning voor "achteruit debuggen". Dit houdt in dat er niet alleen naar de volgende stap gegaan kan worden in de code, maar ook naar de vorige. Dit kan bijvoorbeeld gebruikt worden om te kijken wat er gebeurde voordat een programma crashte.

### Remote debugging

GDB biedt een remote-modus, die gebruikt kan worden om embedded systemen te debuggen. Dit houdt in dat GDB draait op de eerste machine en dat het programma dat gedebugd wordt draait op een tweede machine. GDB kan communiceren met de remote module via het GDB-protocol. Hiervoor kan een seriële verbinding of een TCP/IP-verbinding gebruikt worden.
Dezelfde modus wordt gebruikt door KGDB om een draaiende Linuxkernel te debuggen met gdb. Met KGDB kunnen kernelontwikkelaars een Linuxkernel op vrijwel dezelfde manier debuggen als computerprogramma's. KGDB maakt het mogelijk om breekpunten te plaatsen in kernelcode, door de code te lopen en variabelen te monitoren. Op architecturen waar hardware-registers bestaan, kunnen watchpoints gebruikt worden. Watchpoints kunnen breekpunten starten wanneer bepaalde geheugenadressen worden uitgevoerd of uitgelezen. KGDB heeft een extra machine nodig die verbonden is aan de machine die gedebugd moet worden. Deze verbinding kan serieel of via ethernet verlopen. Op FreeBSD is het daarnaast ook mogelijk om te debuggen via FireWire-direct memory access (DMA).

### Grafische gebruikersinterface

De debugger bevat geen eigen grafische gebruikersinterface en gebruikt standaard een command-line interface. Er zijn verschillende grafische gebruikersinterfaces (frontends) gebouwd voor gdb, zoals UltraGDB, Xxgdb, Data Display Debugger (DDD), Nemiver, KDbg, GDBtk/Insight en de HP Wildebeest Debugger GUI (WDB GUI).
IDE's zoals Codelite, Code::Blocks, Dev-C++, Geany, GNAT Programming Studio (GPS), KDevelop, Qt Creator, Lazarus, MonoDevelop, Eclipse, NetBeans, Xcode en Visual Studio hebben ondersteuning voor GDB. GNU Emacs heeft een "GUD mode" en gereedschappen voor VIM bestaan (bijvoorbeeld clewn). Deze gereedschappen bieden gelijkaardige functies aan debuggers ingebouwd in IDE's.
Er bestaan ook andere debugging-gereedschappen die integreren met GDB, zoals geheugenlekdetectors.