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.
as
ar
-pa
– Objekt an Archiv anhängen.-pd
– Objekt aus Archiv entfernen.nm
strip
strings
size
readelf
elfedit
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 |