Development:GDB Remote einrichten

Aus TuxBoxWIKI
Version vom 17. September 2011, 09:25 Uhr von Tijuca (Diskussion | Beiträge) (GDB auf Coolstremboxen)
Wechseln zu: Navigation, Suche

Build Konfiguration

cdk/configure damit alle Debugsymbole vorhanden sind

--enable-debug

make yadd-neutrino gdb gdb-remote


Modifikation der Startscripte

In cdkroot/etc/init.d/start_neutrino vor die Zeile Code:

until neutrino -f -u ; do

folgendes einfügen: Code:

exit 0

Anwenden

weil wir Neutrino manuell starten werden. Yadd booten.

Per Telnet auf die Dbox einloggen, dann: Code:

gdbserver :5555 neutrino

gdb wartet dann auf den connect eines clients: Zitat:

Process neutrino created; pid = 189
Listening on port 5555

Auf dem Client ins Verzeichnis

$prefix/cdk/bin 

wechseln und Code:

./powerpc-tuxbox-linux-gnu-gdb ../../cdkroot/bin/neutrino

Dann geht es los: Code:

target remote dboxIP:5555
continue

Wenn Neutrino abgestürzt ist, kann, wie gehabt, mit Code:

bt full

ein backtrace erzeugt werden.

Weblinks

http://forum.tuxbox.org/forum/viewtopic.php?p=366575#p366575

GDB und Coolstream Boxen

Auch für die ARM basierten Boxen von Coolstream ist es möglich, dank dem Buildsystem von Seife, mit dem GDB zu arbeiten. Um den GDB nutzen zu können muss dieser mit den Targets gdb und gdb-remote erstellt werden. Dabei wird für die ARM Plattform der GDB einmal für die lokale Nutzung (also auf den Coolstreamboxen direkt) und einmal für die Benutzung von Remote aus gebaut. Die dabei entstehenden Pakete gdb*-[VER].opkg in den /tmp Ordner der Box kopieren und per opkg-cl install gdb-[VER].opkg gdb-remote-[VER].opkg dort installieren.
Es wird noch ein dritter GDB gebaut. Dieser bleibt auf dem PC und wird unter host/bin/ abgelegt.

GDB Remote benutzen

Damit der GDB Remote gesteuert werden kann muss eine funktionierende Netzwerkverbindung zur STB aufgebaut sein!
Auf der Setopbox wird der gdbserver gestartet. Dieser benötigt als Option die Angabe wohin die Meldungen gegeben werden sollen und das Programm was beobachtet werden soll. Dabei kann das Programm sich an eine PID "anheften". Will man also das neutrino Binary debuggen kann man folgenden Aufruf benutzen.

~ # gdbserver --attach :5555 $(pidof neutrino)
Attached; pid = 465
Listening on port 5555

Dies bedeutet nun folgendes, der gdbserver soll sich an eine PID anhängen (--attach), die Ausgabe soll ins Netzwerk auf Port 5555 erfolgen, dabei sind alle eingehenden IPs zugelassen. Will man hier den Bereich eingrenzen so setzt man die IP vor die Portangabe. Und der letzte Parameter ermittelt die PID ($(pidof neutrino)) von Neutrino, damit der GDB sich einklinken kann. Im Beispiel die PID 465.

Statt einer IP und eines Ports kann man auch ein anderes Charakterdevice angeben, z.B. einen weitere serielle Schnittstelle die mit einem USB2COM Adapter erstellt ist. Sieht dann so aus.

~ # gdbserver --attach /dev/ttyUSB0 $(pidof neutrino)
Attached; pid = 482
Listening on port 5555

Mit dem Absetzen einer dieser Befehle sind keine weiteren Eingaben auf der STB nötig (und auch möglich).