Remote GDB für Cross-Targets

In diesem HowTo wird beschrieben, wie man mit Hilfe des GDB ein Cross-Target debuggen kann. Dieses Szenario ist besonders häufig bei der Entwicklung für eingebette Systeme anzutreffen, bei der die Entwicklung z.B. auf einem X86-Host für z.B. ein PowerPC-Target erfolgt.

Dafür wird ein GDB benötigt, der auch mit Cross-Targets (Host x86, Target PPC) umgehen kann. Deshalb muss der GDB von Hand neu gebaut werden. Die Quellen erhält man vom GNU FTP-Server. Es empfiehlt sich eine relativ aktuelle Version zu verwenden, da dabei Probleme mit aktuellen Compilern vermieden werden. Für dieses Tutorial habe ich die Version 6.7 und GCC 4.1 verwendet.

Das heruntergeladene ''tar.gz'' Archiv lässt sich mit dem Befehl

tar xvzf gdb-6.7.tar.gz

entpacken. Danach wechselt man in das Quellverzeichnis und konfiguriert den GDB z.B. mit dem Befehl

./configure --target=ppc-linux

Der Wert für --target ist natürlich von der Plattform die debugged werden soll abhängig. Anschließend wird der Debugger mit dem Befehl '''make''' gebaut.

In der für den MPC verwendeten ELDK-Distribution ist bereits der auf dem Target benötigte '''gdbserver''' enthalten. Das zu debuggende Programm wird auf dem Target z.B. wie folgt gestartet

gdbserver 192.168.0.10:2345 mpc_server -d 2 -i 1

Die IP-Adresse gibt den Host an, von dem zum gdbserver verbunden wird. Die Portnummer ''2345'' ist frei wählbar, darf jedoch keinen schon benutzten Port angeben.

Auf dem Host wird jetzt der neu gebaute GDB gestartet

/path/to/new/gdb /path/to/app/mpc_server

Auf der Kommandozeile des GDB verbindet man sich mit dem Target

target remote 192.168.0.30:2345

Jetzt kann man mittels '''continue''' die Ausführung des Programms starten oder zunächst Breakpoints etc. setzen. Die vollständige Dokumentation zum GDB kann unter GDB-Handbuch abgerufen werden.

Es ist sinnvoll den neu erstellten GDB an einer Stelle abzulegen die sich in der $PATH-Umgebungsvariable befindet. Alternativ kann man auch einen symbolischen Link mit ln -s erzeugen.

Linux

Um ein komfortableres Interface zum GDB zu haben, lässt sich unter Linux die ddd Oberfläche verwenden. Diese Umgebung lässt auch die Verwendung eines alternativen Debuggers zu. Dazu wird ddd mit dem '''--debugger NAME''' Switch gestartet. Die vollständige Dokumentation zu ddd gibt es unter hier.