Dies ist eine alte Version des Dokuments!
QuickLinks
Der GNU Debugger erlaubt es, zu sehen, was in einem Programm während der Ausführung passiert oder was ein Programm zuletzt gemacht vor einem Absturz.
Die vier Hauptfunktionen von GDB sind:
GDB ist in vielen IDEs (wie z.B. Eclipse) integriert und wird über das GUI bedient. Alternativ kann GDB auch über die Kommandozeile gestartet werden:
gdb executable_name
Programm starten:
run arg1 arg2 arg3
Programm beenden:
kill
GDB beenden:
quit
Alle GDB Befehle können mit der GDB-Hilfefunktion aufgelistet werden:
help
STABS (symbol tables) ist das Format in welchem das Program für den Debugger beschrieben wird. Der GCC Compiler kompiliert C-Programme (.c) in Assembler-Programme (.s), welche vom Assembler in Objekt-Dateien (.o) kompiliert werden, die dann vom Linker und anderen Objekt-Dateien zu einem ausführbarem Programm verlinkt werden.
Mit der Option '-g' des GCC Compilers wird in die .s-Dateien zusätzliche Information eingefügt. Diese Information beschreibt Eigenschaften der Source-Datei, wie z.B. Zeilennummern, Typen, Scope der Variable, Funktionsnamen, usw.
Beispiel: C Source, ASM Source mit STAB
GDB kann auch Programme debuggen, die nicht lokal ausgeführt werden. Auf dem Target muss aber ein RSP-Server lauften, der mit dem GDB kommunizieren kann. Die Kommunikation läuft über das Remote Serial Protokoll.
In der Zukunft sollte der Deep-Compiler zwei Files generieren. Das Image-File, welches direkt auf den MPC5200 geladen und ausgeführt wird, und ein ELF-File, welches zusammen mit den Java-Sourcen vom GDB Debugger benutzt werden können, um den MPC5200 zu debuggen.
static void reset() { int stackOffset = US.GET4(sysTabBaseAddr + stStackOffset); int stackBase = US.GET4(sysTabBaseAddr + stackOffset + 4); int stackSize = US.GET4(sysTabBaseAddr + stackOffset + 8); US.PUTGPR(1, stackBase + stackSize - 4); // set stack pointer int kernelClinitAddr = US.GET4(sysTabBaseAddr + stKernelClinitAddr); US.PUTSPR(SRR0, kernelClinitAddr); US.PUTSPR(SRR1, SRR1init); //US.ASM("rfi"); int x = 4; x ^= 0x55; US.PUTGPR(R27, x); while (true); }