Remote-debug-Fehler mit GDB
Ich habe versucht remote zu Debuggen einer 32-bit-Anwendung auf x86_64-suse-linux, aber dieses "remote-Registrierung falsch formatierte" Fehlermeldung.
Start des gdbserver als lauscht auf port 12345 (gdbserver localhost:12345 my_prog)
- Und dies ist der Fehler:
$ gdb
GNU gdb 6.6
Copyright (C) 2006 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "x86_64-suse-linux".
(gdb) target remote <ip>:12345
Remote debugging using <ip>:12345
Remote register badly formatted: T0506:0000000000000000;07:80b8bcff00000000;10:4028f0f700000000;
here: 0000000;07:80b8bcff00000000;10:4028f0f700000000;
(gdb)
Dies ist die debug-server-Maschine (uname -a):
Linux-server-2.6.16.60-0.31-smp #1 SMP Tue Oct 7 16:16:29 UTC 2008 x86_64 x86_64 x86_64 GNU/Linux
- Und dies ist die debug-client-Maschine (uname -a):
Linux-client 2.6.16.54-0.2.5-default #1 Mon Jan 21 13:29:51 UTC 2008 x86_64 x86_64 x86_64 GNU/Linux
Beide Maschinen laufen in virtuellen Maschinen, obwohl (VMWare). Der gdbserver binary ist kopiert vom client-Rechner zum server-Rechner.
(Ich remote zu Debuggen, da die runtime-Umgebung auf dem debug-server ist die Produktion-wie, und enthalten keinerlei Entwicklungs-tools, Zugriff auf den source-code usw.)
Anregungen sind willkommen.
UPDATE: dies für mich gearbeitet, indem Sie den folgenden Befehl in gdb:
set architecture i386:x86-64
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vielleicht müssen Sie führen so etwas wie
set architecture i386
am(gdb)
Aufforderung? Was bedeutetshow architecture
zu sagen, nachdem Sie eine Verbindung zum remote-Ziel?Einem 64-bit-GDB können direkt debug-beide 32-und 64-bit-minderwertig verarbeitet (ich glaube dies nennt man multi-arch-Unterstützung).
Nicht so mit
gdbserver
: es unterstützt nicht multi-arch-debugging.Benötigen Sie eine
gdbserver
entspricht die Ziel-Architektur undgdb
entsprichtgdbserver
. Sie bauen aus dem source konfigurieren mit--target=i686
.Vielleicht haben Sie schon überprüft, aber der hier geht:
- Auf die 64-bit-Maschine, haben Sie eine 32-bit-Bibliotheken von es (libc, etc)?
- Haben Sie versucht mit gdb mit "-nx" (keine Initialisierung Dateien) wechseln?
1) Sie benötigen ein richtiges gdbserver für Ihren Ziel-Maschine und Ihr host-Maschine (diejenige, die passt die Ziel-Maschine in Ihrem Fall.
Sagen wir, ich möchte zu debug-ppc Ziel von einem x86-host:
Ich muss auf mein Ziel ein ppc executable gdbserver.
Benötige ich auf meinem host eine x86 ausführbare gdb für powerpc.
Nachdem Sie die Dinge, die Sie tun müssen, die folgenden von Ihrem Gastgeber, gdb, bevor die Verbindung zum Ziel-im Falle der Verwendung shared libs:
set solib-absolute-prefix $ELDK_PREFIX/eldk-4.2-ppc_4xx/$CROSS_COMPILE
dir $ELDK_PREFIX/eldk-4.2-ppc_4xx/$CROSS_COMPILE
ansonsten wird die host-gdb wird verrückt, versuchen zu laden, shared libs für x86.
Ich glaube, Sie brauchen, um gdb auf dem host-Computer mit einer Kopie der Ziel-Programm. I. e. wenn Sie
gdbserver myprog
auf der Ziel-Maschine, die Sie kopieren müssen übermyprog
auf dem host-Computer und führen Siegdb myprog
.Diese Weise gdb auf dem host-Computer wird automatisch abholen die Architektur aus der ausführbaren Datei. Läuft gdb auf dem host, wie dies auch das laden der Symbole, ohne die Sie bekommen würden, nicht aufgelöste Symbole (Fragezeichen).