Die GNU Compiler Collection unterstützt die Sprachen C, C++, Java, Ada, Fortran und Go.
Der Übersetzer erzeugt Programme in mehreren Schritten:
Der Übersetzer wertet folgende Umgebungsvariablen aus:
| Variable | Beschreibung | ||
|---|---|---|---|
| CPPFLAGS | Präprozessor | ||
| -MM | Regel mit Abhängigkeiten für make ausgeben | ||
| -MF | File | Dateiname für Abhängigkeiten ($DEPENDENCIES_OUTPUT) | |
| -I | Dir | Suchpfad für Includedateien erweitern (/usr/include) | |
| -D | Name[=Value] | Präprozessor-Variable definieren | |
| CFLAGS | Übersetzer | ||
| -c | Nicht binden, nur Objektdatei erzeugen | ||
| -g | Debug-Symbole hinzufügen | ||
| -pg | Profiling-Informationen hinzufügen | ||
| -std | c11 | Standard-Konformität sicherstellen | |
| -W | all | Warnungen ein- und ausschalten | |
| -O | 0 | Optimierungsgrad festlegen | |
| -fpic | Positionsunabhängigen Code erzeugen (siehe -shared) | ||
| LDFLAGS | Linker | ||
| -o | File | Dateiname für Binärdatei festlegen (statt a.out) | |
| -L | Dir | Suchpfad für Bibliotheken erweitern | |
| -l | File | Dynamische Bibliothek einbinden | |
| -shared | Dynamische Bibliothek erzeugen (siehe -fpic) | ||
| -pthread | Unterstützung für POSIX Threads einschalten |
| c89 | Aufzählungen, Zuweisung von Strukturen |
| c99 | Variable Arrays, Designierte Initialisierer |
| c11 | Multithreading und Atomics |
| c++11 | Threads, Lambda, Regex |
| c++14 | Typ-Inferenz, Move-Semantik |
| all | Alle sinnvollen Warnungen aktivieren |
| extra | Noch mehr Warnungen aktivieren |
| error | Warnungen als Fehler behandeln |
| pedantic | Strikte Einhaltung des Standards erzwingen |
| 0 | Keine Optimierung (default) |
| 1 | Einfache Optimierungungen für kleinere und schnellere Programme |
| 2 | Weitere Optimierungen |
| 3 | Maximale Optimierungsstufe |
| g | Debug-freundliche Optimierung |
| s | Optimierung auf kleinste Programmgröße |
| fast | Optimierung auf schnelle Ausführung |
Der Debugger kann ein Programm entweder schrittweise ablaufen lassen, ein Speicherabbild (coredump) untersuchen oder sich in einen laufenden Prozess einklinken:
gdb Program [Corefile | Pid]
| Kommando | Parameter | Beschreibung | |
|---|---|---|---|
| Hilfe anfordern | |||
| help | Topic | Befehle zu einem bestimmten Thema auflisten | |
| Command | Beschreibung zu einem Befehl anzeigen | ||
| apropos | Keyword | Hilfethemen zu einem Suchbegriff anzeigen | |
| Haltepunkte setzen | |||
| break | [File:]Line [if Condition] | Programm an dieser Zeile unterbrechen | |
| [File:]Function [thread Id] | Programm in dieser Funktion unterbrechen | ||
| (+|-)Offset | Programm nach einigen Zeilen unterbrechen | ||
| *MemoryAddress | Programm an Speicheradresse unterbrechen | ||
| tbreak | … | Programm nur einmal an der angegebenen Stelle unterbrechen | |
| watch | Condition | Beobachtungspunkt setzen und Programm unterbrechen | |
| clear | Alle Haltepunkte entfernen | ||
| Function | Haltepunkt für Funktion entfernen | ||
| Line | Haltepunkt für Zeile entfernen | ||
| *MemoryAddress | Haltepunkt für Speicheradresse entfernen | ||
| delete | [Breakpoint[-Breakpoint]] | Haltepunkte, Beobachtungspunkte und Fangpunkte entfernen | |
| disable | [Breakpoint[-Breakpoint]] | Haltepunkte deaktivieren | |
| enable | [Breakpoint[-Breakpoint]] | Haltepunkte reaktivieren | |
| info | breakpoints | Haltepunkte auflisten | |
| watchpoints | Beobachtungspunkte auflisten | ||
| Programm ausführen | |||
| run | Argument … | Programm bis zum ersten Haltepunkt ausführen | |
| continue | [Count] | Programm bis zum nächsten Haltepunkt fortsetzen und den aktuellen Haltepunkt n mal überspringen | |
| step | [Count] | Nächste Codezeile ausführen oder Funktion betreten | |
| next | [Count] | Nächste Codezeile ausführen ohne Funktion zu betreten | |
| finish | Programm bis zum Ende der aktuellen Funktion fortsetzen | ||
| until | [File:]Line | Programm bis zur angegebenen Zeile fortsetzen | |
| [File:]Function | Programm bis zur angegebenen Funktion fortsetzen | ||
| [File:]MemoryAddress | Programm bis zur angegebenen Speicheradresse fortsetzen | ||
| kill | Programm beenden | ||
| handle | Signal [no]{stop|print|pass|ignore} | Signalverarbeitung steuern | |
| where | Aktuelle Zeilennummer und Funktion anzeigen | ||
| info | handle | Einstellung der Signalverarbeitung anzeigen | |
| info | args | Kommandozeilenargumente ausgeben | |
| quit | Sitzung beenden | ||
| Aufrufhierarchie untersuchen | |||
| backtrace | Depth [full] | Aufrufhierarchie bis zur angegebenen Tiefe optional mit lokalen Variabeln ausgeben | |
| frame | Level | Hierarchieebene ausgeben bzw. auswählen | |
| up | Level | Hierarchieebene aufsteigen | |
| down | Level | Hierarchieebene absteigen | |
| print[/Format] | [File:]Name[@Count] | Variable ausgaben, bei Arrays nur eine Anzahl Elemente | |
| Quelltext anzeigen | |||
| list | [File:]Line[,Line] | Quelltext zeilenweise ausgeben | |
| [File:]Function)] | Quelltext für eine Funktion ausgeben | ||
| directory | Path | Quelltextpfad hinzufügen oder entfernen | |
| set | listsize Count | Anzahl der anzuzeigenden Quelltext-Zeilen festlegen | |
| show | listsize | Anzahl der anzuzeigenden Quelltext-Zeilen ausgeben | |
| show | directories | Quelltextpfade auflisten | |
format | Format |
| x | Hexadezimalzahl |
| o | Octalzahl |
| t | Binärzahl |
| d | Dezimalzahl |
| u | Vorzeichenlose Dezimalzahl |
| c | Zeichen |
| f | Fließkommazahl |
| a | Speicheradresse (hexadezimal) |
Ein Profiler hilft dem Programmierer, Flaschenhälse bei der Ausführung zu identifiziereun und diese zielgerichtet zu optimieren.
-pg).gmon.out mit binären Profiling-Informationen.gprof(1) auswerten.gprof Programm | gprof2dot.py | dot -Tsvg -o profile.svg
Das Dateiformat für Programme, Bibliotheken und Objektdateien heißt ELF.
asar-pa – Objekt an Archiv anhängen.-pd – Objekt aus Archiv entfernen.nmstripstringssizereadelfelfedit| Typ | Name | Segment | C | Beschreibung |
A | absolut | |||
B | BSS | .bss | static int zero; | Nicht initialisierte Variablen |
C | common | .bss | int global; | Dito für kleine Objekte |
D | data | .data | int global = 1; | |
G | global | .data | ||
I | indirect | .reloc ? | Indirekte Referenz auf ein anderes Objekt | |
N | Debug Symbole | |||
p | Stack unwinding | |||
R | readonly | .rodata | static const int pi = 3.14; | Initialisierte Konstante |
S | .bss | |||
T | text | .text | int func (void) {…} | Funktion |
U | undefined | .dynamic ? | exit(); | Referenz auf Objekt in einer anderen Bibliothek |
V | virtual | weak object | ||
W | weak | __attribute__((weak)) | Default-Implementierung, wird von gleichnamigem starkem Symbol überschrieben | |
- | stabs | |||
? | unknown |